Linux 系統下雙機HA的功能實現

  在Linux系統上雙機功能的實現,對雙機軟件High-Availability Linux Project的安裝、配置、運行以及測試進行說明。
1.1 軟件及安裝說明
  本文檔描述的Linux-HA軟件以及參考的文檔均來自網站:
http://www.linux-ha.org/
  通過安裝該Linux-HA軟件,可以實現Linux雙機系統的高可用性解決方案,實現雙機系統的熱備份,並能夠做到雙機之間的無縫切換,從而對外提供穩定可靠的服務,最終實現系統高性能RAS(reliability, availability, and serviceability)。
  實現雙機系統的兩臺主機不要求完全一致,但應該儘量做到硬件匹配。雙機的連接可以使用串口線,也可以通過以太網ethernet進行連接,還可以採用並存的多種連接方式實現兩臺主機的多重互連。兩臺主機應該安裝相同的操作系統,推薦使用RedHat Linux。進行網絡配置,爲每一臺主機分配一個固定IP地址,另外需要選擇一個IP地址作爲集羣IP(cluster IP),該IP是集羣系統對外提供服務的接口。
  注意:主機IP地址與集羣IP地址一定不能重複。

1.2 軟件的安裝

1.2.1 下載
  首先選擇與系統匹配的安裝文件。本文檔測試所用的系統是CENTOS4.4,所用的安裝文件是heartbeat-2.0.8.tar.gz,用戶可以自行到網站
http://linux-ha.org/download/index.html上下載,該網站也會不斷提供實時更新.同時到http://www.packetfactory.net/libnet/下載libnet.tar.gz 穩定版本是:1.1.2.1.
  Linux-HA軟件的安裝需要大量支持性的rpm軟件包,根據用戶系統及配置的不同,安裝過程中會提出不同的rpm需求。如果有未獲得的rpm包,可以到網站
http://rpmfind.net/ 上查找並下載。

1.2.2 編譯安裝
  如安裝文件所示,heartbeat-2.0.8.tar.gz是heartbeat的源代碼軟件包。該文件需要重新編譯,但是首先應該依次安裝支持heartbeat的一些rpm package,這些軟件包對heartbeat提供必要的支持,然後再安裝heartbeat軟件包。注意由於軟件包之間有相互依賴關係,因而需要遵循一定的安裝順序,可以根據安裝過程中的提示自行協調安裝順序。
  一些依賴的rpm包如下:
#rpm –ivh perl-Digest-SHA1-2.01-6.i386.rpm
#rpm –ivh perl-Digest-HMAC-1.01-8.noarch.rpm
#rpm –ivh perl-Authen-SASL-2.03-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-ldap-0.2701-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-Convert-ASN1-0.16-2.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-Net-SSLeay-1.22-1.rh.8.0.um.1.i386.rpm
#rpm –ivh perl-IO-Socket-SSL-0.92-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-Parse-RecDescent-1.80-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-Mail-IMAPClient-2.2.7-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-XML-NamespaceSupport-1.08-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-XML-SAX-0.12-1.rh.8.0.um.1.noarch.rpm
  下面開始編譯安裝libnet和heartbeat
tar -zxvf libnet.tar.gz
cd libnet
./configure
make
make install
tar zxf heartbeat-2.0.8.tar.gz
cd heartbeat-2.0.8
./ConfigureMe configure --disable-swig --disable-snmp-subagent
make
make install
cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
cp ldirectord/ldirectord.cf /etc/ha.d/

1.3 軟件的配置
  Heartbeat軟件的安裝目錄爲/etc/ha.d,其中的README.config對配置文件進行了說明,共有三個主要的配置文件:ha.cf,haresources,authkeys。
  下面依次對三個配置文件進行說明,此外用戶還可以參考Linux-HA附帶的安裝文檔以及配置文件自身的註釋。

1.3.1 配置ha.cf文件
  ha.cf是heartbeat的主要配置文件,可以對heartbeat的多數性能和狀態進行配置。大部分選項的取值可以採用默認值,其中的主要選項及配置方法說明如下:
debugfile /var/log/ha-debug:該文件保存heartbeat的調試信息
logfile /var/log/ha-log:heartbeat的日誌文件
keepalive 2:心跳的時間間隔,默認時間單位爲秒
IXDBA.NET社區論壇
deadtime 30:超出該時間間隔未收到對方節點的心跳,則認爲對方已經死亡。
warntime 10:超出該時間間隔未收到對方節點的心跳,則發出警告並記錄到日誌中。
initdead 120:在某些系統上,系統啓動或重啓之後需要經過一段時間網絡才能正常工作,該選項用於解決這種情況產生的時間間隔。取值至少爲deadtime的兩倍。
udpport 694:設置廣播通信使用的端口,694爲默認使用的端口號。
baud 19200:設置串行通信的波特率。
serial /dev/ttyS0:選擇串行通信設備,用於雙機使用串口線連接的情況。如果雙機使用以太網連接,則應該關閉該選項。
bcast eth0:設置廣播通信所使用的網絡接口卡。
auto_failback on:heartbeat的兩臺主機分別爲主節點和從節點。主節點在正常情況下佔用資源並運行所有的服務,遇到故障時把資  源交給從節點並由從節點運行服務。在該選項設爲on的情況下,一旦主節點恢復運行,則自動獲取資源並取代從節點,否則不取代從節點。
ping ping-node1 ping-node2:指定ping node,ping node並不構成雙機節點,它們僅僅用來測試網絡連接。
respawn hacluster /usr/lib/heartbeat/ipfail:指定與heartbeat一同啓動和關閉的進程,該進程被自動監視,遇到故障則重新啓動。最常用的進程是ipfail,該進程用於檢測和處理網絡故障,需要配合ping語句指定的ping node來檢測網絡連接。

1.3.2 配置haresources文件
haresources文件用於指定雙機系統的主節點、集羣IP、子網掩碼、廣播地址以及啓動的服務等。其配置語句格式如下:
node-name network-config <resource-group>
  其中node-name指定雙機系統的主節點,取值必須匹配ha.cf文件中node選項設置的主機名中的一個,node選項設置的另一個主機名成爲從節點。
  network-config用於網絡設置,包括指定集羣IP、子網掩碼、廣播地址等。resource-group用於設置heartbeat啓動的服務,該服務最終由雙機系統通過集羣IP對外提供。
  下面舉例對配置方法進行說明:
# hello 192.168.8.240 httpd tomcat
  假設ha.cf文件中node選項設置的兩個主機名分別爲hello和web,則根據上述配置,雙機系統的主節點爲hello,從節點爲web。
heartbeat啓動時獲取集羣IP(cluster IP)爲192.168.8.240,該IP成爲heartbeat對外提供服務的網絡地址。此外heartbeat依次啓動服務httpd和tomcat(從左向右的順序)。heartbeat關閉時將依次關閉tomcat和httpd(從右向左的順序),並釋放cluster IP。
  httpd和tomcat分別是apache和tomcat的啓動腳本,heartbeat將從下面目錄中尋找這些啓動腳本:
/etc/ha.d/resource.d
/etc/rc.d/init.d
# hello 192.168.8.240/19 httpd tomcat
  指定cluster IP爲192.168.8.240,並且指定子網掩碼爲255.255.224.0,每個網段內有213個可用IP,默認廣播地址取該網段內的最大可用IP,取值爲192.168.31.255。
  此外,還可以向啓動腳本傳遞argument,語法爲:scriptname::argument
# hello 192.168.8.240/19/eth0/192.168.31.251 httpd tomcat
  指定cluster IP爲192.168.8.240,子網掩碼爲255.255.224.0,使用的網絡接口卡爲eth0,並強制設定廣播地址爲192.168.31.251。
  注意:兩臺主機的haresources文件設置必須完全一致。

1.3.3 配置authkeys文件
  authkeys文件用於heartbeat的鑑權設置,共有三種可用的鑑權方式:crc、md5和sha1。三種方式安全性依次提高,但同時佔用的系統資源也依次擴大。crc安全性最低,適用於物理上比較安全的網絡,sha1提供最爲有效的鑑權方式,佔用的系統資源也最多。
  其配置語句格式如下:
auth <number>
<number> <authmethod> [<authkey>]
  舉例說明:
auth 1
1 sha1 key-for-sha1
  其中鍵值key-for-sha1可以任意指定,number設置必須保證上下一致。

auth 2
2 crc
  crc方式不需要指定鍵值。
  最後,該authkeys文件的文件許可權應該設爲600(即-rw-------),命令爲:
chmod 600 authkeys
  注意:上述三個配置文件設置完畢後,應該複製到/etc/ha.d目錄下。

1.4 運行與測試

1.4.1 啓動heartbeat
  heartbeat安裝完成後,自動在/etc/rc.d/init.d/目錄下生成啓動腳本heartbeat,啓動heartbeat可以使用命令 /etc/rc.d/init.d/heartbeat start
  此外還可以使用stop、restart、reload、status等控制參數。
  heartbeat在生成啓動腳本的同時也爲不同的runlevel創建了啓動腳本的符號連接,從而在切換runlevel的時候自動啓動或關閉heartbeat。
  例如,在/etc/rc.d/rc3.d/目錄下創建了符號連接S75heartbeat,從而在系統進入字符模式(runlevel 3)時自動啓動heartbeat。在/etc/rc.d/rc6.d/目錄下創建了符號連接K05heartbeat,從而在系統重啓(runlevel 6)時自動關閉heartbeat。
  默認情況下,heartbeat的啓動優先級是75,關閉優先級是5。
  可以手動來創建。命令如下:
cd /etc/rc.d/rc0.d ln -s ../init.d/heartbeat K05heartbeat
cd /etc/rc.d/rc3.d ln -s ../init.d/heartbeat S75heartbeat
cd /etc/rc.d/rc5.d ln -s ../init.d/heartbeat S75heartbeat
cd /etc/rc.d/rc6.d ln -s ../init.d/heartbeat K05heartbeat

  下面描述一個簡單的測試方案。系統環境和軟件配置如下:
  兩臺主機的主機名和IP地址分別爲:
hello(192.168.6.7)
web(192.168.6.33)
  則ha.cf文件中的node語句定義如下:
node hello
node web
  haresources文件定義如下:
  hello 192.168.8.240/19/192.168.31.255
  該語句指定雙機系統的主節點爲hello,從節點爲web,集羣IP(cluster IP)爲192.168.8.240,子網掩碼爲255.255.224.0,廣播地址爲192.168.31.255。本測試方案沒有指定heartbeat啓動的服務,僅通過ping命令和telnet命令來檢測雙機系統的可用性。
  任何一臺主機在啓動heartbeat後,可以使用命令 ps aux | grep heartbeat 來查看heartbeat的進程狀態,可以使用ifconfig命令確認當前主機是否已經綁定了cluster IP,此外還可以在/var/log/目錄下查看heartbeat的日誌文件ha-debug、ha-log。如果運行過程中產生了任何異常或錯誤消息,則應該根據上述信息進行檢查和調試。
  測試步驟如下:
  1. 主節點啓動heartbeat
  在主節點hello上調用命令 /etc/rc.d/init.d/heartbeat start 啓動heartbeat。該主機將會自動綁定集羣IP地址,在雙機系統之外的第三臺主機上使用ping命令檢測集羣IP地址192.168.8.240,直至該地址變爲可用(根據硬件和網絡性能的差異,主機綁定集羣IP地址需要等待不同的時間)。
  在主節點hello上使用ifconfig命令查看該主機的網絡配置,顯示主節點已經綁定了集羣IP地址192.168.
  README.config對配置文件進行了說明,共有三個主要的配置文件:ha.cf,haresources,authkeys。
  下面依次對三個配置文件進行說明,此外用戶還可以參考Linux-HA附帶的安裝文檔以及配置文件自身的註釋。

1.3.1 配置ha.cf文件
  ha.cf是heartbeat的主要配置文件,可以對heartbeat的多數性能和狀態進行配置。大部分選項的取值可以採用默認值,其中的主要選項及配置方法說明如下:
debugfile /var/log/ha-debug:該文件保存heartbeat的調試信息
logfile /var/log/ha-log:heartbeat的日誌文件
keepalive 2:心跳的時間間隔,默認時間單位爲秒
deadtime 30:超出該時間間隔未收到對方節點的心跳,則認爲對方已經死亡。
warntime 10:超出該時間間隔未收到對方節點的心跳,則發出警告並記錄到日誌中。
initdead 120:在某些系統上,系統啓動或重啓之後需要經過一段時間網絡才能正常工作,該選項用於解決這種情況產生的時間間隔。取值至少爲deadtime的兩倍。
udpport 694:設置廣播通信使用的端口,694爲默認使用的端口號。
baud 19200:設置串行通信的波特率。
serial /dev/ttyS0:選擇串行通信設備,用於雙機使用串口線連接的情況。如果雙機使用以太網連接,則應該關閉該選項。
bcast eth0:設置廣播通信所使用的網絡接口卡。
auto_failback on:heartbeat的兩臺主機分別爲主節點和從節點。主節點在正常情況下佔用資源並運行所有的服務,遇到故障時把資源交給從節點並由從節點運行服務。在該選項設爲on的情況下,一旦主節點恢復運行,則自動獲取資源並取代從節點,否則不取代從節點。
ping ping-node1 ping-node2:指定ping node,ping node並不構成雙機節點,它們僅僅用來測試網絡連接。
respawn hacluster /usr/lib/heartbeat/ipfail:指定與heartbeat一同啓動和關閉的進程,該進程被自動監視,遇到故障則重新啓動。最常用的進程是ipfail,該進程用於檢測和處理網絡故障,需要配合ping語句指定的ping node來檢測網絡連接。

1.3.2 配置haresources文件
  haresources文件用於指定雙機系統的主節點、集羣IP、子網掩碼、廣播地址以及啓動的服務等。其配置語句格式如下:
node-name network-config <resource-group>
  其中node-name指定雙機系統的主節點,取值必須匹配ha.cf文件中node選項設置的主機名中的一個,node選項設置的另一個主機名成爲從節點。
  network-config用於網絡設置,包括指定集羣IP、子網掩碼、廣播地址等。resource-group用於設置heartbeat啓動的服務,該服務最終由雙機系統通過集羣IP對外提供。
  下面舉例對配置方法進行說明:
# hello 192.168.8.240 httpd tomcat
  假設ha.cf文件中node選項設置的兩個主機名分別爲hello和web,則根據上述配置,雙機系統的主節點爲hello,從節點爲web。
  heartbeat啓動時獲取集羣IP(cluster IP)爲192.168.8.240,該IP成爲heartbeat對外提供服務的網絡地址。此外heartbeat依次啓動服務httpd和tomcat(從左向右的順序)。heartbeat關閉時將依次關閉tomcat和httpd(從右向左的順序),並釋放cluster IP。
  httpd和tomcat分別是apache和tomcat的啓動腳本,heartbeat將從下面目錄中尋找這些啓動腳本:
/etc/ha.d/resource.d
/etc/rc.d/init.d
# hello 192.168.8.240/19 httpd tomcat
  指定cluster IP爲192.168.8.240,並且指定子網掩碼爲255.255.224.0,每個網段內有213個可用IP,默認廣播地址取該網段內的最大可用IP,取值爲192.168.31.255。
  此外,還可以向啓動腳本傳遞argument,語法爲:scriptname::argument
# hello 192.168.8.240/19/eth0/192.168.31.251 httpd tomcat
  指定cluster IP爲192.168.8.240,子網掩碼爲255.255.224.0,使用的網絡接口卡爲eth0,並強制設定廣播地址爲192.168.31.251。
  注意:兩臺主機的haresources文件設置必須完全一致。

1.3.3 配置authkeys文件
  authkeys文件用於heartbeat的鑑權設置,共有三種可用的鑑權方式:crc、md5和sha1。三種方式安全性依次提高,但同時佔用的系統資源也依次擴大。crc安全性最低,適用於物理上比較安全的網絡,sha1提供最爲有效的鑑權方式,佔用的系統資源也最多。
  其配置語句格式如下:
auth <number>
<number> <authmethod> [<authkey>]
  舉例說明:
auth 1
1 sha1 key-for-sha1
  其中鍵值key-for-sha1可以任意指定,number設置必須保證上下一致。
auth 2
2 crc
  crc方式不需要指定鍵值。
  最後,該authkeys文件的文件許可權應該設爲600(即-rw-------),命令爲:
chmod 600 authkeys
  注意:上述三個配置文件設置完畢後,應該複製到/etc/ha.d目錄下。

1.4 運行與測試
1.4.1 啓動heartbeat
  heartbeat安裝完成後,自動在/etc/rc.d/init.d/目錄下生成啓動腳本heartbeat,啓動heartbeat可以使用命令  /etc/rc.d/init.d/heartbeat start
  此外還可以使用stop、restart、reload、status等控制參數。
  heartbeat在生成啓動腳本的同時也爲不同的runlevel創建了啓動腳本的符號連接,從而在切換runlevel的時候自動啓動或關閉heartbeat。
  例如,在/etc/rc.d/rc3.d/目錄下創建了符號連接S75heartbeat,從而在系統進入字符模式(runlevel 3)時自動啓動heartbeat。  在/etc/rc.d/rc6.d/目錄下創建了符號連接K05heartbeat,從而在系統重啓(runlevel 6)時自動關閉heartbeat。
  默認情況下,heartbeat的啓動優先級是75,關閉優先級是5。
  可以手動來創建。命令如下:
cd /etc/rc.d/rc0.d ln -s ../init.d/heartbeat K05heartbeat
cd /etc/rc.d/rc3.d ln -s ../init.d/heartbeat S75heartbeat
cd /etc/rc.d/rc5.d ln -s ../init.d/heartbeat S75heartbeat
cd /etc/rc.d/rc6.d ln -s ../init.d/heartbeat K05heartbeat

1.4.2 測試方案
  下面描述一個簡單的測試方案。系統環境和軟件配置如下:
  兩臺主機的主機名和IP地址分別爲:
hello(192.168.6.7)
web(192.168.6.33)
  則ha.cf文件中的node語句定義如下:
node hello
node web
  haresources文件定義如下:
hello 192.168.8.240/19/192.168.31.255
  該語句指定雙機系統的主節點爲hello,從節點爲web,集羣IP(cluster IP)爲192.168.8.240,子網掩碼爲255.255.224.0,廣播地址爲192.168.31.255。本測試方案沒有指定heartbeat啓動的服務,僅通過ping命令和telnet命令來檢測雙機系統的可用性。
  任何一臺主機在啓動heartbeat後,可以使用命令 ps aux | grep heartbeat 來查看heartbeat的進程狀態,可以使用ifconfig命令確認當前主機是否已經綁定了cluster IP,此外還可以在/var/log/目錄下查看heartbeat的日誌文件ha-debug、ha-log。如果運行過程中產生了任何異常或錯誤消息,則應該根據上述信息進行檢查和調試。
  測試步驟如下:
  1. 主節點啓動heartbeat
  在主節點hello上調用命令 /etc/rc.d/init.d/heartbeat start 啓動heartbeat。該主機將會自動綁定集羣IP地址,在雙機系統之外的第三臺主機上使用ping命令檢測集羣IP地址192.168.8.240,直至該地址變爲可用(根據硬件和網絡性能的差異,主機綁定集羣IP地址需要等待不同的時間)。
  在主節點hello上使用ifconfig命令查看該主機, 的網絡配置,顯示主節點已經綁定了集羣IP地址192.168.8.240。
  在第三臺主機上使用telnet命令登錄集羣IP地址192.168.8.240,輸入主節點hello的用戶名和口令,可以成功登錄hello主機。
  2.從節點啓動heartbeat
  使用相同的命令啓動從節點web的heartbeat。由於在兩臺主機同時啓動heartbeat的情況下,應該由主節點來獲取IP地址並對外提供服務,因而從節點heartbeat的啓動並不對主節點產生影響。最終仍然由主節點hello綁定集羣IP地址,使用telnet命令登錄的也是主節點hello。
  3.  主節點關閉heartbeat
  在主節點hello上調用命令 /etc/rc.d/init.d/heartbeat stop 關閉heartbeat。
  使用ifconfig命令可以發現,主節點hello已經釋放了集羣IP地址192.168.8.240,並由從節點web綁定該IP地址。使用telnet命令登錄的是從節點web。
  在這個過程中,使用ping命令進行不間斷監測,可以發現集羣IP地址192.168.8.240一直處於可通狀態,並沒有產生任何阻塞或延遲,所以,在關閉處於激活狀態的heartbeat的情況下,雙機系統可以實現無縫切換。但是在另外一些情況下,比如網絡故障、主機關機或重啓等,如果該主機的heartbeat處於激活狀態,則不能實現雙機的無縫切換,切換過程需要有一定的延遲,使用ping命令可以發現集羣IP地址暫時無法使用。
  3. 主節點再次啓動heartbeat
  在這種情況下,主節點hello將重新綁定集羣IP地址,從節點web釋放該IP地址,並由主節點對外提供服務。在主節點啓動heartbeat之後,集羣IP地址的釋放和綁定有一定的延遲。雖然有一定的延遲,但是集羣IP地址的釋放和綁定是同步進行的,使用ping命令可以發現集羣IP地址一直處於可通狀態,該過程並不影響雙機系統的可用性。所以該過程仍然是一個無縫切換。

  ubuntu下面安裝heartbeat
sudo apt-get install heartbeat-*
  下列【新】軟件包將被安裝:
  cluster-agents cluster-glue heartbeat heartbeat-dev libcluster-glue libcorosync4 libcurl3 libesmtp5 libheartbeat2
  libheartbeat2-dev libltdl7 libnet1 libopenhpi2 libopenipmi0 libxml2-utils libxslt1.1 openhpid pacemaker

發佈了77 篇原創文章 · 獲贊 5 · 訪問量 38萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章