最近搭建了nginx+keepalived实现高可用负载均衡。

在测试的时候,主服务器的nginx停止服务。keepalived还在运行 ,

在客户端进行访问的时候,发现不能切换到从服务器上。从服务器没有接管主服务器的工作。

在网上找了下愿意,是因为keepalived服务停止的时候。从服务器才会接管工作。

所以就找了个脚本来监控nginx的状态,从而达到keepalived的自动切换。

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