前言 * 随着负载均衡器的成熟,人们熟知的软件负载均衡如 LVS 、 HAProxy ,各方面性能不亚于硬件负载均衡, HAProxy 提供高可用性、负载均衡以及基于 TCP和 HTTP 应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
HAProxy 特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。
我们平时用的负载均衡 LVS 是基于四层,新型的大型互联网公司也在采用 HAProxy ,了解了 haproxy 大并发、七层应用等特点,那今天我们来研究一下 HAProxy+Keepalived 基于七层负载高可用负载均衡的配置。
一、系统环境:
系统版本:CentOS6.0 x86_64
HAProxy版本:1.4.21
Keepalived版本:1.2.1
Nginx版本:1.2.2
MASTER_IP:192.168.0.130
BACKUP_IP:192.168.0.131
VIP:192.168.0.133
WEB_1:192.168.0.134
WEB_2:192.168.0.135
二、 HAProxy 安装:
1 )首先安装 192.168.0.130 上安装:
下载最新稳定版本: 1.4.21
[root@lw-01 ~]# cd /usr/src ;wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.21.tar.gz [root@lw-01 ~]# tar xzf haproxy-1.4.21.tar.gz [root@lw-01 ~]# cd haproxy-1.4.21 [root@lw-01 ~]# make TARGET = linux26 PREFIX =/usr/local/haproxy [root@lw-01 ~]# make install PREFIX =/usr/local/haproxy
安装完毕,在/usr/local/haproxy/目录下会看到三个目录:doc、sbin、share
2) 接下来配置 HAProxy 。
然后在 /usr/local/haproxy 下新建 haproxy.cfg 文件:
[root@lw-01 ~]# cd /usr/local/haproxy [root@lw-01 haproxy]# vi haproxy.cfg global #全局设置 log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出 #log loghost local0 info maxconn 4096 #最大连接数 chroot /usr/local/haproxy uid 99 #所属运行的用户uid gid 99 #所属运行的用户组 daemon #以后台形式运行haproxy nbproc 1 #启动1个haproxy实例 pidfile /usr/local/haproxy/haproxy.pid #将所有进程写入pid文件 #debug #quiet defaults #默认设置 #log global log 127.0.0.1 local3 #日志文件的输出定向 mode http #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发 option httplog #日志类别,采用httplog option dontlognull option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只>能模拟这种模式的实现 retries 3 #3次连接失败就认为服务器不可用,主要通过后面的check检查 option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器 maxconn 2000 #最大连接数 stats enable stats uri /haproxy-admin #haproxy 监控页面的访问地址 timeout connect 5000 #连接超时时间 timeout client 50000 #客户端连接超时时间 timeout server 50000 #服务器端连接超时时间 stats auth liuwei:liuwei #设置监控页面的用户和密码:Frank stats hide-version #隐藏统计页面的HAproxy版本信息 #frontend http-in #前台 # bind *:81 # mode http # option httplog # log global # default_backend htmpool #静态服务器池 # #backend htmpool #后台 # balance leastconn#负载均衡算法 # option httpchk HEAD /index.html HTTP/1.0 #健康检查 # server web1 192.168.2.10:80 cookie 1 weight 5 check inter 2000 rise 2 fall 3 # server web2 192.168.2.11:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3 listen web_proxy 0.0.0.0:81 option httpchk GET /index.html server s1 192.168.2.10:80 weight 3 check server s3 192.168.2.11:80 weight 3 check #cookie 1表示serverid为1,check inter 1500 是检测心跳频率 #rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
3) 然后启动 haproxy ,如下执行启动命令:
启动服务: # /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg [WARNING] 217/202150 (2857) : Proxy 'chinaapp.sinaapp.com': in multi-process mode, stats will be limited to process assigned to the current request. 重启服务: # /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/logs/haproxy.pid` 停止服务: # killall haproxy
会提示如上[WARING]信息,nbproc进程如果设置为1则不会提示,如果想去掉这个提示可以修改编译文件即可。 在源码配置src/cfgparse.c找到如下行
if (nbproc > 1) { if (curproxy->uri_auth) { - Warning("Proxy '%s': in multi-process mode, stats will be limited to process assigned to the current request.\n",
+ Warning("Proxy '%s': in multi-process mode, stats will be limited to the process assigned to the current request.\n",
调整nbproc > 1数值即可。
4)
设置开机启动
为了方便系统在开机时加载,还可以创建启动脚本:
# vim /etc/rc.d/init.d/haproxy 内容如下: #! /bin/sh set -e PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/haproxy/sbin PROGDIR=/usr/local/haproxy PROGNAME=haproxy DAEMON=$PROGDIR/sbin/$PROGNAME CONFIG=$PROGDIR/$PROGNAME.conf PIDFILE=$PROGDIR/$PROGNAME.pid DESC="HAProxy daemon" SCRIPTNAME=/etc/init.d/$PROGNAME # Gracefully exit if the package has been removed. test -x $DAEMON || exit 0 start() { echo -n "Starting $DESC: $PROGNAME" $DAEMON -f $CONFIG echo "." } stop() { echo -n "Stopping $DESC: $PROGNAME" haproxy_pid=cat $PIDFILE kill $haproxy_pid echo "." } restart() { echo -n "Restarting $DESC: $PROGNAME" $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
保存后赐予可执行权限
# chmod +x /etc/rc.d/init.d/haproxy
并通过以下命令加载到开机服务启动列表
# chkconfig --add haproxy
三、安装 Keepalived:
cd /usr/src ; wget http://www.keepalived.org/software/keepalived-1.2.1.tar.gz tar xzf keepalived-1.2.1.tar.gz cd keepalived-1.2.1 && ./configure --with-kernel-dir =/usr/src/kernels/2.6.32-71.el6.x86_64/ make &&make install DIR =/usr/local/ ;cp $DIR/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/ && cp $DIR/etc/sysconfig/keepalived /etc/sysconfig/ && mkdir -p /etc/keepalived && cp $DIR/sbin/keepalived /usr/sbin/
四、配置 keepalived:
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_script chk_haproxy { script "/data/sh/check_haproxy.sh" interval 2 weight 2 } # VIP1 vrrp_instance VI_1 { state BACKUP interface eth0 lvs_sync_daemon_inteface eth0 virtual_router_id 151 priority 100 advert_int 5 nopreempt authentication { auth_typePASS auth_pass 2222 } virtual_ipaddress { 192.168.0.133 } track_script { chk_haproxy } }
五、创建haproxy脚本:
设置可执行权限 chmod +x check_haproxy.sh ,内容如下:
#!/bin/bash #auto check haprox process #2012-8-12 wugk killall -0 haproxy if [[ $? -ne 0 ]];then /etc/init.d/keepalived stop fi
BACKUP 同样如上配置 haproxy 、 keepalived ,配置完修改优先级为 90 即可,然后启动。
六、测试 haproxy+keepalived :
如图当手动 kill 掉 131 的 haproxy 进程后, 130 的 keepalived 后台日志显示如下,并且访问 VIP 192.168.0.133 正常访问:
访问haproxy status如下图:
本文参考煮酒兄 http://andrewyu.blog.51cto.com/1604432/669491 HAProxy+Keepalived 高可用负载均衡配置
Haproxy安装及配置:http://johnsz.blog.51cto.com/525379/715922/