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ī)制的方法是,手動(dòng)關(guān)閉服務(wù)器,檢查它們服務(wù)的網(wǎng)站是不是仍然可用。下面是我們的測試拓?fù)浣Y(jié)構(gòu):
映射服務(wù)所用的IP地址需要一直能夠訪問得到。通常,Heartbeat會為你將指定的IP地址分配給主服務(wù)器上的虛擬網(wǎng)絡(luò)接口卡(NIC)。如果主服務(wù)器出現(xiàn)了故障,集群會自動(dòng)將IP地址切換到另一臺可用服務(wù)器上的虛擬NIC。如果主服務(wù)器恢復(fù)正常運(yùn)行,它會再次將IP地址切換回到主服務(wù)器。由于具有遷移屬性,這個(gè)IP地址被稱為“浮動(dòng)”地址。
在所有服務(wù)器上安裝軟件包
想組建集群,首先要使用yum,在每一個(gè)節(jié)點(diǎn)上安裝必要的軟件包:
- yum install PyXML cluster-glue cluster-glue-libs resource-agents
下一步,下載和安裝官方CentOS軟件庫里面沒有的兩個(gè)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,并禁止它自動(dòng)開啟:
- service httpd stop
- chkconfig httpd off
設(shè)置主機(jī)名稱
現(xiàn)在設(shè)置服務(wù)器的主機(jī)名稱,為此編輯每個(gè)系統(tǒng)上的etc/sysconfig/network,并更改HOSTNAME這一行:
- HOSTNAME=serverX.example.com
新的主機(jī)名稱會在服務(wù)器下一次啟動(dòng)時(shí)激活。你可以使用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/
然后,你還得改動(dòng)全部集群節(jié)點(diǎn)上的所有三個(gè)文件,以便與你的需求相匹配。
authkeys文件含有集群節(jié)點(diǎn)彼此聯(lián)系時(shí)所使用的預(yù)共享密碼。集群里面的每個(gè)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ì)時(shí)器、集群節(jié)點(diǎn)、消息傳遞機(jī)制、第4層端口及其他設(shè)置:
- ## 日志##
- logfile /var/log/ha-log
- logfacility local0hea
- ## 計(jì)時(shí)器##
- ## 所有計(jì)時(shí)器設(shè)成以秒為單位。如果你需要以毫秒為單位設(shè)置時(shí)間,就使用‘ms’。##
- ## heartbeat間隔時(shí)間##
- keepalive 2
- ## 超過這個(gè)時(shí)間后,節(jié)點(diǎn)被認(rèn)為已停滯##
- deadtime 15
- ## 一些服務(wù)器花更長的時(shí)間來啟動(dòng)。該計(jì)時(shí)器定義了證實(shí)服務(wù)器宕機(jī)之前所等待的額外時(shí)間。##
- ## 該計(jì)時(shí)器的建議時(shí)間是停滯計(jì)時(shí)器的至少一倍。##
- 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ī)名稱,另外還含有浮動(dòng)IP地址。該文件在所有服務(wù)器上都一模一樣,這點(diǎn)很重要。只要主節(jié)點(diǎn)在正常運(yùn)行,它就服務(wù)所有請求;Heartbeat停止其他所有節(jié)點(diǎn)上的高可用性服務(wù)。Heartbeat檢測到該主節(jié)點(diǎn)停機(jī)運(yùn)行后,它會在集群中的下一個(gè)可用節(jié)點(diǎn)上自動(dòng)開啟服務(wù)。主節(jié)點(diǎn)恢復(fù)正常運(yùn)行后,Heartbeat會讓它再次接手任務(wù),服務(wù)所有請求。最后,該文件含有負(fù)責(zé)高可用性服務(wù)的腳本的名稱:這里是httpd。其他可能出現(xiàn)的值有squid、smb、nmb或postfix,映射到通常位于/etc/init.d/目錄中的服務(wù)啟動(dòng)腳本的名稱。
在haresources中,定義server1.example.com為主服務(wù)器,定義192.168.56.200為浮動(dòng)IP地址,定義 httpd為高可用性服務(wù)。你不需要?jiǎng)?chuàng)建任何接口,也不需要為任何接口手動(dòng)分配浮動(dòng)IP地址――Heartbeat為你處理這項(xiàng)任務(wù):
- server1.example.com 192.168.56.200 httpd
每一臺服務(wù)器上的配置文件準(zhǔn)備就緒后,開啟Heartbeat服務(wù),并將它添加到系統(tǒng)啟動(dòng)項(xiàng):
- service heartebeat start
- chkconfig heartbeat on
你可以借助命令tailf /var/log/ha-log,密切關(guān)注Heartbeat日志。
Heartbeat可用于多項(xiàng)服務(wù)。比如說,haresources中的下列指令將讓Heartbeat同時(shí)管理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ù)。浮動(dòng)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ù),浮動(dòng)IP地址應(yīng)該會按照haresources中的設(shè)置,從活動(dòng)節(jié)點(diǎn)遷移到服務(wù)器1。
正如你所見,使用Heartbeat,在CentOS下組建一個(gè)高可用性的Apache集群是件很容易的事。雖然我們使用了三臺服務(wù)器,但Heartbeat在節(jié)點(diǎn)數(shù)量更多或更少的環(huán)境下應(yīng)該同樣沒問題。Heartbeat對節(jié)點(diǎn)數(shù)量沒有任何限制,所以你可以根據(jù)需要擴(kuò)展所設(shè)置環(huán)境的規(guī)模。
原文鏈接:http://www.openlogic.com/wazi/bid/350999/how-to-set-up-a-highly-available-apache-cluster-using-heartbeat