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"