如何使用Heartbeat,組建一個高可用性的Apache集群?
譯文Heartbeat提供了諸多集群基礎(chǔ)架構(gòu)服務(wù),比如集群之間的消息傳遞、節(jié)點(diǎn)成員身份、IP地址分配和遷移,以及服務(wù)的開啟和停止。Heartbeat可以用來為Apache、Samba和Squid等企業(yè)應(yīng)用系統(tǒng)構(gòu)建幾乎任何一種高可用性的集群。此外,它可以結(jié)合負(fù)載均衡軟件使用,那樣入站請求就可以由所有集群節(jié)點(diǎn)來分擔(dān)。
本文中的示例集群將由三臺運(yùn)行Heartbeat的服務(wù)器組成。我們測試故障切換機(jī)制的方法是,手動關(guān)閉服務(wù)器,檢查它們服務(wù)的網(wǎng)站是不是仍然可用。下面是我們的測試拓?fù)浣Y(jié)構(gòu):
映射服務(wù)所用的IP地址需要一直能夠訪問得到。通常,Heartbeat會為你將指定的IP地址分配給主服務(wù)器上的虛擬網(wǎng)絡(luò)接口卡(NIC)。如果主服務(wù)器出現(xiàn)了故障,集群會自動將IP地址切換到另一臺可用服務(wù)器上的虛擬NIC。如果主服務(wù)器恢復(fù)正常運(yùn)行,它會再次將IP地址切換回到主服務(wù)器。由于具有遷移屬性,這個IP地址被稱為“浮動”地址。
在所有服務(wù)器上安裝軟件包
想組建集群,首先要使用yum,在每一個節(jié)點(diǎn)上安裝必要的軟件包:
- yum install PyXML cluster-glue cluster-glue-libs resource-agents
 
下一步,下載和安裝官方CentOS軟件庫里面沒有的兩個Heartbeat RPM文件。
- wget http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-3.0.4-2.el6.x86_64.rpm
 - wget http://dl.fedoraproject.org/pub/epel/6/x86_64/heartbeat-libs-3.0.4-2.el6.x86_64.rpm
 - rpm -ivh heartbeat-*
 
另外,你可以將EPEL軟件庫添加到源文件,并使用yum進(jìn)行安裝。
Heartbeat會管理Apache的httpd服務(wù)的開啟和停止,所以停止Apache,并禁止它自動開啟:
- service httpd stop
 - chkconfig httpd off
 
設(shè)置主機(jī)名稱
現(xiàn)在設(shè)置服務(wù)器的主機(jī)名稱,為此編輯每個系統(tǒng)上的etc/sysconfig/network,并更改HOSTNAME這一行:
- HOSTNAME=serverX.example.com
 
新的主機(jī)名稱會在服務(wù)器下一次啟動時激活。你可以使用hostname命令立即激活它,不需要重啟服務(wù)器:
- hostname serverX.example.com
 
你可以在每一臺服務(wù)器上運(yùn)行uname -n,以此證實(shí)主機(jī)名稱已正確設(shè)置好。
配置Heartbeat
想配置Heartbeat,首先要將其默認(rèn)配置文件從/usr拷貝到/etc/ha.d/:
- cp /usr/share/doc/heartbeat-3.0.4/authkeys /etc/ha.d/
 - cp /usr/share/doc/heartbeat-3.0.4/ha.cf /etc/ha.d/
 - cp /usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
 
然后,你還得改動全部集群節(jié)點(diǎn)上的所有三個文件,以便與你的需求相匹配。
authkeys文件含有集群節(jié)點(diǎn)彼此聯(lián)系時所使用的預(yù)共享密碼。集群里面的每個Heartbeat消息都含有該密碼,節(jié)點(diǎn)只處理擁有正確密碼的那些消息。Heartbeat支持SHA1密碼和MD5密碼。在authkeys文件中,下列指令將驗(yàn)證方法設(shè)置為SHA1,并且定義了所使用的密碼:
auth 2
2 sha1 pre-shared-password
保存該文件,然后使用命令chmod 600 /etc/ha.d/authkeys,為該文件授予r--的權(quán)限。
下一步,在ha.cf文件中,定義計(jì)時器、集群節(jié)點(diǎn)、消息傳遞機(jī)制、第4層端口及其他設(shè)置:
- ## 日志##
 - logfile /var/log/ha-log
 - logfacility local0hea
 - ## 計(jì)時器##
 - ## 所有計(jì)時器設(shè)成以秒為單位。如果你需要以毫秒為單位設(shè)置時間,就使用‘ms’。##
 - ## heartbeat間隔時間##
 - keepalive 2
 - ## 超過這個時間后,節(jié)點(diǎn)被認(rèn)為已停滯##
 - deadtime 15
 - ## 一些服務(wù)器花更長的時間來啟動。該計(jì)時器定義了證實(shí)服務(wù)器宕機(jī)之前所等待的額外時間。##
 - ## 該計(jì)時器的建議時間是停滯計(jì)時器的至少一倍。##
 - initdead 120
 - ## 消息傳遞參數(shù)##
 - udpport 694
 - bcast eth0
 - ## 你還可以使用多播或單播##
 - ## 節(jié)點(diǎn)定義##
 - ## 確保主機(jī)名稱符合uname -n ##
 - node server1.example.com
 - node server2.example.com
 - node server3.example.com
 
