本文Centos6.0

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代 理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

这里是两台Haproxy负责后台的控制;使用keepalived实现热备;下面就是正题了:

做的图太恶心了,将就下吧

角色;    主机名;          ip;

Haproxy1; node1             192.168.244.147

Haproxy2; node2             192.168.244.148

S1(web1); lv1               192.168.244.149

S2(web2); lv2               192.168.244.150

Haproxy的两台服务器提供的Vip:192.168.244.200

1、首先在lv1、lv2上部署httpd

[root@lv1 ~]# yum install -y httpd

[root@lv2 ~]# yum install -y httpd

将这两台的Index.html全部标记;

分别显示lv1、lv2

访问测试是否正常

2、分别在node1、node2上部署haproxy、keepalived

[root@node1 ~]# yum install -y keepalived haproxy


[root@node2 ~]# yum install -y keepalived haproxy


接下来配置haproxy

node1:

####################全局配置信息########################         
          global         
                    log                   127.0          .          0.1           local0        #[err warning info debug]         
                    chroot      /          var          /lib/haproxy        #chroot运行的路径         
                    pidfile     /          var          /run/haproxy.pid          
          #haproxy的pid存放路径,启动进程的用户必须有权限访问此文件         
                    maxconn               4000                              #默认最大连接数         
                    user        haproxy                 #所属运行的用户         
                    group       haproxy                 #所属运行的用户组         
                    nbproc                1                                 #进程数量(可以设置多个进程提高性能)         
                    daemon                              #以后台形式运行haproxy         
                    #####################默认的全局设置######################         
                    ##这些参数可以被利用配置到frontend,backend,listen组件##         
          defaults         
                    mode                    http    #所处理的类别 (#          7          层 http;          4          层tcp  )         
                    log                     global         
                    option                  httplog     #日志类别http日志格式         
                    option                  dontlognull #不记录健康检查的日志信息         
                    option                  httpclose   #每次请求完毕后主动关闭http通道         
                    option                  forwardfor         
          #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip                            
                    option                  redispatch  #serverId对应的服务器挂掉后,强制定向到其他健康的服务器         
                    retries                           3                     #          3          次连接失败就认为服务不可用,也可以通过后面设置         
                    stats               refresh           20                #统计页面刷新间隔         
                    timeout connect         10s         #连接超时         
                    timeout client                    5000                  #客户端超时         
                    timeout server                    50000                 #服务器超时         
                    maxconn                           3000         
                    balance     roundrobin              #默认的负载均衡的方式,轮询方式         
                    stats uri /haproxy-stats            #监控页面的url         
          listen proxy *:          8080         
                    option httpchk HEAD /index.html #心跳检测的文件         
                    server server1            192.168          .          244.149          :          80           cookie server1 check inter           1500           rise           3           fall           3         
          #服务器定义,cookie           1          表示serverid为web1,check inter           1500          是检测心跳频率rise           3          是          3          次正确认为服务器可用         
          #fall           3          是          3          次失败认为服务器不可用,weight代表权重         
                    server server2            192.168          .          244.150          :          80           cookie server2 check inter           1500           rise           3           fall           3

node2的haproxy配置是一样的,copy过去就可以了

3、在node1、node2上配置keepalived

node1:

! Configuration File           for           keepalived         
          global_defs {         
                    notification_email {         
                    sysadmin@firewall.loc         
                    }         
                    notification_email_from Alexandre.Cassen@firewall.loc         
                    smtp_server           192.168          .          200.1         
                    smtp_connect_timeout           30         
                    router_id LVS_DEVEL         
          }         
          vrrp_script chk_http_port       {         
                    script            "/etc/keepalived/check_haproxy.sh"         
                    interval                  2                 #脚本执行间隔         
                    weight          -          20               #脚本结果导致的优先级变更:          20          表示优先级+          20          ;-          20          则表示优先级-          20         
          }         
          vrrp_instance VI_1 {         
                    state MASTER         
                    interface           eth0         
                    virtual_router_id           51         
                    priority           100         
                    advert_int           1         
                    authentication {         
                    auth_type PASS         
                    auth_pass           1111         
                    }         
          track_script    {         
                    chk_http_port         
                    }         
                    virtual_ipaddress {         
                    192.168          .          244.200         
                    }         
          }

编辑脚本:

[root@node1 ~]# cat /etc/keepalived/check_haproxy.sh         
          #!/bin/bash         
          A=`ps -C haproxy --no-header |wc -l`         
          if           [ $A -eq           0           ];then         
          /etc/init.d/haproxy restart         
          echo           "启动haproxy"           &> /dev/          null         
          sleep           3         
          if           [ `ps -C haproxy --no-header |wc -l` -eq           0           ];then         
          /etc/init.d/keepalived stop         
          echo           "关闭keepalived"           &> /dev/          null         
          fi         
          fi

node2和上面的一样,只是将priority 改成 90;state 改成 BACKUP;

4、分别启动keepalived和haproxy

[root@node1 ~]# /etc/init.d/haproxy start         
          正在启动 haproxy:         
          [root@node1 ~]# /etc/init.d/keepalived start         
          正在启动 keepalived:                                      [确定]

5、测试

node2:

[root@node2 ~]# tcpdump vrrp

说明现在的vip是node1是提供服务

当你在node1上stop掉keepalived后,你会发现

node2进行了顶替

现在进行测试web

http://192.168.244.200:8080

 两个浏览器浏览发现,是不同的机器进行了服务

现在打开http://192.168.244.200:8080/haproxy-stats

当你在lv1上将httpd停掉后:

[root@lv1 ~]# /etc/init.d/httpd stop         
          停止 httpd:                                               [确定]


你会发现:

haproxy进行了自动剔除,当你恢复后,就自动顶上了;

简单应用就写到这里了~~欢迎大家拍砖,建议~~

本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1212859