如果主服务器的keepalived停止服务,从服务器会自动接管VIP对外服务;一旦主服务器的keepalived恢复,会重新接管VIP。 但这并不是我们需要的,我们需要的是当Nginx停止服务的时候能够自动切换。
keepalived支持配置监控脚本,我们可以通过脚本监控Nginx的状态,如果状态不正常则进行一系列的操作,最终仍不能恢复Nginx则杀掉keepalived,使得从服务器能够接管服务。
如何监控NginX的状态
最简单的做法是监控Nginx进程,更靠谱的做法是检查Nginx端口,最靠谱的做法是检查多个url能否获取到页面。
如何尝试恢复服务
如果发现Nginx不正常,重启之。等待3秒再次校验,仍然失败则不再尝试。
根据上述策略很容易写出监控脚本。这里使用nmap检查nginx端口来判断nginx的状态,记得要首先安装nmap。监控脚本如下:
#!/bin/sh
# check nginx server status
NGINX=/usr/local/nginx/sbin/nginx
PORT=80
nmap localhost -p $PORT | grep "$PORT/tcp open"
#echo $?
if [ $? -ne 0 ];then
$NGINX -s stop
$NGINX
sleep 3
nmap localhost -p $PORT | grep "$PORT/tcp open"
[ $? -ne 0 ] && /etc/init.d/keepalived stop
fi
假设上述脚本放在/opt/chk_nginx.sh,则keepalived.conf中增加如下配置:
vrrp_script chk_http_port {
script "/opt/chk_nginx.sh"
interval 2
weight 2
}
track_script {
chk_http_port
}