1、实验拓扑如下,这里用NGINX做的基于端口的虚拟主机,方便之后的测试

 

 

2、安装前准备

Haproxy 国内下载你懂得

Keepalived 下载地址www.keepalive.org

同步时间

#ntpdate pool.ntp.org

3haproxy安装(主备节点安装一样)

#tar -zxvf haproxy-1.5.9.tar.gz #cd haproxy-1.5.9# uname -aLinux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux#make TARGET=linux26 PREFIX=/usr/local/haproxy install#cd /usr/local/haproxy# mkdir conf logs

4、创建配置文件信息如下

#vim conf/haproxy.cfg global       log 127.0.0.1 local0//日志输出配置,所有日志都记录在本机,通过local0输出     maxconn  5120  //最大连接数      chroot   /usr/local/haproxy  //改变当前工作目录     uid      100  //所属用户的uid     gid      100  //所属用户的gid     daemon  //以后台形式运行haproxy        nbproc   2  //创建2个进程进去deamon模式     pidfile  /usr/local/haproxy/logs/haproxy.pid  //pid文件  defaults       log     127.0.0.1  local3       mode    http  //http七层,tcp4层,health只返回OK     option  httplog  //采用httpd日志格式     option  dontlognull       option  redispatch       retries 3  //三次失败认为服务不可用 maxconn 3000  //默认的最大连接数     contimeout 5000  //连接超时时间     clitimeout 50000  //客户端超时时间     srvtimeout 50000  //服务器超时时间     stats enable       stats uri /admin  //统计页面的url     stats auth admin:admin  //统计页面的用户名密码     stats realm Haproxy \ statistic  //统计页面提示信息 stats hide-version//隐藏统计页面版本信息  listen web_proxy *:80 server web1 192.168.1.128:80 check inter 5000 fall 1 rise 2   server web1 192.168.1.128:8080 check inter 5000 fall 1 rise 2//check inter 5000 是检测心跳频率,rise 2 是2次正确认为服务可用,fall 1 是1次失败认为服务不可用,weight代表权重

5keepalive安装配置(主备安装一样,注意配置文件的修改)

# yum -y install openssl-devel#tar -zxvf keepalived-1.2.13.tar.gz#cd keepalived-1.2.13#./configure --prefix=/usr/local/keepalived#make && make install #cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/#ln -s /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/keepalived#chmod +x /etc/init.d/keepalived #mkdir /etc/keepalived#ln -sf /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf

6、修改配置文件

# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs {   notification_email {     root@localhost.com   }   notification_email_from root@localhost.com   smtp_server 127.0.0.1   smtp_connect_timeout 30   router_id LVS_DEVEL}vrrp_script chk_haproxy {   script "/root/chk_haproxy.sh"//检测脚本   interval 2   weight 2} vrrp_instance VI_1 {    state MASTER //实例的初始状态,备节点为BACKUP    interface eth0    virtual_router_id 51    priority 100//高优先级精选master,至少高backup50    advert_int 1    authentication {        auth_type PASS//认证方式,支持PASS和AH        auth_pass 1111//认证的密码    }    virtual_ipaddress {        192.168.1.200//vip    }        track_script {        chk_haproxy//检测命令        }}

7keepalived检测脚本

# cat chk_haproxy.sh #!/bin/bashA=`ps -C haproxy --no-header | wc -l`if [ $A = 0 ] ;then/etc/init.d/keepalived stopfi

8、启动keepalived

# service keepalived start 报错信息Starting keepalived: /bin/bash: keepalived: command not found[FAILED]解决方法# ln -s /usr/local/keepalived/sbin/keepalived /usr/sbin/keepalived

9、验证过程

首先先看下nginx配置

 

分别启动MasterSLAVE ,看到主备节点日志如下:

 

Master上可以看到vip信息

 

之后测试haproxy负载均衡是否正确

 

看下自动监控页面,发现轮询正常!

 

之后测试Masterhaproxy挂掉了,是否切换

#killall haproxy

之后看下keepalived的日志信息,发现主的已经根据脚本停掉了,并且VIP开始漂移

Slave的可以看到已经升为Master并且获得VIP地址

 

最后在测试访问,均正常!