keepalived之vrrp_script總結

一般狀況下,利用keepalived作熱備,其中一臺設置爲master,一臺設置爲backup。當master出現異常後,backup自動切換爲master。當backup成爲master後,master恢復正常後會再次搶佔成爲master,致使沒必要要的主備切換。所以能夠將兩臺keepalived初始狀態均配置爲backup,設置不一樣的優先級,優先級高的設置nopreempt解決異常恢復後再次搶佔的問題。 bash

然而keepalived只能作到對網絡故障和keepalived自己的監控,即當出現網絡故障或者keepalived自己出現問題時,進行切換。可是這些還不夠,咱們還須要監控keepalived所在服務器上的其餘業務進程,根據業務進程的運行狀態決定是否須要進行主備切換。這個時候,咱們能夠經過編寫腳本對業務進程進行檢測監控。 服務器

例如編寫個簡單腳本查看haproxy進程是否存活 網絡

#!/bin/bashide

count = `ps aux | grep -v grep | grep haproxy | wc -l`code

if [ $count > 0 ]; then進程

exit 0ip

elseit

exit 1io

fiast

在keepalived的配置文件中增長相應配置項

vrrp_script checkhaproxy

{

script "/home/check.sh"

interval 3

weight -20

}

vrrp_instance test

{

...

track_script

{

checkhaproxy

}

...

}

keepalived會定時執行腳本並對腳本執行的結果進行分析,動態調整vrrp_instance的優先級。

若是腳本執行結果爲0,而且weight配置的值大於0,則優先級相應的增長

若是腳本執行結果非0,而且weight配置的值小於0,則優先級相應的減小

其餘狀況,維持本來配置的優先級,即配置文件中priority對應的值。

這裏須要注意的是:

1) 優先級不會不斷的提升或者下降

2) 能夠編寫多個檢測腳本併爲每一個檢測腳本設置不一樣的weight

3) 無論提升優先級仍是下降優先級,最終優先級的範圍是在[1,254],不會出現優先級小於等於0或者優先級大於等於255的狀況

這樣能夠作到利用腳本檢測業務進程的狀態,並動態調整優先級從而實現主備切換。

可是利用該方式會存在一個問題,例如:A,B兩臺keepalived

A的配置大概爲:

vrrp_script checkhaproxy

{

script "/etc/check.sh"

interval 3

weight -20

}

vrrp_instance test

{

....

state backup

priority 80

nopreempt

track_script

{

checkhaproxy

}

....

}

B的配置大概爲:

vrrp_script checkhaproxy

{

script "/etc/check.sh"

interval 3

weight -20

}

vrrp_instance test

{

....

state backup

priority 70

track_script

{

checkhaproxy

}

....

}

A,B同時啓動後,因爲A的優先級較高,所以經過選舉會成爲master。當A上的業務進程出現問題時,優先級會下降到60。此時B收到優先級比本身低的vrrp廣播包時,將切換爲master狀態。那麼當B上的業務出現問題時,優先級下降到50,儘管A的優先級比B的要高,可是因爲設置了nopreempt,A不會再搶佔成爲master狀態。

因此,能夠在檢測腳本中增長殺掉keepalived進程(或者停用keepalived服務)的方式,作到業務進程出現問題時完成主備切換。

相關文章
相關標籤/搜索