Linux高可用性解決方案Heartbeat的安裝與配置

安裝Heartbeat前的準備
Heartbeat集羣必須的硬件
從下圖看出,構建一個Heartbeat集羣系統必須的硬件設備有:

節點服務器;
網絡和網卡;
共享磁盤。
節點服務器
安裝Heartbeat至少需要兩臺主機,並且對主機的要求不高,普通的PC服務器即可滿足要求。當然,也可以在虛擬機上安裝Heartbeat,現在Heartbeat可以很好地運行在Linux系統下,很多Linux發行版本都自帶了Heartbeat套件,同時,還可以運行在FreeBSD和Solaris操作系統上。
網卡和網絡
Heartbeat集羣中的每個主機應有一塊網卡和一個空閒串口。網卡用於連接公用網絡,串口可以通過串口線。例如modem電線來實現連接,用於心跳監控節點間的狀態。如果沒有空閒串口的話,每個主機也可以通過兩塊網卡來實現HA,其中一塊網卡用於連接公用網絡,另一塊網卡通過以太網交叉線與兩個節點相連接。
注意 以太網交叉線和串口電線都能用於心跳監控,串口電線傳輸Heartbeat信號相對較好,如有條件,儘量使用串口線代替以太網交叉線作爲節點間的心跳檢測設備。
Heartbeat支持3種類型的網絡,即公用網絡(public network)、私用網絡(private network)和串行網絡(serial network)。
公用網絡連接多個節點,並且允許客戶端訪問集羣中的服務節點;私用網絡提供兩個節點之間點到點的訪問,但是不允許客戶端訪問,可以通過以太網交叉線構建一個私用網絡,以供節點間相互通信;串行網絡也是一個點到點的連接,一般使用串行網絡來傳輸控制信息和心跳監控。串行網絡可以是一條RS232串口線。
共享磁盤
共享磁盤是一個數據存儲設備,HA集羣中的所有節點都需要連接到這個存儲設備上,在這個共享的存儲設備上一般放置的是公用的、關鍵的數據和程序,一方面可以共享數據給所有節點使用,另一方面也保證了數據的安全性。
Heartbeat支持兩種對共享磁盤的訪問方式:獨佔訪問和共享訪問。在獨佔訪問方式下,保持活動的節點獨立使用磁盤設備,只有當活動節點釋放了磁盤設備,其他節點才能接管磁盤進行使用。在共享訪問方式下,集羣所有節點都可以同時使用磁盤設備。當某個節點出現故障時,其他節點無需接管磁盤。共享訪問方式需要集羣文件系統的支持。
2.操作系統規劃
這裏統一採用Red Hat Enterprise Linux Server release 5.4操作系統。每個節點服務器都有兩塊網卡,一塊用作連接公用網絡,另一塊通過以太網交叉線連接兩個節點,作爲心跳監控。共享磁盤由一個磁盤陣列設備提供,兩個節點共享一個磁盤分區。磁盤分區對應的硬件標識爲/dev/sdb5,掛載點爲/webdata,文件系統類型爲ext3。
網絡以及IP地址規劃如下表所示。

節 點 類 型

IP地址規劃

主 機 名

類型

主用節點

eth0:192.168.60.132

node1

Public IP

eth1:10.1.1.1

priv1

private IP

eth0:0:192.168.60.200

Virtual IP

備用節點

eth0:192.168.60.133

node2

Public IP

eth1:10.1.1.2

priv1

private IP


從上表可知,eth0網絡設備用於連接公用網絡,eth1網絡設備用於連接私用網絡,而eth0:0網絡設備是HA集羣虛擬出來的服務IP地址,用於對外提供應用程序服務。基本的拓撲結構如圖


