Linux Enterprise Cluster NOtes — Ch7 A Sample HA config

來源:互聯網
上載者:User
本章介紹了一個heartbeat的最簡單配置,以下是硬體上的串連圖(附件1):

從圖上可以看出,兩台伺服器使用乙太網路作為心跳線,分配的IP地址分別是10.1.1.1和10.1.1.2,BTW,在RFC1918中,規定可以用來做private network的IP地址為:

10.0.0.0 to 10.255.255.255 (10/8 prefix)

172.16.0.0 to 172.31.255.255 (172.16/12 prefix)

192.168.0.0 to 192.168.255.255 (192.168/16 prefix)

2. 安裝heartbeat軟體包,用RPM的方式安裝即可。

#rpm -ivh /mnt/cdrom/chapter7/heartbeat-pils-*.rpm[1]
#rpm -ivh /mnt/cdrom/chapter7/hearbeat-stonith-*.rpm
#rpm -ivh /mnt/cdrom/chapter7/hearbeat-*i386.rpm

其中pils這個包是:The PILS package was introduced with version 0.4.9d of Heartbeat. PILS is Heartbeat's generalized plug-in and interface loading system, and it is required for normal Heartbeat operation.

stonith這個包已經知道了,前面已經講過stonith是什麼意思了。

當然,也可以自己編譯源碼,或是download src rpm,然後用rpm --rebuild

3. 需要注意的是,安裝這些RPM包需要openssl和netsnmp,如果這兩個東西沒有裝的話,安裝RPM會出現dependencies error的。

4. 配置/etc/ha.d/ha.cf. 如果這個檔案不存在,那麼可以拷貝一個sample過來然後修改:cp /usr/share/doc/package/heartbeat/ha.cf /etc/ha.d

5. 開始修改配置,首先將以下行的注釋去掉:

#udpport 694
#bcast eth0 #Linux

這兩行開啟之後,表示使用乙太網路做心跳,使用UDP,連接埠是694,兩台server作心跳的兩塊網卡都是eth0,如果兩台server作心跳的網卡一個是eth0,一個是eth1,那麼這樣寫:

bcast eth0 eth1 #第一個eth0指的是primary server,後面一個是backup server

如果用串口線做心跳,那麼要這樣配置:

serial /dev/ttyS0
baud 19200

6. 然後將以下行的注釋去掉:

keepalive 2
deadtime 30
initdead 120

這三項,所謂keepalive指的是每隔2秒兩台server做心跳檢測一次;deadtime,如果30秒內還是沒有正常的心跳到 達,backup server就認為primary server已經掛了;initdead,這個選項用來指定primary server的heartbeat啟動後,在隔多長時間後,再去start相關的resource。為什麼要這樣做呢,很簡單,如果primary server掛了,那麼backup server就會將資源納入自己的管理範圍,這個時候如果primary server好了,那麼,primary server必須要隔一段時間再去取回resource的控制權,因為必須要留一段時間給backup server釋放資源,如果primary server一起來就去控制資源,就會出現"Partitioned Clusters and STONITH"這種現象。

7. 最後,添加兩行到ha.cf檔案的末尾:

node primary.mydomain.name
node backup.mydomain.com

這兩行就是將作HA的兩台伺服器的hostname填入即可,注意,這裡還沒指定primary server是誰,backup server是誰,只是單純的羅列了兩台機器而已,在下一部分中定義資源時就會定義誰是primary server,誰是backup server了.

 

8. 配置/etc/ha.d/haresources,這個檔案中將配置所有primary server將擁有的resource。不過首先我們需要先建立一個resource,這裡做了一個最簡單的:

#vi /etc/ha.d/resource.d/test
內容如下:
#!/bin/bashlogger $0 called with $1
case "$1" in
start)
# Start commands go here
;;
stop)
# Stop commands go here
;;
status)
# Status commands go here
;;
esac

在這個指令碼中,看到我們用了一個命令叫logger,這個命令會將後面的message寫到系統日誌裡面,預設就是/var/log/messages(當然,我們可以通過配置/etc/syslog.conf來調整這種行為)。

9. 然後給我們的resource加上可執行許可權:

chmod 755 /etc/ha.d/resource.d/test

10. 然後測試一下:/etc/ha.d/resource.d/test start,這個時候check一下/var/log/messages,應該能發現多了一行:

[timestamp] localhost root: /etc/ha.d/resource.d/test called with start

11. 然後我們開始配置haresources檔案,首先拷貝一個sample:

cp /usr/share/doc/packages/heartbeat/haresources /etc/ha.d

12. 然後編輯這個檔案,只需要在檔案的末尾加上這樣一句話:

primary.mydomain.com test

這個配置首先指定primary.mydomain.com為primary server(當然要把primay.mydomain.com換成相應的hostname),然後指定資源為test(heartbeat會在/etc /init.d和/etc/ha.d/resources目錄下尋找這個test指令碼,另外需要注意的是,在backup server上,這個test指令碼也必須要存在)

13. 這樣就OK了,再羅嗦一邊,不要將這個test放到系統啟動過程中,因為heartbeat負責啟動/停止該資源。

14. heartbeat的respawn. heartbeat提供了一個respawn的功能,比如:

respawn userid /usr/bin/mydaemon

這個命令表示heartbeat會啟動/usr/bin/mydaemon這個daemon進程,如果發現這個進程死了,heartbeat會再 啟動他,簡言之,利用這個respawn,/usr/bin/mydaemon將獲得和heartbeat一樣的生命週期--這就意味著,我們可以利用這 個daemon,從而串連兩台伺服器上的heartbeat,或是利用這個daemon來監控heartbeat的一些行為。不過要注意的是,這個 daemon沒有failover的功能,heartbeat唯一保證的是,當heartbeat自己活著時,我們的這個daemon也活著,僅此而已。

