前言
keepalived默认只会监控本身的服务,也就是说只有当keepalived服务停止后,才会进行VIP漂移,如果是整台服务器宕机那么所有服务都会停掉,包括keepalived,可如果当我们需要监控的服务比如haproxy服务停止时,此时keepalived仍然在提供服务那么就不会进行VIP漂移,这无疑是不合适的。
这就需要我们自定义脚本进行监控haproxy的服务了。
自定义脚本监控
编写脚本
vi /usr/monitor_docker_haproxy.sh
脚本内容
该脚本用于检测docker 中 haproxy容器是否运行,如果没有运行则尝试启动haproxy容器,如果启动失败则结束掉keepalived,然后VIP自动漂移
#!/bin/bash
#监控容器的运行状态
containerName=haproxy
# 查看进程是否存在
haproxyrun=`docker inspect --format '{{.State.Running}}' ${containerName}`
if [ "${haproxyrun}" == "false" ]; then
docker start ${containerName}
sleep 1
if [ "${haproxyrun}" == "false" ]; then
/bin/systemctl stop keepalived.service
fi
fi
脚本增加运行权限
chmod +x /usr/monitor_docker_haproxy.sh
关闭selinux防火墙
setenforce 0
keepalived配置文件
#VRRP 脚本声明
vrrp_script check_haproxy {
#周期性执行的脚本
script "/usr/monitor_docker_haproxy.sh"
#运行脚本的间隔时间,秒
interval 2
}
vrrp_instance VI_1 {
state MASTER
#这里是宿主机的网卡,可以通过ip a查看当前自己电脑上用的网卡名是哪个
interface ens33
virtual_router_id 100
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 123456
}
virtual_ipaddress {
#这里是指定的一个宿主机上的虚拟ip,一定要和宿主机网卡在同一个网段
192.168.130.140
}
#脚本监控状态
track_script {
check_haproxy
}
}
脚本测试
此时所有服务均正常,服务器抢占了VIP
我们手动停掉docker haproxy容器
docker stop haproxy
此时监控脚本检测到了haproxy容器停止,尝试启动,然后成功启动,所有我们看到了貌似是关闭失败的情况。
此时我们停止docker
service docker stop
此时尝试启动失败,VIP漂移