keepalived監控Nginx的狀態

若是主服務器的keepalived中止服務,從服務器會自動接管VIP對外服務;一旦主服務器的keepalived恢復,會從新接管VIP。 但這並非咱們須要的,咱們須要的是當Nginx中止服務的時候可以自動切換。nginx

keepalived支持配置監控腳本,咱們能夠經過腳本監控Nginx的狀態,若是狀態不正常則進行一系列的操做,最終仍不能恢復Nginx則殺掉keepalived,使得從服務器可以接管服務。服務器

如何監控NginX的狀態tcp

最簡單的作法是監控Nginx進程,更靠譜的作法是檢查Nginx端口,最靠譜的作法是檢查多個url可否獲取到頁面。url

如未嘗試恢復服務code

若是發現Nginx不正常,重啓之。等待3秒再次校驗,仍然失敗則再也不嘗試。server

根據上述策略很容易寫出監控腳本。這裏使用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中增長以下配置:ip

vrrp_script chk_http_port {
    script "/opt/chk_nginx.sh"
    interval 2
    weight 2
}

track_script {
    chk_http_port
}