1. 程式人生 > >Keepalived詳解(四)

Keepalived詳解(四)

mysql pan 節點 ios all -s 關閉 定義 interval

一.通過vrrp_script實現對集群資源的監控:

Keepalived基礎HA功能時用到了vrrp_script這個模塊,此模塊專門用於對集群中服務資源進行監控。與此模塊一起使用的還有track_script模塊,在此模塊中可以引入監控腳本、命令組合、shell語句等,以實現對服務、端口等多方面的監控。track_script模塊主要用來調用“vrrp_script”模塊使Keepalived執行對集群服務資源的檢測。

此外,在vrrp_script模塊中可以定義對服務資源檢測的時間間隔、權重等參數,通過vrrp_script和track_script組合,可以實現對集群資源的監控並改變集群優先級,進而實現Keepalived的主、備節點切換。

1.通過killall命令探測服務運行狀態:

這種監控集群服務的方式主要是通過killall命令實現的。killall會發送一個信號到正在運行的指定命令的進程。如果沒指定信號名,則發送SIGTERM。SIGTERM也是信號名的一種,代號為15,它表示以正常的方式結束程序的運行。其實killall可用的信號名有很多,可通過“killall -l ”命令顯示所有信號名列表,其中每個信號名代表對進程的不同執行方式,例如,代號為9的信號表示將強制中斷一個程序的運行。這裏要用到的信號為0,代號為0的信號並不表示要關閉某個程序,而表示對程序(進程)的運行狀態進行監控,如果發現進程關閉或其他異常,將返回狀態碼1,反之,如果發現進程運行正常,將返回狀態碼0.vrrp_script模塊正是利用了killall命令的這個特性,變相實現了對服務運行狀態的監控。


例:

vrrp_script check_mysqld {

script "killall -0 mysqld"

interval 2

}

track_script {

check_mysqld

}

這個例子定義了一個服務監控模塊check_mysqld,其采用的監控的方式是通過“killall -0 mysqld”的方式,其中“interval”選項檢查的時間間隔,即2s執行一次檢測。

在MySQL服務運行正常情況下,通過killall命令檢測結果如下:

[root@keepalived-master ~]# killall -0 mysqld

[root@keepalived-master ~]# echo $?

0

這裏通過“echo $?”方式顯示了上個命令的返回狀態碼,MySQL服務運行正常,因此返回的狀態碼為0,此時check_mysqld模塊將返回服務檢測正常的提示。接著將MySQL服務關閉,再次執行檢測,結果如下:

[root@keepalived-master ~]# killall -0 mysqld

mysqld: 沒有進程被殺死

[root@keepalived-master ~]# echo $?

1

由於MySQL服務被關閉,因此返回的狀態碼為1,此時check_mysqld模塊將返回服務檢測失敗的提示。然後根據vrrp_script模塊中設定的“weight”值重新設置Keepalived 主、備節點的優先級,進而引發主、備節點發生切換。

從這個過程可以看到,vrrp_script模塊其實並不關註監控腳本或監控命令是如何實現的,它僅僅通過監控腳本的返回狀態碼來識別集群服務是否正常,如果返回狀態碼為0,那麽就認為服務正常,如果返回狀態碼為1,則認為服務故障。明白了這個原理之後,在進行自定義監控腳本的時候,只需按照這個原則來編寫即可。

2.檢測端口運行狀態:

檢測端口的運行狀態也是最常見的服務監控方式,在keepalived的vrrp_script模塊中可以通過如下方式對本機的端口進行檢測:

vrrp_script check_httpd {

script "</dev/tcp/127.0.0.1/80"

interval 2

fall 2

rise 1

}


track_script {

check_httpd

}

在這個例子中,通過 "</dev/tcp/127.0.0.1/80"這樣的方式定義了一個對本機80端口的狀態檢測,其中,“fail”選項表示檢測到失敗的最大次數,也就是說,如果請求失敗兩次,就認為此節點資源發生故障,將進行切換操作;“rise”表示如果請求一次成功,就認為此節點資源恢復正常。

3.通過shell語句進行狀態監控:

在Keepalived的vrrp_script模塊中甚至可以直接引用shell語句進行狀態監控,例如:

vrrp_script chk_httpd {

script "if [ -f /var/run/httpd/httpd.pid ]; then exit 0;else exit 1; fi"

interval 2

fall 1

rise 1

}

track_script {

chk_httpd

}

在這個例子中,通過一個shell判斷語句,檢測httpd.pid文件是否存在,如果存在,就認為狀態正常,否則認為狀態異常,這種監測方式對於一些簡單的應用監控或者流程監控非常有用。從這裏也可以得知,vrrp_script模塊支持的監控方式十分靈活。

4. 通過腳本進行服務狀態監控:

這是最常見的監控方式,其監控過程類似於nagios的執行方式,不同的是,這裏只有0、1兩種返回狀態,例如:

vrrp_script chk_mysqld {

script "/etc/keepalived/check_mysqld.sh"

interval 2

}

track_script {

chk_mysqld

}

其中,check_mysqld.sh的內容為:

#!/bin/bash

/usr/bin/mysql -e "show status;" > /dev/null 2>&1

if [ $? -eq 0 ];then

MYSQL_STATUS=0

else

MYSQL_STATUS=1

fi

exit $MYSQL_STATUS

這是一個最簡單的實現MySQL服務狀態檢測的shell腳本,它通過登錄MySQL數據庫後執行查詢操作來檢測MySQL運行是否正常,如果檢測正常,將返回狀態碼0,否則返回狀態碼1。其實,很多在nagios下運行的腳本,只要稍作修改,既可在這裏使用,非常方便。






Keepalived詳解(四)