簡介:
作為一個高可用集群軟件,Keepalived 沒有 Heartbeat 、RHCS 等專業的高可用集群軟件功能強大,它不能夠實現集群資源的托管,也不能實現對集群中運行服務的監控,好在 Keepalived 也考慮到了這一點,它提供了 vrrp_script 、notify_master 、notify_backup 等多個功能模塊,通過這些模塊也可以實現對集群資源的托管以及集群服務的監控。
## 下面是一個 Keepalived 主備切換的演示過程
shell > curl 192.168.1.35 welcome to Master Nginx
## 客戶機訪問虛擬 IP 192.168.1.35 ,這時由主服務器提供服務
## 當主服務器宕機或網絡出現異常或 Keepalived 本身停止時,主備切換
shell > curl 192.168.1.35 welcome to Slave Nginx
## 當手動停止 Keepalived 服務時,由備機來提供服務,這並沒有什么問題
## 第二種測試
shell > curl 192.168.1.35 welcome to Master Nginx
## 現在由主服務器提供服務,當主服務上提供服務的 web 停止時,是否會出現主備切換呢 ?
shell > curl 192.168.1.35 curl: (7) couldn't connect to host
## 很顯然,並沒有主備切換。
## 主服務器沒有移除 VIP ,備服務器也沒有綁定 VIP 。
## 這是因為他們之間通過 VRRP 協議來確定對方是否存活,而 web 停止並不妨礙他們之間的通信。
## 所以備機就認為主服務器處於存活狀態,從而導致無法正常提供服務。
## 這時就要由 vrrp_script 出馬了 !
vrrp_script
此模塊專門用於對集群中服務資源進行監控 。與此模塊同時使用的還有 track_script 模塊,在此模塊中可以引入監控腳本、命令組合、shell 語句等 ,以實現對服務、端口等多方面的監控。track_script 模塊主要用來調用 vrrp_script 模塊使 keepalived執行對集群服務資源的檢測。vrrp_script 模塊中還可以定義對服務資源檢測的時間間隔、權重等參數,通過 vrrp_script 和 track_script 組合,可以實現對集群資源的監控並改變優先級,進而實現 keepalived 主備節點切換。
## 下面是 vrrp_script 模塊常見的幾種監控機制
1、killall 命令探測服務運行狀態
vrrp_script check_nginx { # check_nginx 為自定義的一個監控名稱 script "killall -0 nginx" # 采用 killall 信號 0 來對進程運行狀態進行監控,0 為正常,1 為異常 interval 2 # 檢測間隔時間,即兩秒檢測一次 weight 30 # 一個正整數或負整數。權重值,關系到整個集群角色選舉,尤為重要( 單獨出帖 ) } track_script { check_nginx # 引用上面定義的監控模塊 }
2、檢測端口運行狀態
vrrp_script check_nginx { script "< /dev/tcp/127.0.0.1:80" # 通過 < /dev/tcp/127.0.0.1:80 這樣的方式定義一個對本機端口狀態的檢測 interval 2 fall 2 # 檢測失敗的最大次數,超過兩次認為節點資源發生故障 rise 1 # 請求一次成功認為節點恢復正常 weight 30 } track_script { check_nginx }
3、通過 shell 語句進行狀態監控
vrrp_script check_nginx { script " if [ -f /usr/local/nginx/logs/nginx.pid ]; then exit 0 ; else exit 1; fi" interval 2 fall 1 rise 1 weight 30 } track_script { check_nginx }
4、通過腳本進行服務狀態監控
vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" interval 2 weight 30 } track_script { check_nginx }
## 其中 check.nginx.sh 也是本着正常返回 0 ,異常返回 1 的原則來定義
## 這兩種方法,個人感覺基本一個意思,簡單點的檢測就用語句,復雜點的就寫腳本里