在两台Nginx服务器构建好Keepalived高可用之后,可以保证主节点宕机之后,启动备用节点,但是如果主节点没有宕机,但是主节点上的Nginx却停止工作了,那么这时候既不会启动备用节点,主节点上的Nginx又不能工作,这样还是会出现单节点的问题,所以需要在Keepalived中配置Nginx重启脚本,只要服务器没有宕机但是Nginx又不能工作的时候会重启Nginx(如果是其他的服务也是同样的道理)。
1、增加Nginx重启检测脚本
vim /etc/keepalived/check_nginx_alive_or_not.sh
内容如下:
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
# 判断nginx是否宕机,如果宕机了,尝试重启
if [ $A -eq 0 ];then
/usr/local/nginx/sbin/nginx
# 等待一小会再次检查nginx,如果没有启动成功,则停止keepalived,使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
killall keepalived
fi
fi
- 增加运行权限
chmod +x /etc/keepalived/check_nginx_alive_or_not.sh
2、配置keepalived监听nginx脚本
在Keepalived的配置文件中添加配置:
vrrp_script check_nginx_alive {
script "/etc/keepalived/check_nginx_alive_or_not.sh"
interval 2 # 每隔两秒运行上一行脚本
weight 10 # 如果脚本运行成功,则升级Keepalived权重+10
# weight -10 # 如果脚本运行失败,则升级Keepalived权重-10
#作者理解这里的意思应该是如果脚本运行成功则证明此台机器Keepalived运行正常,可升级权重继续作为主用机
#运行失败则证明此台机器Keepalived运行异常,应降低权重,让其它机器成为主用机(如果有懂得请打在评论里)
}
3、在 vrrp_instance 中新增监控的脚本
track_script {
check_nginx_alive # 追踪 nginx 脚本
}
4、重启Keepalived使得配置文件生效
systemctl restart keepalived