通過前面學習keepalived的工作原理,我們知道keepalived實際上是通過傳送vrrp廣播包來檢測keepalived程序是否正常,來判斷nginx伺服器是否掛了,從而進行nginx主備切換,因此nginx主備的說法其實不完全正確。也就是說nginx伺服器高可用其實是keepalived來實現的,keepalived主機和keeaplived備機才是真正的主備關係。
因為keepalived有乙個虛擬vip機制,通過vip可以繫結keepalived主機和keepalived備機的真實ip,也就是實現乙個ip繫結多個機器。正是因為vip繫結了主機和備機,當主機掛了時,還有備機還可以用。
按照正常情況來說,主機掛了(nginx和keepalived都掛了),備機會立馬接管主機的**工作,肯定會發生「ip漂移」的。當主機中的keepalived掛了,nginx沒掛,備機依然會接管主機的**工作,發生「ip漂移」。
但其實這會引發乙個問題,設想這麼一種情況:主機中的keepalived正常執行一直在傳送vrrp多播包,但主機中的nginx卻掛了,而備機上執行的keepalived收到主機發來的vrrp包檢測到主機中的keepalived沒掛,誤認為主機還在正常執行,因此就不會接管主機的**工作,也就不會發生「ip漂移」了,從而導致使用者的請求不能被正常**。
也就是說,如果主機中的keepalived沒掛,nginx卻掛了,就會出現nginx和keepalived不同步的問題,跟主機斷電宕機一樣,雖然這種情況很少見,但一旦出現將是非常嚴重的宕機事故。如下圖所示:
對於這種情況,應該在主機上編寫nginx程序檢測程式(check_nginx.sh),判斷主機的nginx程序是否存在,如果主機的nginx程序掛了,那麼程序檢測程式應該把keepalived程序kill掉。
在主nginx上需要編寫nginx程序檢測指令碼(check_nginx.sh),判斷nginx程序是否存在,如果nginx不存在就將keepalived程序kill掉,在主機的keepalived的配置檔案下建立乙個程序檢測程式:check_nginx.sh,內容如下:
#!/bin/bash
# 如果程序中沒有nginx則將keepalived程序kill掉
a=`ps -c nginx --no-header |wc -l` ## 檢視是否有 nginx程序 把值賦給變數a
if [ $a
-eq0 ];then
## 如果沒有程序值得為 零
service keepalived stop ## 則結束 keepalived 程序
fi
將主機的nginx停止,將keepalived啟動
然後執行check_nginx.sh指令碼
從執行可以看出check_nginx.sh指令碼自動將keepalived程序kill掉了。
進入nginx主伺服器的/etc/keepalived目錄中,修改keepalived配置檔案
新增下面的配置到主機nginx的keepalived.conf配置檔案當中:
#全域性配置
global_defs
notification_email_from [email protected] #指定發件人
#smtp_server ***.smtp.com #指定smtp伺服器位址
#smtp_connect_timeout 30 #指定smtp連線超時時間
router_id lvs_devel #執行keepalived機器的乙個標識
}vrrp_script check_nginx
vrrp_instance vi_1
track_script
virtual_ipaddress
}
修改後重啟keepalived
注意:一定要先啟動nginx,然後再啟動keepalived,要不然先啟動keepalived,指令碼又會立馬把keepalived乾掉。
通過tail -f /var/log/messages命令檢視keepalived日誌,開啟另乙個bash終端視窗執行./nginx -s stop命令。
通過日誌發現keepalived程序已經不存在,eth4已經沒有繫結vip。
keepalived 不搶占模式
ha 的實際執行過程中,當主機發生異常,且後期恢復正常後,存在搶占或非搶占兩種情況。結合實際需求,可能有很多使用者需要非搶占的ha工作模式。keepalived能夠很好的支援這一需求。下面直接展示keepalived的非搶占配置。主機配置如下 vrrp instance vi 1 virtual i...
Keepalived設定不搶占資源
keepalived做ha時,經常會遇到搶占式的master和backup之間的切換 example 通常如果master服務死掉後backup會變成master,但是當master服務又好了的時候 master此時會搶占vip,這樣就會發生兩次切換對業務繁忙的 來說是不好的。所以我們要在配置檔案加...
Keepalived虛擬ip不漂移問題
keepalived主要是通過虛擬路由冗餘來實現高可用功能。本文將不對keepalived的基本原理進行闡述,可參考文章keepalived詳細介紹簡介 keepalived vip漂移基本原理及選舉演算法。本文記錄了在實踐過程中使用keepalived時,在weight值變化的情況下vip不漂移的...