在上篇博文中,我们通过Keepalived实现了当服务器宕机后,Nginx自动切换,但是有一个问题,如果服务器没有宕机,只是Master节点的Nginx停止运行,但Master节点上的Keepalived还在正常运行,此时Keepalived的虚拟IP是无法跟Backup节点绑定的,导致无法访问到Backup节点上的Nginx,下面我们介绍一下,如何通过脚本实现当Master节点的Nginx停止运行,自动重启Master节点的Nginx,如果重启不了,就停掉Master节点上的keepalived,从而让虚拟IP跟Backup节点进行绑定。
编写脚本
vim /etc/keepalived/check_nginx_alive.sh
#!/bin/bash # 获取nginx进程号 A=`ps -C nginx --no-header |wc -l` # 判断nginx是否宕机,如果宕机了,尝试重启 if [ $A -eq 0 ];then # 尝试启动nginx /usr/local/nginx/sbin/nginx # 等待三秒钟,再次检查nginx是否运行,如果没有启动成功,则停止keepalived,使其启动备用机 sleep 3 if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then # 杀死keepalived进程,当该节点的keepalived没有运行,keepalived会认为该节点宕机,虚拟IP会跟其他节点进行绑定 killall keepalived fi fi
为脚本添加可执行权限
chmod +x /etc/keepalived/check_nginx_alive.sh
配置keepalived监听nginx
vrrp_script check_nginx_alive { script "/etc/keepalived/check_nginx_alive.sh" interval 2 # 每隔两秒运行上一行脚本 weight 10 # 如果脚本运行成功,则升级权重+10 # weight -10 # 如果脚本运行失败,则升级权重-10 }
在vrr_instance中添加新增监控脚本
track_script { check_nginx_alive # 追踪 nginx 脚本 }
完整的keepalived配置
重启keepalived
systemctl restart keepalived
停止Master节点的Nginx,会发现Nginx会自动重启
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