青蛙學Linux—Keepalived中經過vrrp_script實現對資源的監控

在Keepalived的配置文件中,咱們能夠指定Keepalived監控的網絡接口,當系統或網絡出現問題時就會進行主備切換。可是,不少時候咱們須要對集羣中特定的服務進行監控,但服務發生故障時就進行主備切換,此時只監控網絡接口就沒法知足咱們的需求。Keepalived提供了vrrp_script調用自定義腳本的方式知足了咱們的需求。html

一、vrrp_script

在Keepalived中,能夠經過vrrp_script調用shell命令或一個腳本,經過該命令或腳本的返回值來判斷監控的資源是否出問題。當返回值爲0時,Keepalived認爲被監控的資源正常;當返回值爲非0時,Keepalived認爲被監控的資源出現了問題。shell

配置vrrp_script:網絡

vrrp_script 自定義名稱 {
    script "命令或腳本"
    interval 數字
    fall 數字
    rise 數字
}
vrrp_instance VRRP實例名 {
    ...
    track_script {
        vrrp_script的自定義名稱
    }
}
  • script:調用shell命令或腳本
  • interval:定義執行命令或腳本的時間間隔,單位秒
  • fall:定義檢測失敗的最大次數,如設置爲2表示當請求失敗兩次時就認爲節點資源故障
  • rise:定義請求成功的次數,如設置爲1表示當進行一次請求成功後就認爲節點資源恢復正常
  • vrrp_instance中的track_script:調用vrrp_script使之生效

vrrp_script執行命令或腳本時默認使用的用戶爲keepalived_script,若是系統中不存在該用戶,則使用root用戶執行腳本。socket

二、使用vrrp_script監控資源的幾種經常使用方式

2.一、經過killall命令檢測服務運行狀態

經過命令killall –0 進程名能夠檢測指定的進程是否正在運行。這裏使用了killall的0信號,當killall向一個進程發出0信號時,不會結束這個進程,而是返回0或非0的值。0表示進程正在運行,而非0表示進程不存在。因此,經過這種方式能夠很方便的檢測一個服務是否正在運行。tcp

e.g:監測Apache的httpd服務
vrrp_script check_httpd{
    script "killall -0 httpd"
    ...
}

2.二、檢測端口運行狀態

對於服務端口的監控也能夠達到檢測服務是否正常運行的目的。經過一個特殊的文件/dev/tcp就能夠對端口進行檢測,打開這個文件就至關於創建了一個socket鏈接。注意:/dev/tcp文件自己並不存在。code

e.g:檢測80端口是否打開
vrrp_script check_httpd {
    script "</dev/tcp/127.0.0.1/80"
    ...
}

2.三、使用shell語句進行監控

vrrp_script還支持直接引用shell語句進行狀態監控。htm

e.g:判斷Apache的PID文件是否存在以肯定Apache的服務是否正常
vrrp_script check_httpd {
    script "if [ -f /var/run/httpd/httpd.pid ]; then exit 0; else exit 1; fi"
    ...
}

2.四、經過腳本進行監控

vrrp_script能夠經過運行指定的腳原本對服務進行監控。在編寫腳本時,只須要控制腳本的返回值爲0或非0便可。blog

相關文章
相關標籤/搜索