Keepalived配置Nginx自动重启

当主节点 Nginx 服务挂掉之后,Keepalived 还会继续挂在主节点上运行,这时请求网站时,网站是不能访问的,这时需要将 Nginx 重新启动,否则网站是不能访问的,如果 Nginx 不能再次启动,这时就需要将 Keepalived 主节点切换成备用节点。这时就需要写一个脚本,来实现这个功能。

Keepalived自动重启Nginx服务

将自动重启 Nginx 服务的脚本写在 Keepalived 主配置文件同级目录下(/etc/keepalived)

检测 Nginx 服务是否存活脚本如下:

file_name 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

然后到 Keepalived 主配置文件内添加一个脚本的监听。

在主配置文件中定一个脚本:vrrp_script,然后在 VI_1 节点配置调用。 配置完成后重启Keepalived:systemctl restart keepalived

! 全局配置
global_defs {
   ! 配置切换通知的email
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   ! 配置发件人
   notification_email_from Alexandre.Cassen@firewall.loc
   ! 配置邮箱服务器地址
   smtp_server 192.168.200.1
   ! 配置链接邮箱服务器的超时时间
   smtp_connect_timeout 30
   ! 路由ID:当前安装Keepalived节点主机的标识符,全局唯一
   router_id LVS_DEVEL
   ! 全局vrrp协议配置
   vrrp_skip_check_adv_addr
   vrrp_strict
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

! 添加自动启动Nginx监听
vrrp_script check_nginx_alive {
    script "/etc/keepalived/check_nginx_alive_or_not.sh"
    ! 每隔两秒运行上一行脚本
    interval 2
    ! 如果脚本运行成功,则升级权重+10
    weight 10
    ! 如果脚本运行失败,则降级权重-10
    # weight -10
}

! 计算机节点,基于vrrp协议的一个实例
vrrp_instance VI_1 {
    ! 表示状态,当前服务器的nginx的主节点,MASTER/BACKUP
    state MASTER
    ! 当前实例绑定的网卡
    interface eth0
    ! 保证主备节点一致即可
    virtual_router_id 51
    ! 权重,master权重一般高于backup,如果有多个,那就是选举,谁的权重高,谁就当选
    priority 100
    ! 主备之间同步检查时间间隔,单位秒
    advert_int 2
    ! 认证权限密码。防止非法节点进入
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    
    track_script {
        check_nginx_alive # 追踪 nginx 脚本
    }
    
    ! 虚拟出来的ip,可以有多个(vip)
    virtual_ipaddress {
        192.168.200.16
        192.168.200.17
        192.168.200.18
    }
}