讓keepalived監控NginX的狀態


經過前面的配置,如果主服務器的keepalived停止服務,從服務器會自動接管VIP對外服務;一旦主服務器的keepalived恢復,會重新接管VIP。 但這並不是我們需要的,我們需要的是當NginX停止服務的時候能夠自動切換。

keepalived支持配置監控腳本,我們可以通過腳本監控NginX的狀態,如果狀態不正常則進行一系列的操作,最終仍不能恢復NginX則殺掉keepalived,使得從服務器能夠接管服務。

如何監控NginX的狀態

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

如何嘗試恢復服務

如果發現NginX不正常,重啟之。等待3秒再次校驗,仍然失敗則不再嘗試。

根據上述策略很容易寫出監控腳本。這里使用nmap檢查nginx端口來判斷nginx的狀態,記得要首先安裝nmap。監控腳本如下:

#!/bin/bash

# check nginx server status

NGINX=/usr/local/nginx/sbin/nginx

PORT=8080

 

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中增加如下配置:

主keepalived

vrrp_script chk_http_port {

    script "/opt/chk_nginx.sh"

    interval 1

    weight -2

}

 

track_script {

    chk_http_port

}

 

 

例子:

! Configuration File for keepalived

 

global_defs {

   router_id NGINX_UPSTEAM

}

 

vrrp_script chk_http_port {

    script "/opt/chk_nginx.sh"

    interval 1

    weight -2

}

 

vrrp_instance VI_1 {

    state MASTER

    interface eth0

    virtual_router_id 51

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.1.100

    }

 

    track_script {

    chk_http_port

    }

 

}

 

更進一步,為了避免啟動keepalived之前沒有啟動nginx , 可以在/etc/init.d/keepalivedstart中首先啟動nginx:

 

start() {

    /usr/local/nginx/sbin/nginx

    sleep 3

    echo -n $"Starting $prog: "

    daemon keepalived ${KEEPALIVED_OPTIONS}

    RETVAL=$?

    echo

    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM