一、 實驗環境:
如下圖所示:兩臺服務器節點,一臺客戶端通過交換機互連,相關數據規劃如下:
設備名稱 IP地址 主機名
客戶端 192.168.110.2 Client(win7)
服務器1 192.168.110.128 node1.yang.com
服務器2 192.168.110.129 node2.yang.com
二、 配置步驟及說明
-
準備工作
a. 主機名解析
在heartbeat中,節點之間的通信使用的節點主機名稱,因此必須確保每臺主機的名稱惟一,並且通過主機名能夠訪問到對應的IP地址。建議修改每個節點的/etc/hosts文件,使各節點保持一致:
[root@node1 ha.d]# cat /etc/hosts
192.168.110.128 node1 node1.yang.com
192.168.110.129 node2 node2.yang.com
b. 主機互信
在集羣中,建議使用集羣主來管理整個集羣,需要頻繁的從主遠程登錄其他的成員,因此建議配置主機互信避免每次都輸入密碼進行操作。
[root@node1 .ssh]# ssh-keygen -t rsa //全部回車,使用空密碼即可,此時會在/root/.ssh目錄中產生id_rsa.pub的文件
[root@node1 .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node2
//在節點1上將id_rsa.pub拷貝到node2即可。
Node2上的配置與此類似。 - 安裝heartbeat軟件
由於在CENTOS6的YUM源中沒有配置有heartbeat,因此需要安裝額外的YUM源:
a. 獲取YUM源:
wget http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-6.noarch.rpm
b. Yum安裝heartbeat
Yum install –y heartbeat即可,安裝完成後可以使用rpm –ql heartbeat |less查看一下安裝產生的相關文件。 - Heartbeat安裝完成後,其工作目錄爲/etc/ha.d目錄,工作依賴於ha.cf,haresources以及authkeys三個文件,這三文件需要手工從安裝的幫助路徑拷貝到/etc/ha.d目錄。
#cp-p /usr/share/doc/heartbeat-3.0.4/{ha.cf,authkeys,haresources} /etc/ha.d/ - 配置ha.cf文件
該文件爲主配置文件,其中定義了相關日誌文件位置、成員節點的信息、消息事件層通信的機制(單播、組播還是廣播)等,在我們的場景中需要修改如下的事項,去掉相應行前面的註釋標誌#:
[root@node1 ha.d]# cat /etc/ha.d/ha.cf
debugfile /var/log/ha-debug //用於觀察heartbeat事務行爲
logfile /var/log/ha-log //記錄相關的日誌
udpport 694 //通信端口694
mcast eth0 225.0.0.1 694 1 0 //採用組播通信機制
auto_failback on //當主節點恢復時,資源回切
node node1.yang.com //定義兩個node,分別使用其主機名
node node2.yang.com
ping 192.168.110.2 //由於集羣只有2個節點,需要藉助ping進行檢測 - 配置authkeys文件
authkeys爲成員節點通信的時候採用的加密機制確保通信安全,有三種加密機制,分別爲CRC,MD5以及SHA。寫法較簡單,如下:
auth 3 //定義認證採用的id
3 md5 Hello! //定義該id所對應的認證算法以及密鑰
該文件是爲了確保節點間通信的安全性,建議配置權限爲600. - 配置haresources文件
haresouces文件爲狀態爲主的節點需要啓用的資源,以及狀態爲備的節點需要關閉的資源。資源以行爲單位,格式如下:
nodename resources1 resource2 …
其中nodename必須爲ha.cf文件中配置的其中一個節點名稱,用於表示資源希望運行在的那個服務器,稱爲集羣主服務器。Resources之間使用空格隔開,這些resources實際上是heartbeat可以調用的腳本,其中IPaddr爲軟件提供的腳本,其他的腳本位於/etc/ha.d/rc.d/目錄中;除了這些腳本外,/etc/init.d/中的腳本,只有符合LSB風格的也可以被調用。因此安裝httpd後的httpd腳本是可以直接調用的。
如果resources有參數傳遞,需要使用::進行分隔,多個參數之間也使用::進行分隔。
本實驗爲httpd提供高可用服務,因此需要用到的資源如下:
a. 對外提供服務的虛擬IP
b. 提供WEB服務的httpd腳本,(安裝apache後就有此腳本)
haresource文件配置:
node1.yang.com 192.168.110.100/24/eth0 httpd
到此三個關鍵的文件就配置完成了,現在將三個文件拷貝至備機:
scp -p authkeys haresources ha.cf node2:/etc/ha.d/
特別注意:備機與主機的文件保持一致即可,注意haresources文件中的node1.yang.com不能修改爲node2.yang.com,原因前面已經解釋過。 - 其他設置
a. 由於集羣所需要使用的服務都交由heartbeat軟件進行整體控制,因此在兩臺設備需要確保的是heartbeat在運行,而諸如vip,httpd等資源由heartbeat控制即可。因此可以設置heartbeat開機即啓動,將httpd開機關閉。
[root@node1 ha.d]# chkconfig --list heartbeat
heartbeat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@node1 ha.d]# chkconfig --list httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
b. 爲了方便後續測試,將兩個節點的httpd的網頁文件中寫入不同的內容以示區分:
[root@node1 ha.d]# cat /var/www/html/index.html
Comes from node1.yang.com
[root@node2 ha.d]# cat /var/www/html/index.html
Comes from node2.yang.com - 開啓heartbeat服務
a. 啓動主節點服務:
Service heartbeat start
b. 在主節點上啓動備節點上面的服務:
ssh root@node2 “service heartbeat start” - 測試
a. 在node1上面ip addr查看VIP地址:
[root@node1 ha.d]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:70:82:69 brd ff:ff:ff:ff:ff:ff
inet 192.168.110.128/24 brd 192.168.110.255 scope global eth0
inet 192.168.110.100/24 brd 192.168.110.255 scope global secondary eth0
inet6 fe80::20c:29ff:fe70:8269/64 scope link
valid_lft forever preferred_lft forever
b. 從客戶端訪問http://192.168.110.100
c. 在集羣主上面將eth0 down掉,再刷新頁面:
d. 在集羣備上機查看VIP:
[root@node2 ha.d]# ip addr
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:46:09:ee brd ff:ff:ff:ff:ff:ff
inet 192.168.110.129/24 brd 192.168.110.255 scope global eth0
inet 192.168.110.100/24 brd 192.168.110.255 scope global secondary eth0
inet6 fe80::20c:29ff:fe46:9ee/64 scope link
valid_lft forever preferred_lft forever
分析:
此時主節點ping192.168.110.2不通,同時與不能與備節點通信,因此主節點認爲自己故障,將資源放棄;而備節點可以ping通192.168.110.2,而不能與主節點通信,因此認爲自己正常,啓用相應的資源。可以分析/var/log/ha-debug以及/var/log/ha-log日誌中的詳細過程。同時可以通過抓包看到節點間的通信以及各節點ping 192.168.110.2地址。 - 總結:
本實驗簡要的說明了heartbeat如何爲集羣提供httpd的高可用,在真實的環境中應當是heartbeat爲各種服務代理服務提供高可用,通過將反向代理將服務轉發到後端服務的集羣進行處理。而heartbeat爲反向代理本身提供集羣服務。可以看到所有用於提供服務的資源被heartbeat統一管理,在主節點上開啓,當主節點出現故障經過集羣判斷新的主後,在新的主上面重新啓用這些資源。