獲取Heartbeat
Heartbeat到目前爲止發行了三個主版本,即Heartbeat 1.x、Heartbeat 2.x和Heartbeat 3.x。Heartbeat 1.x僅僅允許創建兩個節點的集羣,提供基本的高可用性failover服務。Heartbeat 2.x提供了增強的特性,允許創建多個節點的集羣,又支持模塊結構的配置方法-集羣資源管理器(Cluster Rescource Manager-CRM),CRM可以支持最多16個節點。Heartbeat 3.x大家暫且認爲是Heartbeat 2.x的修訂版。這裏我們選擇Heartbeat 2.0.7版本進行介紹。
Heartbeat的下載地址爲http://linux-ha.org/download/index.html,找到Heartbeat 2.0.7版本,下載類似heartbeat-2.0.8.tar.gz的源代碼包即可。此外在安裝Heartbeat時需要同時安裝Libnet工具包。Libnet是一個高層次的API工具,可以從http://www.packetfactory.net/libnet/下載到,現在的穩定版本是1.1.2.1,下載後的包名爲libnet.tar.gz。
安裝Heartbeat
接下來需要在兩個節點安裝Heartbeat,安裝過程很簡單,只需解壓編譯、安裝即可,這裏不再詳述。在兩個節點執行相同的操作,下面是在node1上的安裝過程:

安裝下列rpm包

#rpm -ivh pam-devel-0.99.6.2-6.el5.x86_64.rpm
# rpm -ivh python-devel-2.4.3-27.el5.x86_64.rpm
# rpm -ivh gcc-4.1.2-46.el5.x86_64.rpm
# rpm -ivh glibc-devel-2.5-42.x86_64.rpm
# rpm -ivh libgomp-4.4.0-6.el5.x86_64.rpm
# rpm -ivh glib-1.2.10-20.el5.x86_64.rpm
# rpm -ivh glib-devel-1.2.10-20.el5.x86_64.rpm
# rpm -ivh glibc-headers-2.5-42.x86_64.rpm
# rpm -ivh glibc-devel-2.5-42.x86_64.rpm
# rpm -ivh libxslt-1.1.17-2.el5_2.2.x86_64.rpm
# rpm -ivh libxslt-devel-1.1.17-2.el5_2.2.x86_64.rpm
# rpm -ivh libxslt-python-1.1.17-2.el5_2.2.x86_64.rpm
# rpm -ivh tkinter-2.4.3-27.el5.x86_64.rpm
# rpm -ivh elfutils-0.137-3.el5.x86_64.rpm
# rpm -ivh lm_sensors-2.10.7-4.el5.x86_64.rpm
# rpm -ivh lm_sensors-devel-2.10.7-4.el5.x86_64.rpm
# rpm -ivh tix-8.4.0-11.fc6.x86_64.rpm
# rpm -ivh tix-devel-8.4.0-11.fc6.x86_64.rpm
# rpm -ivh tix-doc-8.4.0-11.fc6.x86_64.rpm
# rpm -ivh perl-Compress-Zlib-1.42-1.fc6.x86_64.rpm
# rpm -ivh perl-libwww-perl-5.805-1.1.1.noarch.rpm
# rpm -ivh perl-HTML-Tagset-3.10-2.1.1.noarch.rpm
# rpm -ivh perl-XML-NamespaceSupport-1.09-1.2.1.noarch.rpm
# rpm -ivh perl-XML-SAX-0.14-5.noarch.rpm
# rpm -ivh perl-Net-SSLeay-1.30-4.fc6.x86_64.rpm
# rpm -ivh perl-IO-Socket-SSL-1.01-1.fc6.noarch.rpm
# rpm -ivh perl-Digest-SHA1-2.11-1.2.1.x86_64.rpm
# rpm -ivh perl-Digest-HMAC-1.01-15.noarch.rpm
# rpm -ivh glib2-2.12.3-4.el5_3.1.x86_64.rpm
# rpm -ivh glib2-devel-2.12.3-4.el5_3.1.x86_64.rpm
# rpm -ivh bzip2-1.0.3-4.el5_2.x86_64.rpm
# rpm -ivh bzip2-devel-1.0.3-4.el5_2.x86_64.rpm
# rpm -ivh ncurses-5.5-24.20060715.x86_64.rpm
# rpm -ivh ncurses-devel-5.5-24.20060715.x86_64.rpm
# rpm -ivh imake-1.0.2-3.x86_64.rpm
# rpm -ivh autoconf-2.59-12.noarch.rpm
# rpm -ivh flex-2.5.4a-41.fc6.x86_64.rpm
# rpm -ivh beecrypt-4.1.2-10.1.1.x86_64.rpm
# rpm -ivh beecrypt-devel-4.1.2-10.1.1.x86_64.rpm
# rpm -ivh --nodeps elfutils-devel-0.137-3.el5.x86_64.rpm
# rpm -ivh elfutils-devel-static-0.137-3.el5.x86_64.rpm
# rpm -ivh net-snmp-5.3.2.2-7.el5.x86_64.rpm
# rpm -ivh net-snmp-devel-5.3.2.2-7.el5.x86_64.rpm
# rpm -ivh net-snmp-perl-5.3.2.2-7.el5.x86_64.rpm
# rpm -ivh net-snmp-utils-5.3.2.2-7.el5.x86_64.rpm
# rpm -ivh perl-LDAP-0.33-3.fc6.noarch.rpm
# rpm -ivh perl-Authen-SASL-2.15-1.el5.rf.noarch.rpm
# rpm -ivh perl-Mail-IMAPClient-2.2.9-1.2.el5.rf.noarch.rpm
# rpm -ivh perl-Parse-RecDescent-1.94-1.el5.rf.noarch.rpm
# rpm -ivh libnet-1.1.2.1-2.2.el5.rf.x86_64.rpm
#rpm -ivh openssl-0.9.8e-12.el5.i686.rpm
#rpm -ivh wpa_supplicant-0.5.10-8.el5.i386.rpm

