若是主服務器的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 }