最后,文件haresources含有Heartbeat認(rèn)為是主節(jié)點(diǎn)的那臺服務(wù)器的主機(jī)名稱,另外還含有浮動IP地址。該文件在所有服務(wù)器上都一模一樣,這點(diǎn)很重要。只要主節(jié)點(diǎn)在正常運(yùn)行,它就服務(wù)所有請求;Heartbeat停止其他所有節(jié)點(diǎn)上的高可用性服務(wù)。Heartbeat檢測到該主節(jié)點(diǎn)停機(jī)運(yùn)行后,它會在集群中的下一個可用節(jié)點(diǎn)上自動開啟服務(wù)。主節(jié)點(diǎn)恢復(fù)正常運(yùn)行后,Heartbeat會讓它再次接手任務(wù),服務(wù)所有請求。最后,該文件含有負(fù)責(zé)高可用性服務(wù)的腳本的名稱:這里是httpd。其他可能出現(xiàn)的值有squid、smb、nmb或postfix,映射到通常位于/etc/init.d/目錄中的服務(wù)啟動腳本的名稱。
在haresources中,定義server1.example.com為主服務(wù)器,定義192.168.56.200為浮動IP地址,定義 httpd為高可用性服務(wù)。你不需要創(chuàng)建任何接口,也不需要為任何接口手動分配浮動IP地址――Heartbeat為你處理這項(xiàng)任務(wù):
- server1.example.com 192.168.56.200 httpd
 
每一臺服務(wù)器上的配置文件準(zhǔn)備就緒后,開啟Heartbeat服務(wù),并將它添加到系統(tǒng)啟動項(xiàng):
- service heartebeat start
 - chkconfig heartbeat on
 
你可以借助命令tailf /var/log/ha-log,密切關(guān)注Heartbeat日志。
Heartbeat可用于多項(xiàng)服務(wù)。比如說,haresources中的下列指令將讓Heartbeat同時管理Apache服務(wù)和Samba服務(wù):
- server1.example.com 192.168.56.200 httpd smb nmb
 
不過,除非你還在運(yùn)行Pacemaker之類的集群資源管理器(CRM),否則我不建議使用Heartbeat在單一集群中提供多項(xiàng)服務(wù)。要是沒有Pacemaker,Heartbeat使用IP地址監(jiān)測第3層中的集群節(jié)點(diǎn)。只要IP地址可以訪問得到,Heartbeat無視服務(wù)在服務(wù)器節(jié)點(diǎn)上可能遇到的任何崩潰或困難。
測試
一旦Heartbeat設(shè)置并運(yùn)行起來,不妨對它測試一下。在所有三臺服務(wù)器上創(chuàng)建單獨(dú)的index.html文件,那樣你就能看清哪臺服務(wù)器在服務(wù)頁面。瀏覽到192.168.56.200,如果你設(shè)置好了DNS,也可以瀏覽到相應(yīng)域名。頁面應(yīng)該會從server1.example.com加載,你可以查看服務(wù)器1中的Apache日志文件來核實(shí)這一點(diǎn)。試著刷新頁面,證實(shí)該頁面是否每次都從同一臺服務(wù)器加載。
如果這一切進(jìn)展良好,測試一下故障切換機(jī)制:停止server1.example.com上的Heartbeat服務(wù)。浮動IP地址應(yīng)該會遷移到服務(wù)器2,頁面應(yīng)該會從該服務(wù)器加載。迅速看一下server2 Apache日志,應(yīng)該可以證實(shí)這一點(diǎn)。如果你同樣停止了服務(wù)器2上的服務(wù),網(wǎng)頁會從集群的唯一可用節(jié)點(diǎn)server3.example.com加載。如果你重啟了服務(wù)器1和服務(wù)器2上的服務(wù),浮動IP地址應(yīng)該會按照haresources中的設(shè)置,從活動節(jié)點(diǎn)遷移到服務(wù)器1。
正如你所見,使用Heartbeat,在CentOS下組建一個高可用性的Apache集群是件很容易的事。雖然我們使用了三臺服務(wù)器,但Heartbeat在節(jié)點(diǎn)數(shù)量更多或更少的環(huán)境下應(yīng)該同樣沒問題。Heartbeat對節(jié)點(diǎn)數(shù)量沒有任何限制,所以你可以根據(jù)需要擴(kuò)展所設(shè)置環(huán)境的規(guī)模。
















 
 
 



 
 
 
 