創建所需的用戶和組
# groupadd -g 90 haclient
# useradd –g haclient –u 90 –s /bin/false –M hacluster

進行預編譯、設置編譯環境
#cd /root/heartbeat-2.0.7
# ./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/
#groupadd -g 694 haclient
#useradd -u 694 -g haclient hacluster

查看/etc/hosts文件配置

#more /etc/hosts 
192.168.60.132   node1 
192.168.60.133   node2 
10.1.1.1             priv1 
10.1.1.2             priv2

配置主節點Heartbeat

Heartbeat的主要配置文件有ha.cf、haresources和authkeys。在Heartbeat安裝後,默認並沒有這3個文件,可以從官方網站下載得到,也可以直接從解壓的源碼目錄中找到。在上面的安裝過程中,我們已經將這3個文件放到了/etc/ha.d目錄下,下面分別詳細介紹。
主配置文件(/etc/ha.d/ha.cf)
下面對ha.cf文件的每個選項進行詳細介紹,其中"#"號後面的內容是對選項的註釋說明。
#debugfile /var/log/ha-debug   #用於記錄 heartbeat 的調試信息,這裏不開啓
logfile /var/log/ha-log               #指名heartbeat的日誌存放位置。 

logfacility   local0                      #如果未定義上述的日誌文件,那麼日誌信息將送往local0(對應的#/var/log/messages),如果這 3個日誌文件都未定義,那麼 heartbeat 默認情況下將在/var/log 下建立 ha-debug 和 ha-log 來記錄相應的日誌信息。
bcast eth1                                #指明心跳使用以太網廣播方式,並且是在eth1接口上進行廣播。 
keepalive 2  
                             #發送心跳報文的間隔,默認單位爲秒,如果你毫秒爲單位, 那麼需要在後面跟 ms 單位,如 1500ms 即代表 1.5s
deadtime 30
                             #指定若備用節點在30秒內沒有收到主節點的心跳信號,則立即接管主節點的服務資源。 

warntime 10                              #指定心跳延遲的時間爲10秒。當10秒鐘內備份節點不能接收到主節點的心跳信號時,就會往日誌中寫入一個警告日誌,但此時不會切換服務。發出最後的心跳警告信息的間隔。
initdead 120                              #在某些系統上,系統啓動或重啓之後需要經過一段時間網絡才能正常工作,該選項用於解決這種情況產生的時間間隔。取值至少爲deadtime的兩倍。 
udpport 694                              #設置廣播/單播通信使用的端口,694爲默認使用的端口號 

