Keepalived配置负载均衡服务其中一台的Nginx的进程停止,导致没有办法提供服务问题

物理服务器如果宕机,keepalived配置的BACKUP那台可以直接接管,但是如果只是MASTER那台的nginx服务意外停止服务,但是vip并没有漂移到BACKUP服务器,请求还是走MASTER,导致没有办法提供服务。处理办法,可以通过脚本+keepalived监测来操作。
配置如下脚本

[root@lb01 scripts]# cat chk_nginx_proxy.sh 
#!/bin/bash
#如果nginx服务停止,则关闭keep.
if [ `netstat -lntup|grep nginx|wc -l` -ne 1 ];then
    systemctl stop keepalived
fi
[root@lb01 scripts]# chmod +x chk_nginx_proxy.sh 
[root@lb01 scripts]# /server/scripts/chk_nginx_proxy.sh #脚本要可以执行
#测试:
[root@lb01 scripts]# pkill nginx
[root@lb01 scripts]# sh chk_nginx_proxy.sh 
[root@lb01 scripts]# ps -ef|egrep "nginx|keep"
#lb01配置
[root@lb01 scripts]# cat /etc/keepalived/keepalived.conf 
global_defs {
   router_id lb01
}
vrrp_script chk_nginx_proxy {    #<==定义vrrp脚本,检测HTTP端口。
    script "/server/scripts/chk_nginx_proxy.sh"    #<==执行脚本,当nginx服务有问题,就停掉keepalived服务。
    interval 2    #<==间隔2秒。
    weight 2
}
vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 53
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      10.0.0.3/24 dev eth0 label eth0:3
    }
    
    track_script {
    chk_nginx_proxy    #<==触发检查。
    }
}
vrrp_instance VI_2 {
    state MASTER
    interface eth0
    virtual_router_id 52
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      10.0.0.4/24 dev eth0 label eth0:4
    }
}
#lb02配置
[root@lb02 scripts]# cat /etc/keepalived/keepalived.conf
global_defs {
   router_id lb02
}
vrrp_script chk_nginx_proxy {    #<==定义vrrp脚本,检测HTTP端口。
    script "/server/scripts/chk_nginx_proxy.sh"    #<==执行脚本,当nginx服务有问题,就停掉keepalived服务。
    interval 2    #<==间隔2秒。
    weight 2
}
vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 53
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      10.0.0.3/24 dev eth0 label eth0:3
    }
    
    track_script {
    chk_nginx_proxy    #<==触发检查。
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    virtual_router_id 52
    priority 50
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
      10.0.0.4/24 dev eth0 label eth0:4
    }
}
#测试:
[root@lb01 scripts]# pkill nginx
[root@lb01 scripts]# ps -ef|egrep "nginx|keep"