如我写的监控httpd的脚本:
#!/bin/bash
#Web_keepalived_check
Counter=$(pgrep -l httpd | wc -l)
if [ "${Counter}" = 0 ]
then
systemctl restart httpd
sleep 2
if [ "${Counter}" = 0 ]
then
systemctl stop keepalived
fi
fi
没找到httpd进程就重启httpd,如果两秒后还是没有这个进程,那么就关掉keepalived,让从服务器当主
这里vrrp_script监控脚本一直不生效,急得要死,后来发现如果监控脚本中有sleep选项,sellp的值要小于主配置文件中的interval值,如:
! Configuration File for keepalived
global_defs {
router_id 1
}
vrrp_script httpd_ck
{
script "/etc/keepalived/web_ck.sh"
interval 4 #这里的值一定要大于脚本中的sleep值
weight -5
fall 3
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.10.100
}
track_script {
httpd_ck
}
}
还有必须要注意的!!,监控脚本名称应避免与服务名相同,推荐用服务名的首字母代替,如check_h,不要给脚本起名check_httpd
而且一定要注意脚本要有执行权啊