http://blog.sina.com.cn/s/blog_5fc3a8b60100x0h9.html
一、我們一直以來用的heartbeat
大家用heartbeat做雙機熱備已經都做過很多次很熟悉了,而且配置起來其實也可以說是比較容易的.但是,說實話我們雙機配置起來以後能實現的功能其實比較簡單,只有在主服務器down掉或者主服務器的heartbeat服務停掉纔可以切換,如果要想監控某個進程只有靠腳本。
二、遇到的問題
heartbeat自帶的斷網切換的工具-ipfail
三、ipfail斷網切換的原理
關於ipfail這個斷網切換的原理很簡單,首先heartbeat要判斷自己的網絡是否正常其實就是通過ping某個ip,如果可以ping的通,說明網絡是通的,如果ping不通了,說明是網絡斷了,或者是主服務器的網卡壞了,然後執行切換的動作。
但是如果是被ping的那個ip的網卡出問題了怎麼辦呢,那豈不是也造成了誤切換?所幸heartbeat想到了這種情況,而提供了ping group的功能,就是讓heartbeat同時ping兩個或者兩個以上的ip,如果所有的都ping不通了,ipfail才認爲是主服務器的網絡斷了,或是網卡壞了。
然而在大多數的一般情況下我們ping一個ip也是可以的,因爲我們可以把這個ip設置成我們這個網絡中default gateway(默認網關)的ip,因爲如果是默認網關的網卡壞了,即便是誤切換也無所謂了,默認網關壞了那麼我們的服務是怎麼也不可能被訪問到了。
下邊我會對 ping 一個ip和ping group的功能及配置方法一一介紹。
四、ipfail的配置與使用
我們要使用ipfail這個斷網切換的功能,只要在ha.cf這個配置文件中配置即可:
1.配置文件中有很多英文的解釋以及示例被#號註釋,供參考,我們使用ipfail時只要去掉相應的#號即可,下面寫出ping一個ip的ipfail配置:
ping 172.16.103.254
respawn hacluster /usr/local/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
只有這3行,非常簡單,只要寫在ha.cf重啓動heartbeat服務就可以生效了,我來解釋一下這3行配置文件的意思:
ping 172.16.103.254
一般是ping網關,告訴ipfail網絡是否暢通。
respawn hacluster /usr/local/lib/heartbeat/ipfail
這句就是指定斷網切換的程序文件路徑,我們一定要給出正確的路徑,一般情況下,這個ipfail文件會在heartbeat安裝目錄下的lib/heartbeat/子文件夾下,確認好以後我們給出正確的路徑, 其中hacluster是一個uid,是以hacluster這個用戶身份運行ipfail。
apiauth ipfail gid=haclient uid=hacluster
是指定對ipfail有權限的用戶和組
2.ping一個group的ipfail配置:
ping_group group1 172.16.103.254 172.16.103.212
respawn hacluster /usr/local/lib/heartbeat/ipfail
apiauth ipfail gid=haclient uid=hacluster
ping_group group1 172.16.103.254 172.16.103.212
這個就是同時ping多個ip,只有所有的ip都無法ping通時,ipfail纔會執行切換的動作,保證了不會是因爲被ping的ip出了問題而產生誤切換。
後邊兩句前面說過了,不再解釋了。
最後需要注意的是不要把ping 和ping group 這兩行同時寫出來,寫ping的內容時,要保證ping group是註釋的,寫ping group時,要保證ping那行是註釋着的,否則會出問題的, 切換運行不正常。