HAPROXY+KEEPALIVE构建高可用集群

新增一台HA节点192.168.0.155,虚拟IP192.168.0.160,其它IP见上文。

安装KEEPALIVE:yum install keepalived

分别在151和155 安装完成后,修改/etc/keepalived/keepalived.conf,我使用151作为主节点,155为备节点。

151配置如下:

! Configuration File for keepalived
global_defs {
   notification_email {
     test@xxx.net.cn
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
###########
vrrp_script chk_ha {
                script "/opt/chk_ha.sh"
                interval 2
                weight 2
}
###########
vrrp_instance VI_1 {
    state MASTER # 主节点
    interface eth0 #根据实际情况修改
    virtual_router_id 51
    mcast_src_ip 192.168.0.151  # 本机ip
    priority 100 # 这里要大于备节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    chk_ha
    }
    virtual_ipaddress {
        192.168.0.160  # 注意这里改成虚拟IP
    }
}

155配置如下:

! Configuration File for keepalived
global_defs {
   notification_email {
     test@xxx.net.cn
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
###########
vrrp_script chk_ha {
                script "/opt/chk_ha.sh"
                interval 2
                weight 2
}
###########
vrrp_instance VI_1 {
    state BACKUP # 备份节点
    interface eth0 #根据实际情况修改
    virtual_router_id 51
    mcast_src_ip 192.168.0.155  # 本机ip
    priority 95 # 这里要小于主节点
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
    chk_ha
    }
    virtual_ipaddress {
        192.168.0.160  # 注意这里改成虚拟IP
    }
}

其中,chk_ha是用于检测HAPROXY是否存活的脚本,内容如下:

#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
     /etc/init.d/haproxy  start
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ]; then
       /etc/init.d/keepalived stop
fi

添加执行权限后,给151和155 分别添加虚拟IP:ifconfig eth0:0 192.168.0.160 netmask 255.255.255.0 up

添加后结果如下

[root@test5 ~]# ifconfig eth0:0
eth0:0    Link encap:Ethernet  HWaddr AE:A9:9C:02:C3:28  
          inet addr:192.168.0.160  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:17

155上的HA配置完全和151一样,但这里注意把listen status改成虚拟IP的192.168.0.160:8080。

启动KEEPALIVED服务:

[root@test5 ~]# service keepalived start
Starting keepalived:                                       [  OK  ]

由于有chk_ha这个脚本存在所以ha服务会自动启动。

此时,即便151的HA节点故障,155将自动接替151的工作。

参考资料:

  1. http://blog.chinaunix.net/uid-25266990-id-3989321.html
  2. http://www.cnblogs.com/dkblog/archive/2011/07/06/2098949.html
  3. http://blog.chinaunix.net/uid-25267728-id-3874670.html