#baud 19200                           #設置串行通信的波特率。這裏不啓用
#serial /dev/ttyS0
                      #選擇串行通信設備,用於雙機使用串口線連接的情況。如果雙機使用以太網連接,則應該關閉該選項。 
#ucast eth0 192.168.60.132       #採用網卡eth0的udp單播來組織心跳,後面跟的
IP地址應爲雙機對方的IP地址。 
#mcast eth0 225.0.0.1 694 1 0
   #採用網卡eth0的Udp組播來組織心跳,如果採用組播通訊,在這裏可以設置組播通訊所使用的接口,綁定的組播 ip 地#址(在 224.0.0.0 - 239.255.255.255 間),通訊端口,ttl(time to live)所能經過路由的跳數,是否允許環回(也就是本地發出的數據包時候還接收)一般在備用節點不止一臺時使用。Bcast、ucast和mcast分別代表廣播、單播和組播,是組織心跳的三種方式,任選其一即可。 
auto_failback off
                        #用來定義當主節點恢復後,是否將服務自動切回。如果不想啓用,請設置爲off,默認爲on。heartbeat的兩臺主機分別爲主節點和備份節點。主節點在正常情況下佔用資源並運行所有的服務,遇到故障時把資源交給備份節點並由備份節點運行服務。在該選項設爲on的情況下,一旦主節點恢復運行,則自動獲取資源並取代備份節點;如果該選項設置爲off,那麼當主節點恢復後,將變爲備份節點,而原來的備份節點成爲主節點。 
#stonith baytech /etc/ha.d/conf/stonith.baytech  #stonith的主要作用是使出現問題的節點從集羣環境中脫離,進而釋放集羣資源,避免兩個節點爭用一個資源的情形發生。保證共享數據的安全性和完整性。 
#watchdog /dev/watchdog
        #該選項是可選配置,是通過Heartbeat來監控系統的運行狀態。使用該特性,需要在內核中載入"softdog" 內核模塊,用來生成實際的設備文件,如果系統中沒有這個內核模塊,就需要指定此模塊,重新編譯內核。編譯完成輸入"insmod softdog"加載該模塊。然後輸入"grep misc /proc/devices"(應爲10),輸入"cat /proc/misc |grep watchdog"(應爲130)。最後,生成設備文件:"mknod /dev/watchdog c 10 130" 。即可使用此功能。 
node node1                               #主節點主機名,可以通過命令"uanme -n"查看。 
node node2                               #備用節點主機名。 
ping 192.168.60.1
                      #選擇ping的節點,ping節點選擇的越好,HA集羣就越強壯,可以選擇固定的路由器作爲ping節點,或者應用服務器但是最好不要選擇集羣中的成員作爲ping節點,ping節點僅僅用來測試網絡連接。如果指定了多個ping節點如

ping 192.168.0.1 192.168.0.2

那麼只有當能ping通所有ping節點時才認爲網絡是連通的,否則則認爲不連通
#ping_group group1 172.16.103.254 172.16.103.212 #ping_group就是同時ping多個ip,只有所有的ip都無法ping通時,ipfail纔會執行切換的動作,保證了不會是因爲被ping的ip出了問題而產生誤切換。注意,ping_group不能和ping同時使用
respawn hacluster /usr/lib/heartbeat/ipfail #該選項是可選配置,意思是以hacluster個用戶身份運行/usr/lib/heartbeat/ipfail這個插件respawn列出與heartbeat一起啓動和關閉的進程,該進程一般是和heartbeat集成的插件,這些進程遇到故障可以自動重新啓動。最常用的進程是ipfail,此進程用於檢測和處理網絡故障,需要配合ping或者ping_group語句,其中指定的ping node來檢測網絡的連通性。在v2版本中,ipfail和crm有衝突,不能同時使用,如果啓用crm的情況下,可以使用pingd插件代替ipfail

apiauth ipfail gid=haclient uid=hacluster  #指定對客戶端 api 的訪問控制,缺省爲不可訪問,這裏指定了有權限訪問ipfail用戶和組。apiauth的語法如下
apiauth apigroupname [uid=uid1,uid2 ...] [gid=gid1,gid2 ...]

