前言* 随着负载均衡器的成熟,人们熟知的软件负载均衡如LVSHAProxy,各方面性能不亚于硬件负载均衡,HAProxy提供高可用性、负载均衡以及基于TCPHTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

我们平时用的负载均衡LVS是基于四层,新型的大型互联网公司也在采用HAProxy,了解了haproxy大并发、七层应用等特点,那今天我们来研究一下HAProxy+Keepalived基于七层负载高可用负载均衡的配置。

一、系统环境:

  1. 系统版本:CentOS6.0 x86_64
  2. HAProxy版本:1.4.21  
  3. Keepalived版本:1.2.1 
  4.  
  5. Nginx版本:1.2.2
  6. MASTER_IP:192.168.0.130  
  7. BACKUP_IP:192.168.0.131 
  8.  
  9. VIP:192.168.0.133  
  10. WEB_1:192.168.0.134  
  11. WEB_2:192.168.0.135 

二、HAProxy安装:

1)首先安装192.168.0.130上安装:

下载最新稳定版本:1.4.21

  1. cd /usr/src  ;wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.21.tar.gz  
  2.   
  3. tar xzf haproxy-1.4.21.tar.gz &&cd haproxy-1.4.21 &&make TARGET=linux26 PREFIX=/usr/local/haproxy &&make install PREFIX=/usr/local/haproxy  
  4. 安装完毕,在/usr/local/haproxy/目录下会看到三个目录:doc、sbin、share 

2) 接下来配置HAProxy

cd /usr/local/haproxy ;mkdir -p etc/

然后在/usr/local/haproxy/etc/下新建haproxy.cfg文件,这里拷贝haproxy配置文件:

  1. global  
  2.  
  3.         log 127.0.0.1   local0  
  4.  
  5.         maxconn 65535  
  6.  
  7.         chroot /usr/local/haproxy  
  8.  
  9.         uid 99     
  10.  
  11.         gid 99  
  12.  
  13.         daemon  
  14.  
  15.         nbproc 8  
  16.  
  17.         pidfile /usr/local/haproxy/haproxy.pid  
  18.   
  19.  
  20. defaults   
  21.  
  22.          log     127.0.0.1       local3   
  23.  
  24.          mode   http   
  25.  
  26.          option httplog   
  27.  
  28.          option httpclose   
  29.  
  30.          option dontlognull   
  31.  
  32.          option forwardfor   
  33.  
  34.          option redispatch   
  35.  
  36.          retries 2   
  37.  
  38.          maxconn 65535   
  39.  
  40.          balance source   
  41.  
  42.          stats   uri     /web-status   
  43.  
  44.          contimeout      5000   
  45.  
  46.          clitimeout      50000   
  47.  
  48.          srvtimeout      50000   
  49.  
  50.   
  51.  
  52. listen  chinaapp.sinaapp.com  
  53.  
  54.         bind *:80  
  55.  
  56.         mode http  
  57.  
  58.         option httplog  
  59.  
  60.         log global  
  61.  
  62.         option httpchk HEAD /index.html HTTP/1.0  
  63.  
  64.         server web1  192.168.0.134:80 weight 5  check inter 2000 rise 2 fall 3  
  65.  
  66.         server web2  192.168.0.135:80 weight 5  check inter 2000 rise 2 fall 3 

然后启动haproxy,如下执行启动命令:

  1. /usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/etc/haproxy.cfg 
  2.  
  3. [WARNING] 217/202150 (2857) : Proxy 'chinaapp.sinaapp.com': in multi-process mode, stats will be limited to process assigned to the current request. 
  4.  
  5. 会提示如上信息,nbproc进程如果设置为1则不会提示,如果想去掉这个提示可以修改编译文件即可。 在源码配置src/cfgparse.c找到如下行
  6. 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",
  7. 调整nbproc > 1数值即可。

三、安装Keepalived:

  1. cd /usr/src ; 
  2.  
  3. wget http://www.keepalived.org/software/keepalived-1.2.1.tar.gz 
  4.  
  5. tar xzf keepalived-1.2.1.tar.gz 
  6.  
  7. cd keepalived-1.2.1 && 
  8.  
  9. ./configure –with-kernel-dir=/usr/src/kernels/2.6.32-71.el6.x86_64/  &&make &&make install 
  10.  
  11. 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:

  1. ! Configuration File for keepalived 
  2.  
  3. global_defs { 
  4.  
  5.  notification_email { 
  6.  
  7.      wgkgood@139.com 
  8.  
  9.  
  10.    notification_email_from wgkgood@139.com 
  11.  
  12.    smtp_server 127.0.0.1 
  13.  
  14.    smtp_connect_timeout 30 
  15.  
  16.    router_id LVS_DEVEL 
  17.  
  18.  
  19. vrrp_script chk_haproxy { 
  20.  
  21.    script "/data/sh/check_haproxy.sh" 
  22.  
  23.    interval 2 
  24.  
  25.    weight 2 
  26.  
  27.  
  28. # VIP1 
  29.  
  30. vrrp_instance VI_1 { 
  31.  
  32.     state BACKUP 
  33.  
  34.     interface eth0 
  35.  
  36.     lvs_sync_daemon_inteface eth0 
  37.  
  38.     virtual_router_id 151 
  39.  
  40.     priority 100 
  41.  
  42.     advert_int 5 
  43.  
  44.     nopreempt 
  45.  
  46.     authentication { 
  47.  
  48.         auth_typePASS 
  49.  
  50.         auth_pass 2222 
  51.  
  52.     } 
  53.  
  54.     virtual_ipaddress { 
  55.  
  56.         192.168.0.133 
  57.  
  58.     } 
  59.  
  60.     track_script { 
  61.  
  62.     chk_haproxy 
  63.  
  64.    } 
  65.  

五、创建haproxy脚本:

设置可执行权限chmod +x check_haproxy.sh,内容如下:

  1. #!/bin/bash 
  2.  
  3. #auto check haprox process 
  4.  
  5. #2012-8-12 wugk 
  6.  
  7. killall -0 haproxy 
  8.  
  9.   if 
  10.  
  11.   [[ $? -ne 0 ]];then 
  12.  
  13.   /etc/init.d/keepalived stop 
  14.  
  15.   fi 

BACKUP同样如上配置haproxykeepalived,配置完修改优先级为90即可,然后启动。

六、测试haproxy+keepalived

如图当手动kill 131haproxy进程后,130keepalived后台日志显示如下,并且访问VIP 192.168.0.133 正常访问:

 HAProxy+Keepalived高可用负载均衡配置_keepalived

访问haproxy status如下图:

 HAProxy+Keepalived高可用负载均衡配置_haproxy keepalived_02

本文参考煮酒兄http://andrewyu.blog.51cto.com/1604432/669491 HAProxy+Keepalived高可用负载均衡配置