vvrp_scripts介绍
keepalived原生支持lvs的高可用,通过对lvs服务的监测结果的分析,实现vip的漂移与否,检测结果正常则vip保持,检测结果异常则进行vip的漂移,从而保持vip的高可用;
针对非lvs服务,如haproxy,nginx,也可以通过vvrp_scripts结合自定义检测脚本实现haproxy或nginx服务的持续监测,并根据监测结果,选择重启服务尝试、优先级调整、或vip漂移等操作;
执行逻辑
- 先自定义服务的监测脚本,如
killall -0 haproxy
探测haproxy服务的正常运行与否; - 在vvrp_script 配置段引用,上步定义的脚本,(也可以将监测命令写在这里,命令较短时)
- 在在track_script 配置段,引用vvrp_script的命令,进而引用了探测脚本
- 根据探测脚本的返回值,0或非0,可以做如下操作:
- 尝试重启服务,(可以定义在监测脚本中)
- vip漂移,(尝试重启服务一定次数,仍失败,可以停止keepalived,让vip漂移)
- 优先级调整,(在vvrp_script中定义,可以减少优先级,进而达到vip漂移)
配置
1、自定义监控脚本
2、定义vvrp_script,其中引用自定义监控脚本
3、在需要监控的vvrp_instance中,引用定义的vvrp_script即可;
# 定义vvrp_script,其中引用自定义监控脚本
# 此处,没有单独定义脚本,再引用,而是将脚本直接放在其中,监测脚本为一条命令,判断haproxy进程是否存在且正常
vvrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight -30
rise 2
fall 2
# 每2s用定义的脚本探测一下,连续失败2次为失败,失败时,权重减少30,状态转为backup;
}
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.80.200/24 dev eth0 label eth0:1
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
track_script {
chk_haproxy
}
# 在vvrp实例中引用,vvrp_script,
}
脚本方式,当haproxy进程异常时,尝试重启,2次重启失败,就停止keepalived,使得vip进行漂移;
[root@host2 ~]# cat /etc/keepalived/haproxy.sh
#!/bin/bash
if ! killall -0 haproxy &>/dev/null;then
serivce haproxy restart
sleep 1
if ! killall -0 haproxy &>/dev/null;then
service keepalived stop
fi
fi
vvrp_script chk_haproxy {
script "/etc/keepalived/haproxy.sh"
interval 2
weight -30
}