博文转自

介绍
HAProxy是高性能的代理服务器,其可以提供7层和4层代理,具有healthcheck,负载均衡等多种特性,性能卓越,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。

KeepAlived 是一个高可用方案,通过VIP(即虚拟IP)和心跳检测来实现高可用。其原理是存在一组(两台)服务器,分别赋予Master,Backup两个角色,默 认情况下Master会绑定VIP到自己的网卡上,对外提供服务。Master,Backup会在一定的时间间隔向对方发送心跳数据包来检测对方的状态, 这个时间间隔一般为2秒钟,如果Backup发现Master宕机,那么Backup会发送ARP包到网关,把VIP绑定到自己的网卡,此时Backup 对外提供服务,实现自动化的故障转移,当Master恢复的时候会重新接管服务。

我们的keepalived主主的应用场景:因为我们需要同时为主域名和图片服务器域名同时提供分发请求,所以用到了Haproxy+keepalived主主模式。

默认情况下,第一台负载均衡器主要分发www.baison.com.cn的请求,第二台负载均衡器主要分发img.baison.com.cn的请求。任意一台宕机都不会影响网站分发。这样不会导致服务器浪费。

VIP1=192.168.150.222            (www.baison.com.cn)VIP2=192.168.150.223            (img.baison.com.cn)haproxy01=192.168.150.110haproxy02=192.168.150.112web1=192.168.158.116web2=192.168.158.117web3=192.168.158.118img1=192.168.158.119img2=192.168.158.120

安装配置过程

1、安装配置过程,(两台Haproxy的安装配置步骤一样)haproxy下载地址:http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz#cd /usr/local/src#wget  http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.24.tar.gz#tar xf  haproxy-1.4.24.tar.gz#cd haproxy-1.4.24#make TARGET=linux26 ARCH=x86_64#编译参数参考README,其中TARGET是指定内核版本,ARCH指定CPU架构,#make  install2、安装完毕后,创建配置文件和启动文件。#mkdir /etc/haproxy#cp examples/haproxy.cfg  /etc/haproxy#cp examples/haproxy.init  /etc/init.d/haproxy#chmod +x /etc/init.d/haproxy#ln -s /usr/local/sbin/haproxy /usr/sbin/

3、编辑配置文件(两台Haproxy配置文件相同)

# vim /etc/haproxy/haproxy.cfg# this config needs haproxy-1.1.28 or haproxy-1.2.1global     log 127.0.0.1  local0    #日志输出配置,所有日志都记录在本机,通过local0输出     log 127.0.0.1 local1 notice                #log loghost  local0 info      maxconn 65535         #最大连接数     chroot /usr/local/       #改变当前工作目录。     uid 99             #所属用户的uid     gid 99             #所属运行的gid     daemon             #以后台形式运行haproxydefaults  log global  mode http  #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK  option dontlognull  option httplog  retries 3              #两次连接失败就认为是服务器不可用  option redispatch   #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器  option abortonclose  #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接  maxconn 65535            #默认的最大连接数#timeout http-keep-alive 10s# timeout queue 1m  contimeout                5000    #连接超时  clitimeout                50000    #客户端超时  srvtimeout                50000    #服务器超时  timeout check 5s                  #心跳检测超时  stats refresh 30s                  #统计页面自动刷新时间     stats uri  /stats                 #统计页面url        stats realm baison-test-Haproxy     #统计页面密码框上提示文本  stats auth admin:admin123        #统计页面用户名和密码设置    stats hide-version            #隐藏统计页面上HAProxy的版本信息frontend www  bind :80  #这里建议使用bind *:80的方式,要不然做集群高可用的时候有问题,vip切换到其他机器就不能访问了。  acl web hdr(host) -i www.baison.com.cn  #acl后面是规则名称,-i是要访问的域名,如果访问www.baison.com这个域名就分发到下面的webserver 的作用域。  acl img hdr(host) -i img.baison.com.cn  #如果访问img.baison.com.cn就分发到imgserver这个作用域。  use_backend webserver if web  use_backend imgserver if img                                                                                                                                                                                                                             backend webserver             #webserver作用域  mode http  balance roundrobin        #banlance roundrobin 轮询,balance source 保存session值,支持static-rr,leastconn,first,uri等参数  option httpchk /index.html  #检测文件,如果分发到后台index.html访问不到就不再分发给它。                                                              server web01 192.168.158.116:80  check inter 2000 fall 3 weight 20server     web02 192.168.158.117:80  check inter 2000 fall 3 weight 10server     web03 192.168.158.118:80  check inter 2000 fall 3 weight 10                                                                                       backend imgserver   mode http   option httpchk /index.php   balance roundrobin                               server img01 192.168.149.119:80 check inter 2000 fall 3     server img02 192.168.149.120:80 check inter 2000 fall 3

