HAProxy是一款反向代理服务器工具,通过它,可以实现负载均衡。它支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。新的1.3引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.

实验拓扑:
                              172.16.0.198
    172.16.0.200             /  Web Nginx  \      172.16.0.250
client<-->Haproxy(负载均衡)<-->                <---->mysql(集群)
                             \  Web Nginx  /
                               172.16.0.218

利用HAPorxy实现负载均衡:
一、服务器端安装配置:
wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.15.10.tar.gz
tar zxvf haproxy-1.3.15.10.tar.gz
mv haproxy-1.3.15.10  /usr/local/haproxy
mkdir /etc/haproxy
cd /usr/local/haproxy/
make TARGET=linux26
(说明:make TARGET=linux26 CPU=x86-64,我这里是64bit的redhat,如果你是32bit,使用make TARGET=linux26 CPU=i686在当前目录下生成了haproxy)
make install
cp /usr/local/haproxy/examples/haproxy.cfg  /etc/haproxy/
修改配置文件如下:
global
        maxconn 4096 #最大连接数
        user nobody  #用户
        group nobody #组
        daemon         #使HAProxy进程进入后台运行
        nbproc 4  #通过nbproc多设置几个haproxy并发进程,这样每个进程的task_queue相对就会短很多,性能自然就能提高不少
        log 127.0.0.1 local0 err #[err warning info debug]
        pidfile /usr/local/haproxy/haproxy.pid #所有进程的pid文件

defaults
        log global  #采用全局配置日志格式
        mode http   #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
        option httplog #采用http日志格式
        option dontlognull #
        retries 3     #三次连接失败就认为是服务器不可用,也可以通过后面设置
        option redispatch  #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
        option abortonclose #三次连接失败就认为是服务器不可用,也可以通过后面设置
        maxconn 20000        #默认的最大连接数
        contimeout 5000     #5秒连接超时(单位毫秒)
        clitimeout 50000    #连接超时
        srvtimeout 50000    #服务器超时
        timeout check 2000    #心跳检测超时
listen Nginx_Web 172.16.0.200:80(若配置虚拟主机,讲Nginx_Web修改为域名)
        mode http
        balance roundrobin #负载均衡算法(简单的轮询,balance roundrobin;根据请求的源IP,balance source;根据请求的uri,balance uri;根据请求RUL中的参数,balance url_param)
        option httpclose  #
        option forwardfor #
    option httpchk GET /test.html #健康检测
        server nginx_198 172.16.0.198:80 weight 3 minconn 4 maxconn 12 check inter 1500 rise 3 fall 3
        server nginx_218 172.16.0.218:80 weight 3 minconn 4 maxconn 12 check inter 1500 rise 3 fall 3
    #rise 3是3次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
listen my_stats 172.16.0.200:8089
        mode http        #http的7层模式
        balance roundrobin     
        stats refresh 5s      #统计页面自动刷新时间
        stats hide-version    #隐藏统计页面上HAProxy的版本信息
        stats uri / haproxy-stats  #统计页面url
        stats realm Haproxy \ statistic
        stats auth admin:admins #统计页面用户名和密码设置
二、日志设置:
HAProxy可以收集本机及其他后端服务器日志,但是需要在HAProxy和操作系统上作一些配置。
使用root账户首先修改/etc/sysconfig/syslog文件,将SYSLOGD_OPTIONS="-m 0” 修改为SYSLOGD_OPTIONS="-m 0 -r -x",支持收集远程服务器日志。

# vim /etc/syslog.conf
在最下边增加
local3.*         /var/log/haproxy.log
local0.*         /var/log/haproxy.log
重启核心日志服务使配置起效
# service syslog restart

三、启动和监控
haproxy  -f /etc/haproxy/haproxy.cfg 启动haproxy
查看监控:
http://172.16.0.200:8089/haproxy-stats
四、开机启动脚本:
haproxy   -f   <配置文件>   [-n 最大并发连接总数] [-N 每个侦听的最大并发数] [-d] [-D] [-q] [-V] [-c] [-p <pid文件>] [-s] [-l] [-dk]
[-ds] [-de] [-dp] [-db] [-m <内存限制M>] [{-sf|-st} pidlist...]
 -d     前台,debug模式
       -D     daemon模式启动
       -q     安静模式,不输出信息
       -V     详细模式
       -c     对配置文件进行语法检查
       -s     显示统计数据
       -l     显示详细统计数据
       -dk 不使用kqueue
       -ds 不使用speculative epoll
       -de 不使用epoll
       -dp 不使用poll
       -db 禁用后台模式,程序跑在前台
       -sf <pidlist>程序启动后向pidlist里的进程发送FINISH信号,这个参数放在命令行的最后
       -st <pidlist>程序启动后向pidlist里的进程发送TERMINATE信号,这个参数放在命令行的最后

chkconfig  --add haproxy
chkconfig  --level 35 haproxy on
vim /etc/init.d/haproxy
chmod 755 /etc/init.d/haproxy
脚本内容如下:
#!/bin/bash
# chkconfig: - 85 15
# description: haproxy is a World Wide Reverse agent,load balancers. It is used to server
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin
DIR=/usr/local/haproxy
HA=haproxy
DAEMON=/usr/local/sbin/$HA
CONFIG=/etc/haproxy/haproxy.cfg
PIDFILE=$DIR/$HA.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$HA

# Gracefully exit if the package HAs been removed.
test -x $DAEMON || exit 0

start()
{
        echo -n "Starting $DESC: $HA"
        $DAEMON -f $CONFIG
        echo "."
}

stop()
{
        echo -n "Stopping $DESC: $HA"
        HAproxy_pid=`cat $PIDFILE`
        kill $HAproxy_pid
        echo "."
}

restart()
{
        echo -n "Restarting $DESC: $HA"
        $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
        echo "."
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        restart
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
        exit 1
        ;;
esac
exit 0

四、客户端设置:
安装nginx,添加test.html检查用的文件(内容可随意)