Keepalived和Haproxy的高可用配置

默认情况下Keepalived软件仅仅在对方机器宕机或keepalived停掉的时候才会接管业务。但在实际工作中,有业务服务停止而keepalived服务还在工作的情况,这就会导致用户访问的VIP无法找到对应的服务,那么,如何解决业务服务宕机可以将IP漂移到备节点使之接管理提供服务呢?
当然有的,使用keepalived的配置文件参数触发写好的监测服务脚本就可以。下面以两台HAPROXY为例讲解,两台HAPROXY的机子IP分别为:192.168.88.201(外)、192.168.64.201(内)和192.168.88.217(外)、192.168.64.217(内)。其中IP为201的机子为主均衡器,VIP(192.168.88.188)在这台机子上。

第一步:在主均衡器上编写监测服务脚本
vim /etc/haproxy/check-haproxy.sh
#!/bin/bash
if [ `netstat -natlp |grep haproxy |wc -l` -ne 2 ];then #当取得的值不等2时,则停掉keepalived服务,不等2时,意思着haproxy服务已停掉
/etc/init.d/keepalived stop
fi

第二步:在主均衡器上的keepalived配置文件中加入如下内容:
vrrp_script check-haproxy { #定义vrrp脚本,检测haproxy服务
script "/etc/haproxy/check-haproxy.sh" #执行脚本,当haproxy服务有问题是地,就停用keepalived
interval 2
weight 2
}
------
track_script { #触发检查
check-haproxy
}

-----------------------------------------------------------------------

主均衡上完整的keepalived配置如下

global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id 201
}

vrrp_script check-haproxy {
script "/etc/haproxy/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 1111
}
virtual_ipaddress {
192.168.88.188
}
track_script {
check-haproxy
}

}

第三步:检测

正常时的情况

lvs20

lvs21

主上停掉haproxy服务后
/etc/init.d/haproxy stop
lvs23


lvs24

可以明显看到,当主的haproxy服务停止后,keepalived服务也马上停止了,VIP192.168.88.188漂移到备用主机上了。