示例
apiauth  ping gid=haclient uid=alanr,root

在指定api訪問權限時,可以指定具有訪問權限的組或者用戶,也可以同時指定組和用戶。當進行同時指定時,只要用戶是所指定的組或者用戶中的其中一員即可訪問api庫。

也可以配置api默認用戶組,命令如下

apiauth default  gid=haclient
當配置了默認用戶組時,其他所有api授權命令失效且該用戶組中的成員可以訪問任何api庫

如果不在ha.cf文件指定api庫的訪問權限,則默認的訪問權限如下

service    default apiauth
ipfail uid=hacluster
ccm gid=haclient
ping gid=haclient
cl_status gid=haclient
lha-snmpagent uid=root
crm uid=hacluster

#crm respawn                          #是否開啓Cluster Resource Manager(集羣資源管理)功能這裏不開啓。注意這裏,還可以使用crm on或者crm yes的寫法,有些文檔上說crm on的寫法如果cib.xml文件配置錯誤,會導致heartbeat重啓服務器,這點筆者沒有遇到過,請讀者自行嘗試。意,當使用crm時,默認會自動使用下列命令

apiauth  stonithd uid=root
apiauth  crmd  uid=hacluster
apiauth  cib  uid=hacluster      
respawn hacluster       ccm
respawn hacluster       cib
respawn root            stonithd
respawn root            lrmd
respawn hacluster    crmd

關於上述命令,和ipfail插件命令的意義相同,這裏不再贅述

#autojoin   none                          #該選項作用是將知道集權節點間密鑰的服務器自動加入節點。autojoin有三個選項none,other,any他們各自的意義爲

none:不使用autojoin功能

other:ha.cf文件中列出來的節點應自動加入集羣,沒有列出來的就無法自動加入集羣

any:任何節點都可以自動加入集羣

#hopfudge 1                               #設置串口的心跳信息最少的被轉發次數,默認值爲1

#deadping 30                               #設置的用來ping的節點的死亡時間,當超過該時間時則認爲該節點網絡無法連通,如果該值設置太小將導致系統過快的認爲節點死亡。如果設置過大,則會延誤系統判定時間。
#realtime off                                #允許/禁止實時執行將Heartbeat設置爲高優先級,缺省爲 on
#msgfmt   classic/netstring          #網線中的信息格式,可以是 classic 或 netstring

classic:利用base64庫將二進制值轉換爲string值在網線中傳輸,該選項爲默認選項。

netstring:在網線中直接傳輸二進制值,該選項由於不需要轉換效率更高。
#use_logd yes/no                         #是否使用記錄監控和日誌的功能相似。雖然官方建議開啓該選項,但是處於管理習慣,筆者沒有開啓該選項。
#conn_logd_time 60                     #如果前一個連接失敗了,我們再次連接到記錄監控器的間隔。
#compression bz2                        #配置壓縮模塊它可以爲 zlib 或 bz2,可以通過查看/usr/lib/heartbeat/plugins/HBcompress/目錄下的文件以確定是否有相應的庫。一般在CPU空閒且網絡資源緊張的情況下啓用該選項。
#compression_threshold 2            #配置壓縮的限度這個值決定壓縮一個信息的限度,例如:如果限度爲1,那麼任何大於 1KB 的消息都會被壓縮,缺省爲2 (KB)
資源文件(/etc/ha.d/haresources)
Haresources文件用於指定雙機系統的主節點、集羣IP、子網掩碼、廣播地址以及啓動的服務等集羣資源,文件每一行可以包含一個或多個資源腳本名,資源之間使用空格隔開,參數之間使用兩個冒號隔開,在兩個HA節點上該文件必須完全一致,此文件的一般格式爲:
                  node-name network  <resource-group>
