手记

Keepalived脚本实现Nginx自动重启

在上篇博文中,我们通过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会自动重启


0人推荐
随时随地看视频
慕课网APP