介紹
heartbeat為linux high availibility計畫所釋出的套件,目前stable版本為1.2.3。heartbeat包含了幾個元件,ipfail,Stonith,Ldirectord。
ipfail的功能直接包含在heartbeat裡面,是一個能夠在探知服務IP失效了便立即將服務IP抓取來用的功能。
Stonith是為了要在任何server停止時,確保剩下的server不會被正在運作的server所影響,可以選擇性強制停止一些server的解決方案。可能會使用在例如共用資料的情況之下。
Ldirector是一個負載平衡的服務器。
安裝
Platform : Fedora Core 3
Machine:
ha-1(192.168.0.101)
ha-2(192.168.0.102)
Virtual-IP:www(192.168.0.1)
假設你所想要提供服務的IP和主機名稱如上。
注意到這是在FC3上面的解決辦法,
redhat 9 或suse 9.1都有RPM可以裝。
安裝前
依照相依性順序:
glib-1.2.10-15
glib-devel-1.2.10-15
net-snmp-libs-5.1.2-11
net-snmp-5.1.2-11
net-snmp-devel-5.1.2-11
libnet-1.1.2.1-1.1.fc3
以上除了libnet以外其他都可以用apt取得
http://dag.wieers.com/packages/libnet/libnet-1.1.2.1-1.1.fc3.rf.i386.rpm
編譯並安裝
取得heartbeat
http://www.ultramonkey.org/download/heartbeat/
請取得stable的套件
1.3.0的ipfail在FC3上面還有些問題。
[bash]
# rpmbuild --rebuild heartbeat-1.3.0-1.fr.c.1.src.rpm
...
# rpm -ivh heartbeat-pils-1.2.3-2.fr.c.1.i386.rpm
# rpm -ivh heartbeat-stonith-1.2.3-2.fr.c.1.i386.rpm
# rpm -ivh heartbeat-1.2.3-2.fr.c.1.i386.rpm
[/bash]
雖然compile出來的rpm檔名會跟可以下載到的一樣,不過相依性不同,可以直接安裝。接下來rpm -ivh所有的rpm都裝起來。
安裝序列線及null-modem
請取得一條rs-232母對母的線
以及一個null-modem
將兩台電腦連接上,在各自的console進行測試
[bash]
ha-1> cat
ha-2> echo test > /dev/ttyS0
ha-1> cat
test
[/bash]
如果可以的話,將線的兩端對調再試一遍。
啟動watchdog
watchdog是一個在系統完全停住時,讓kernel強制重開系統的服務。
[bash]
modprobe softdog
[/bash]
編輯/etc/modules.conf
加入
alias watchdog softdog
設定
主要設定檔都放在/etc/ha.d/
請先瀏覽README.config
範例檔都放在/usr/share/doc/heartbeat-1.2.3
請將ha.cf, haresources, authkeys複製到/etc/ha.d/
ha.cf
只列出必要的設定
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
兩秒偵測一遍應該是足夠了,如果你的網管會將特定速度的ping視做是病毒,你可能會需要調整時間。
deadtime 30
視你的服務需要,一般來說heartbeat從探知對方服務終止到取代服務約要個10秒,盡量不要小於這個數字。
warntime 10
initdead 180
對於大部分的OS,可能heartbeat服務啟動之後,需要一些時間網路才能正常運作,在此可以設定讓heartbeat啟動時不要去偵測是否存活的時間。
baud 19200
serial /dev/ttyS0 # Linux
以上兩個設定是有連接序列線才有。
bcast eth0 # Linux
如果你只使用網路偵測,就必須使用broadcast
auto_failback on
這決定是否主要節點回復後,次要節點會回到standby的狀態。
watchdog /dev/watchdog
node ha-1.your.domain
node ha-2.your.domain
如此一來ha-1就是主要節點,配合前面auto-failback的設定,當ha-1服務終止時,ha-2的heartbeat會把服務叫起來,當ha-1服務回復時,ha-2會自動終止服務跳至standby的狀態。要注意到節點名稱最好是要能夠由DNS查詢到,而接下來的ping_group就不用打IP而只要名稱就好
以下的設定是配合ipfail
ping 192.168.0.254
這個是自動測試網路有沒有通,最好將他設為core router的IP
ping_group group1 192.168.0.101 192.168.0.102
如果這兩個IP活著,表示group1是活著,依此類推
respawn hacluster /usr/lib/heartbeat/ipfail
你必須先建立一個名為hacluster的帳號,否則就使用respawn nobody /usr/lib/heartbeat/ipfail這樣的設定。
haresources
注意!這個檔案在所有的機器上都要一樣
只要一行便可以
service.your.domain 192.168.0.1 httpd proftpd
所以,這個設定的格式如下
[full hostname] [ip] [service1] [service2]...
服務的script,heartbeat會自動搜尋/etc/ha.d/resource.d及/etc/rc.d/init.d這兩個目錄
當heartbeat啟動的時候,他會自動呼叫httpd start及proftpd start,反之停止的時候他會呼叫這兩個script的stop。
authkeys
這個檔案基本上也是都要一樣
auth 1
1 crc
這樣即可
請確定這個檔案的owner及group是root
接著chmod 600 authkeys
啟動及測試
將兩台主機的heartbeat都啟動
[bash]
#設定開機啟動
chkconfig --level 35 heartbeat on
service heartbeat start
[/bash]
接著試著拔掉序列線,網路線,進行測試。
[...] 以上就是1.0版的時候提供的功能。有關heartbeat 1.0可以參考舊文章 http://kiwi.csie.chu.edu.tw/blog/archives/48 [...]
回覆刪除不知道你是否有試過在 Solaris 10 上跑過這樣的 service ?
回覆刪除謝謝
我沒有,不過我看了你的文章,似乎從建置過程來說是沒太大問題
回覆刪除如果有遇到任何問題,我們可以隨時討論與分享!
你好
回覆刪除關於 HeartBeat 我目前只在 Centos 上裝好
Solaris 則是尚未找到類似的東西 . . .
囧 . . 還是說這種東西只適合用在 Linux 上呀
但是在 Linux-HA ( http://www.linux-ha.org )網站上又寫著支援
您好,想請問您的Virtual-IP該怎麼設定?
回覆刪除因為我想用discuz去測試節點會不會跳
但是乎只有偵測到斷點卻不會自動跳
想請您指點指點我該怎麼設定有關Virtual-IP...
我在想如果你照著我的文件,官方文件,或者是利用suse的程式設定,都可以達到同樣的目的。除非真的漏看或是打錯字,打錯IP,不然應該不太可能會設定錯誤。但如果你提到「不會進行failover」,那狀況實在太多。有可能是因為1. 連續進行中斷測試導致heartbeat的resource控制程式異常,2. 控制程式判定你的服務還是活著,以致於不進行failover,3. 真的打錯ip
回覆刪除如果你想了解你的環境位啥不會動,我建議你將/var/log/ha-log, ha-debug兩個檔案檢查看看有沒有錯誤訊息,真的不行在請你將檔案寄給我看,順便說明你的環境及狀況
已經寄信給你,希望你能抽個空幫我看一下
回覆刪除感謝...
忘了跟你說聲謝謝~
回覆刪除最近事情比較多......(雜七雜八一堆@@)
有幫助到~
真的很謝謝你