node-name表示主節點的主機名,必須和ha.cf文件中指定的節點名一致。network用於設定集羣的IP地址、子網掩碼和網絡設備標識等。需要注意的是,這裏指定的IP地址就是集羣對外服務的IP地址,resource-group用來指定需要Heartbeat託管的服務,也就是這些服務可以由Heartbeat來啓動和關閉。如果要託管這些服務,就必須將服務寫成可以通過start/stop來啓動和關閉的腳步,然後放到/etc/init.d/或者/etc/ha.d/resource.d/目錄下,Heartbeat會根據腳本的名稱自動去/etc/init.d或者/etc/ha.d/resource.d/目錄下找到相應腳步進行啓動或關閉操作。
下面對配置方法進行具體說明:
node1 IPaddr::192.168.60.200/24/eth0/  Filesystem::/dev/sdb5::/webdata::ext3  httpd cp.sh db2::db2inst1
其中,node1是HA集羣的主節點,IPaddr爲heartbeat自帶的一個執行腳步,Heartbeat首先將執行/etc/ha.d/resource.d/IPaddr 192.168.60.200/24 start的操作,也就是虛擬出一個子網掩碼爲255.255.255.0,IP爲192.168.60.200的地址。此IP爲Heartbeat對外提供服務的網絡地址,同時指定此IP使用的網絡接口爲eth0。接着,Heartbeat將執行共享磁盤分區的掛載操作,"Filesystem::/dev/sdb5::/webdata::ext3"相當於在命令行下執行mount操作,即"mount -t ext3 /dev/sdb5 /webdata",然後啓動httpd,接下列執行cp.sh這個腳本文件之後以db2inst1的身份啓動db2。

其中cp.sh必須放置在/etc/ha.d/resource.d/或/etc/init.d/目錄中,該腳本內容如下

cp /etc/ha.d/db2nodes.cfg /home/db2inst1/sqllib/db2nodes.cfg
注意主節點和備份節點中資源文件haresources要完全一樣。
認證文件(/etc/ha.d/authkeys)
authkeys文件用於設定Heartbeat的認證方式,共有3種可用的認證方式,即crc、md5和sha1。3種認證方式的安全性依次提高,但是佔用的系統資源也依次增加。如果Heartbeat集羣運行在安全的網絡上,可以使用crc方式;如果HA每個節點的硬件配置很高,建議使用sha1,這種認證方式安全級別最高;如果是處於網絡安全和系統資源之間,可以使用md5認證方式。這裏我們使用crc認證方式,設置如下:
auth 1 
1 crc 
#2 sha1 sha1_any_password 
#3 md5 md5_any_password

需要說明的一點是:無論auth後面指定的是什麼數字,在下一行必須作爲關鍵字再次出現,例如指定了"auth 6",下面一定要有一行"6 認證類型"。
最後確保這個文件的權限是600(即-rw-------)。

配置備份節點的Heartbeat
在備份節點上也需要安裝Heartbeat,安裝方式與在主節點安裝過程一樣,這裏不再重述。依次安裝libnet和heartbeat源碼包,安裝完畢,在備份節點上使用scp命令把主節點配置文件傳輸到備份節點。
#scp -r node1:/etc/ha.d/*  /etc/ha.d/
其中,node1是主節點的主機名。
設置主節點和備份節點時間同步
在雙機高可用集羣中,主節點和備份節點的系統時間也非常重要,因爲節點之間的監控都是通過設定時間來實現的。主備節點之間的系統時間相差在10秒以內是正常的,如果節點之間時間相差太大,就有可能造成HA環境的故障。解決時間同步的辦法有兩個:一個辦法是找一個時間服務器,兩個節點通過ntpdate命令定時與時間服務器進行時間校準;另一個辦法是讓集羣中的主節點作爲ntp時間服務器,讓備份節點定時去主節點進行時間校驗。

啓動Heartbeat

在主備節點上執行

#/etc/init.d/heartbeat start

如果需要設置開機啓動Heartbeat服務

#ln -s  /etc/init.d/heartbeat  /etc/rc.d/rc0.d/K05heartbeat 
#ln -s  /etc/init.d/heartbeat  /etc/rc.d/rc3.d/S75heartbeat 
#ln -s  /etc/init.d/heartbeat  /etc/rc.d/rc5.d/S75heartbeat 
#ln -s  /etc/init.d/heartbeat  /etc/rc.d/rc6.d/K05heartbeat

或者

#chkconfig --level 0356 heartbeat on
發佈了10 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章