Keepalived 資源監控



簡介:

作為一個高可用集群軟件,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 的原則來定義

## 這兩種方法,個人感覺基本一個意思,簡單點的檢測就用語句,復雜點的就寫腳本里


免責聲明!

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



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