其實respawn,我們已經接觸過,在/etc/inittab中也有一些respawn的命令(用來啟動login程式),不同的是,這裡respawn出來的程式由init進程負責監控,這裡提到的respawn是heartbeat的一個命令。

此外,和下面要說的cl_respawn不同的是,由於我們primary server和backup server的配置是一樣的,所以,被respawn的程式在兩台伺服器上都會存在-這也是為什麼respawn出來的程式不具備failover的一個理由。

15. cl_respawn. 和respawn一樣,都是啟動並監控一個程式,唯一不同的是,cl_respawn啟動出來的程式不會在primary和backup兩台伺服器上存 在,heartbeat會保證被cl_respawn出來的程式,在同一時間,只會在一台伺服器上存在---這就是說,可以用這個cl_respawn來 做failover!比如,我們要監控的資源是httpd,那麼,當primary server down掉後,backup server會接管工作,但是如果primary server沒有down掉,而是httpd進程down掉了怎麼辦呢?這時就可以用這個cl_respawn將httpd進程監控起來,當在 primary server上發現httpd進程down掉後,立刻重啟他,而當primary server down掉的時候,httpd也可以failover,很棒吧!

16. 配置/etc/ha.d/authkeys。這個檔案用來配置一個security key,heartbeat會利用我們指定的加密方法和key來加密heartbeat的心跳message,從而保證安全性。

17. 開始配置:

cp /usr/share/doc/packages/heartbeat/authkeys /etc/ha.d

18. 編輯authkeys
auth1
1 sha1 testlab

這裡可以看到,我們採用sha1(Secure Hash Algorithm 1)這種密碼編譯演算法,testlab是加密所使用的key。除了testlab中的是字母l之外,其他的都是數字1

19. 很顯然的是,這個authkeys這個檔案必須只能root使用者可讀,其他人都不可讀,否則key就泄露了,如下:

#chmod 600 /etc/ha.d/authkeys

如果我們沒做這個工作,heartbeat會提醒我們。

20. 配置backup server。首先backup server上的OS和heartbeat都要裝的和primay server一樣,然後,將primary server上的配置都拷貝過來就行了:

#scp -r /etc/ha.d backupnode:/etc/ha.d

21. 同步系統時間。我們需要將primary server和backup server的時間同步,因為有些應用對時間是敏感的。可以使用NTP+cron,來將兩台server的時間同步。

 

22. 運行heartbeat。首先我們可以用ResourceManager這個程式來測試我們配置的resource是否正確(在primary server上執行):

#/usr/lib/heartbeat/ResourceManager listkeys `uname -n`

如果ResourceManager能列印出我們配置的資源-test,就OK了。

23. 在primary server上執行/etc/init.d/heartbeat start就可以啟動heartbeat,啟動後查看/var/log/messages(如果在ha.cf中配置了logfile這項,就不是這個 log檔案)檔案可以看到資訊:

primary root: test called with statusprimary heartbeat[4410]: info: **************************
primary heartbeat[4410]: info: Configuration validated. Starting heartbeat
<version>
primary heartbeat[4411]: info: heartbeat: version <version>
primary heartbeat[2882]: WARN: No Previous generation - starting at 1[5]
primary heartbeat[4411]: info: Heartbeat generation: 1
primary heartbeat[4411]: info: UDP Broadcast heartbeat started on port 694
(694) interface eth1
primary heartbeat[4414]: info: pid 4414 locked in memory.
primary heartbeat[4415]: info: pid 4415 locked in memory.
primary heartbeat[4416]: info: pid 4416 locked in memory.
primary heartbeat[4416]: info: Local status now set to: 'up'
primary heartbeat[4411]: info: pid 4411 locked in memory.
primary heartbeat[4416]: info: Local status now set to: 'active'
primary logger: test called with status
primary last message repeated 2 times
primary heartbeat: info: Acquiring resource group: primary.mydomain.com test
primary heartbeat: info: Running /etc/init.d/test start
primary logger: test called with start
primary heartbeat[4417]: info: Resource acquisition completed.
primary heartbeat[4416]: info: Link primary.mydomain.com:eth1 up.

這些都很好理解,不說了。有可能會看到說backup server是dead的,那是因為我們在backup server上還沒啟動heartbeat的緣故,啟動了backup server上的heartbeat以後,再回來看primary server上的log,能看到他檢測到了backup server。如果不行,就檢查網路是否通,是否有防火牆等等。

24. 在log資訊中,有個東西很有意思,需要解釋一下,看這行:

primary heartbeat[4411]: info: Heartbeat generation: 1

這裡heartbeat的generation,當heartbeat啟動一次,這個generation就會加1,為什麼要這樣做呢?很簡單, 還是為了防止"partition cluster and stonith"這種情況。比如如果現在串連兩台server的所有心跳線全部故障了,此時backup server就會認為primary server掛了,那麼,他會開始搶佔資源,如果後來他又收到了primary server的一個心跳,他就會check這個心跳的generation,看看是不是加過1了,如果加過,表示primary server的heartbeat確實重啟過,如果發現這個generation沒加,很顯然,這是一種STONITH的情況,此時,backup server會立刻自己重啟以避免發生衝突。

 

25. 現在可以開始測試failover了。將primary server上的heartbeat服務關閉或是拔掉網線或是重啟primary server,查看backup server的日誌就可以看到backup server檢測到瞭然後接管test資源;然後將primary server複原,可以看到backup server檢測到然後釋放資源等等這些情況。

26. 本章只是一個最簡單的failover配置,heartbeat不僅僅如此,他還可以監控資源,做一個更細粒度的監控工作。後面會講解。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.