4、启动Haproxy服务,查看状态

#service  haproxy  start

5、安装配置keepalived(两台keepalived安装步骤一样)

#tar zxvf  -1.2.7.tar.gz#cd keepalived-1.2.7#./configure --prefix=/usr/local/keepalived#make#make install#cp /usr/local/keepalived/sbin/keepalived /usr/sbin/#cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/#cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/#mkdir /etc/keepalived#cp /usr/local/keepalived/etc/keepalived/keepalived.conf  /etc/keepalived/

6、第一台keepalived配置文件。第一台做192.168.150.222vip的master,192.168.150.223的backup

#vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {   router_id LVS_DEVEL}vrrp_script chk_haproxy {         script "/usr/local/keepalived/check_haproxy.sh"        interval 2        weight 2}vrrp_instance VI_1 {    state MASTER    interface eth0    virtual_router_id 51    priority 100    advert_int 1    authentication {        auth_type PASS        auth_pass 5555    }track_script {        chk_haproxy #监测haproxy进程状态    }    virtual_ipaddress {        192.168.150.222    }}vrrp_instance VI_2 {    state BACKUP    interface eth0    virtual_router_id 52    priority 99    advert_int 1    authentication {         auth_type PASS         auth_pass 1111    }    virtual_ipaddress {        192.168.150.223                  }}

7、第二台keepalived的配置文件

#vim /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs {   router_id LVS_DEVEL}vrrp_script chk_haproxy {        script "/usr/local/keepalived/check_haproxy.sh"        interval 2        weight 2}vrrp_instance VI_1 {    state BACKUP    interface eth0    virtual_router_id 51    priority 99    advert_int 1    authentication {        auth_type PASS        auth_pass 5555    }track_script {        chk_haproxy      #监测haproxy进程状态    }    virtual_ipaddress {        192.168.150.222    }}vrrp_instance VI_2 {    state MASTER    interface eth0    virtual_router_id 52    priority 100    advert_int 1    authentication {         auth_type PASS         auth_pass 1111    }    virtual_ipaddress {        192.168.150.223            }}

8、检测脚本,为了防止haproxy服务关闭导致keepalived不自动切换。

#vim /usr/local/keepalived/check_haproxy.sh#!/bin/bashif [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then     /etc/init.d/haproxy  startfisleep 2if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then       /etc/init.d/keepalived stopfi

9、启动两台keepalived和Haproxy服务。

#servcie haproxy  start#service keepalived  start

10、查看两台服务器的VIP

#ip addr

11、官网内核优化建议。

echo 1024 60999 > /proc/sys/net/ipv4/ip_local_port_rangeecho 30 > /proc/sys/net/ipv4/tcp_fin_timeoutecho 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlogecho 262144 > /proc/sys/net/ipv4/tcp_max_tw_bucketsecho 262144 > /proc/sys/net/ipv4/tcp_max_orphansecho 300 > /proc/sys/net/ipv4/tcp_keepalive_timeecho 1 > /proc/sys/net/ipv4/tcp_tw_recycleecho 0 > /proc/sys/net/ipv4/tcp_timestampsecho 0 > /proc/sys/net/ipv4/tcp_ecnecho 1 > /proc/sys/net/ipv4/tcp_sackecho 0 > /proc/sys/net/ipv4/tcp_dsack

12、测试,关闭任意一台keepalived,或者拔掉任意keepalived的网线。img和www域名访问正常。