用Heartbeat配置Linux高可用性集群《一》

←手機掃碼閱讀     火星人 @ 2014-03-03 , reply:0

用Heartbeat配置Linux高可用性集群《一》

用Heartbeat配置Linux高可用性集群《一》



Linux下高可用集群方案很多,本文介紹的是性價比比較高的一種:
使用Heartbeat 2.0配置Linux高可用性集群。     

一、 準備工作
   你首先需要兩台電腦,這兩台電腦並不需要有相同的硬體(或者內存大小等),但如果相同的話,當某個部件出現故障時會容易處理得多。接下來您需要決定如何部署。你的集群是通過Heartbeat軟體產生在兩台電腦之間心跳信號來建立的。為了傳輸心跳信號,需要在節點之間存在一條或多條介質通路(串口線通過modem電線,乙太網通過交叉線,等等)。 現在可以開始配置硬體了。既然想要獲得高可用性(HA),那麼您很可能希望避免單點失效。在本例中,可能是您的nullmodem線/串口,或者網卡(NIC)/ 交叉線。因此便需要決定是否希望為每個節點添加第二條串口nullmodem連線或者第二條NIC/交叉線連接。我使用一個串口和一塊額外的網卡來作為heartbeat的通路,這是因為我只有一條nullmodem線和一塊多餘的網卡,並且認為有兩種介質類型傳輸heartbeat信號比較好。硬體配置完成之後,便需要安裝操作系統以及配置網路(我在本文中使用的是RedHat)。假設您有兩塊網卡,那麼有一塊應該配置用於常規網路用途,另一塊作為集群節點之間的專用網路連接(通過交叉線)。例如,假設集群節點有如表-1下的IP地址:
    表-1集群節點的IP地址



  輸入如下命令檢查您的配置:
    ifconfig
    這將顯示您的網卡及其配置。也可以使用命令「netstat ?nr」來獲得網路路由信息。 如果一切正常,接下來要確定可以來兩個節點之間通過所有介面ping通對方。 如果使用了串口,便需要檢測其連接情況。把一個節點作為接收者,輸入命令:
    cat </dev/ttyS0
    在另一個節點上,輸入:
    echo hello >/dev/ttyS0
    應該可以在接收節點上看到該文本。如果正常的話交換這兩個節點的角色再作一次,否則有可能是使用了錯誤的設備文件。現在就開始動手搭建和配置一個簡單的高性能計算集群系統。關閉不需要的服務:/sbin/chkconfig acpid off

•/sbin/chkconfig anacron off

•/sbin/chkconfig apmd off

•/sbin/chkconfig auditd off

•/sbin/chkconfig autofs off

•/sbin/chkconfig bluetooth off

•/sbin/chkconfig cpuspeed off

•/sbin/chkconfig cups off

•/sbin/chkconfig gpm off

•/sbin/chkconfig haldaemon off

•/sbin/chkconfig iptables off

•/sbin/chkconfig isdn off

•/sbin/chkconfig kudzu off

•/sbin/chkconfig mDNSResponder off

•/sbin/chkconfig mdmonitor off

•/sbin/chkconfig messagebus off

•/sbin/chkconfig netfs off

•/sbin/chkconfig nfslock off

•/sbin/chkconfig nifd off

•/sbin/chkconfig pcmcia off

•/sbin/chkconfig portmap off

•/sbin/chkconfig rhnsd off

•/sbin/chkconfig rpcgssd off

•/sbin/chkconfig rpcidmapd off

•/sbin/chkconfig sendmail off

•/sbin/chkconfig xfs off複製代碼初始方案是使用兩台PC(系統的具體結構如圖-1所示),CPU為Pentium D 805,內存為 512MB,用1000Mbps交換機連接,整個硬體環境可以說是再普通不過了。操作系統採用的是Red Hat Enterprise Linux 5.0,該方法對於紅旗Linux、Fedora Linux和SuSE等發布版本均可實現。



圖-1系統的物理結構    參考文獻:Achieving High Availability in Linux-based Cluster Environments
    http://www.dell.com/downloads/global/power/ps3q06-20060219-Guinn-OE.pdf

二、下載安裝軟體包
    接下來便可以安裝Heartbeat軟體。可以從如下位置得到:http://linux-ha.org/downloadHeartbeat軟體包。在網站上也有RPM安裝包,您也可以選擇從源代碼編譯。取得源代碼tar文件或者安裝sourceRPM包,將其解包到某個文件夾。在源代碼樹的頂端,輸入"./ConfigureMe configure", 之後輸入"make"和"makeinstall"。
    如果使用RPM安裝包的話需要包括如下軟體包: ipfail,Stonith,Ldirectord。

    ipfail的功能直接包含在heartbeat裡面,是一個能夠在探知服務IP失效了便立即將服務IP抓取來用的功能。

    Stonith是為了要在任何server停止時,確保剩下的server不會被正在運作的server所影響,
    可以選擇性強制停止一些    server的解決方案。可能會使用在例如共享數據的情況之下。

    Ldirector是一個負載平衡的伺服器。
    安裝命令:
#rpm -ivh heartbeat-pils-*.rpm

•#rpm -ivh hearbeat-stonith-*.rpm

•#rpm -ivh hearbeat-*i386.rpm
複製代碼也可以使用yum命令在線安裝,這樣做不需要考慮依賴包所帶來的麻煩。命令:
    yum install heartbeat

1、 配置主伺服器的heartbeat   在啟用Heartbeat之前,安裝后要配置三個文件(如沒有可手動建立):ha.cf、haresources、authkeys。這三個配置文件需要在/etc/ha.d目錄下面,但是默認是沒有這三個文件的,可以到官網上下這三個文件,也可以在源碼包里找這三個文件,在源碼目錄下的DOC子目錄里。
    1 配置ha.cf
    第一個是ha.cf該文件位於在安裝后創建的/etc/ha.d目錄中。該文件中包括為Heartbeat使用何種介質通路和如何配置他們的信息。在源代碼目錄中的ha.cf文件包含了您可以使用的全部選項,詳述如下:
    serial /dev/ttyS0
    使用串口heartbeat-如果不使用串口heartbeat,則必須使用其他的介質,如bcast(乙太網)heartbeat。用適當的設備文件代替/dev/ttyS0。
    watchdog /dev/watchdog
   該選項是可選配置。通過Watchdog功能可以獲得提供最少功能的系統,該系統不提供heartbeat,可以在持續一份鐘的不正常狀態后重新啟動。該功能有助於避免一台機器在被認定已經死亡之後恢復heartbeat的情況。如果這種情況發生並且磁碟掛載因故障而遷移(failover),便有可能有兩個節點同時掛載一塊磁碟。如果要使用這項功能,則除了這行之外,也需要載入「softdog」內核模塊,並創建相應的設備文件。方法是使用命令「insmod softdog」載入模塊。然後輸入「grep misc/proc/devices」並記住得到的數字(應該是10)。然後輸入」cat /proc/misc | grepwatchdog」並記住輸出的數字(應該是130)。根據以上得到的信息可以創建設備文件,「mknod /dev/watchdog c 10130」。
    bcast eth1
    表示在eth1介面上使用廣播heartbeat(將eth1替換為eth0,eth2,或者您使用的任何介面)。
    keepalive 2
    設定heartbeat之間的時間間隔為2秒。
    warntime 10
    在日誌中發出「late heartbeat「警告之前等待的時間,單位為秒。
    deadtime 30
    在30秒后宣布節點死亡。
    initdead 120
    在某些配置下,重啟后網路需要一些時間才能正常工作。這個單獨的」deadtime」選項可以處理這種情況。它的取值至少應該為通常deadtime的兩倍。
    baud 19200
    波特率,串口通信的速度。
    udp port 694
    使用埠694進行bcast和ucast通信。這是默認的,並且在IANA官方註冊的埠號。
    auto_failback on
   該選項是必須配置的。對於那些熟悉Tru64 Unix的人來說,heartbeat的工作方式類似於「favoredmember「模式。在failover之前,haresources文件中列出的主節點掌握所有的資源,之後從節點接管這些資源。當auto_failback設置為on時,一旦主節點重新恢復聯機,將從從節點取回所有資源。若該選項設置為off,主節點便不能重新獲得資源。該選項與廢棄的nice_failback選項類似。如果要從一個nice_failback設置為off的集群升級到這個或更新的版本,需要特別注意一些事項以防止flash cut。請參閱FAQ中關於如何處理這類情況的章節。
    node primary.mydomain.com
    該選項是必須配置的。集群中機器的主機名,與「uname ?n」的輸出相同。
    node backup.mydomain.com
    該選項是必須配置的。同上。
    respawn <userid> <cmd>
    該選項是可選配置的:列出將要執行和監控的命令。例如:要執行ccm守護進程,則要添加如下的內容:
    respawn hacluster /usr/lib/heartbeat/ccm
    使得Heartbeat以userid(在本例中為hacluster)的身份來執行該進程並監視該進程的執行情況,如果其死亡便重啟之。對於ipfail,則應該是:
    respawn hacluster /usr/lib/heartbeat/ipfail
    注意:如果結束進程的退出代碼為100,則不會重啟該進程。

    2 配置haresources
   配置好ha.cf文件之後,便是haresources文件。該文件列出集群所提供的服務以及服務的默認所有者。注意:兩個集群節點上的該文件必須相同。集群的IP地址是該選項是必須配置的,不能在haresources文件以外配置該地址,haresources文件用於指定雙機系統的主節點、集群IP、子網掩碼、廣播地址以及啟動的服務等。其配置語句格式如下:
   node-name network-config <resource-group>
    其中node-name指定雙機系統的主節點,取值必須匹配ha.cf文件中node選項設置的主機名中的一個,node選項設置的另一個主機名成為從節點。network-config用於網路設置,包括指定集群IP、子網掩碼、廣播地址等。resource-group用於設置heartbeat啟動的服務,該服務最終由雙機系統通過集群IP對外提供。在本文中我們假設要配置的HA服務為Apache和Samba。
    在haresources文件中需要如下內容:
    primary.mydomain.com 192.168.85.3 httpd smb
   該行指定在啟動時,節點linuxha1得到IP地址192.168.85.3,並啟動Apache和Samba。在停止時,Heartbeat將首先停止smb,然後停止Apache,最後釋放IP地址192.168.85.3。這裡假設命令「uname?n」的輸出為「primary.mydomain.com」-如果輸出為「primary」,便應使用「primary」。
    正確配置好haresources文件之後,將ha.cf和haresource拷貝到/etc/ha.d目錄。

    3 配置Authkeys
    需要配置的第三個文件authkeys決定了您的認證密鑰。共有三種認證方式:crc,md5,和sha1。您可能會問:「我應該用哪個方法呢?」簡而言之: 如果您的Heartbeat運行於安全網路之上,如本例中的交叉線,可以使用crc,從資源的角度來看,這是代價最低的方法。如果網路並不安全,但您也希望降低CPU使用,則使用md5。最後,如果您想得到最好的認證,而不考慮CPU使用情況,則使用sha1,它在三者之中最難破解。
    文件格式如下:
    auth <number>
    <number> <authmethod> [<authkey>]
    因此,對於sha1,示例的/etc/ha.d/authkeys可能是
    auth 1
    1 sha1 key-for-sha1-any-text-you-want
    對於md5,只要將上面內容中的sha1換成md5就可以了。 對於crc,可作如下配置:
    auth 2
    2 crc
    不論您在關鍵字auth後面指定的是什麼索引值,在後面必須要作為鍵值再次出現。如果您指定「auth 4」,則在後面一定要有一行的內容為「4 <signaturetype>」。
    確保該文件的訪問許可權是安全的,如600。

    4.  配置備份伺服器的heartbeat
    依次安裝主伺服器上的rpm軟體包到備份伺服器的heartbeat。然後使用ssh命令把主伺服器配置文件傳輸到備份伺服器。
    #scp -r /etc/ha.d backupnode:/etc/ha.d
    Backupnode是備份伺服器的ip地址。
   5、設置主伺服器和備份伺服器時間同步
    雖然Heartbeat不要求在兩個伺服器上使系統鍾同步主要和備份伺服器,但是系統時鐘應該在的幾十秒之內,否則在高可用**的環境下會產生故障。在在兩個系統啟動Heartbeat之前,你應該人工檢查並且放置系統時間(使用date命令)。關於一種更好的長期的解決的方法你應該在兩個系統上使用NTP軟體同步鍾。     
6、啟動主伺服器的Heartbeat

    在啟動主伺服器的Heartbeat,使用命令:
    #/etc/init.d/heartbeat start
    或者
    #service heartbeat start
    可以使用命令查看日誌文件:
    #tail -f /var/log/messages
    此時會發現出現如下信息:
    primary.mydomain.com heartbeat: WARN: node backup.mydomain.com: is dead
    表示備份伺服器死機的警告,原因是備份伺服器的Heartbeat還沒有啟動。
    主伺服器的web服務應該被heartbeat啟動,同時heartbeat為主節點設置IP地址192.168.100.10。使用ifconfig eth0:0可以看到如下信息:eth0:0 Link encap:Ethernet HWaddr 00:0C:298:FD:EB

•inet addr:192.168.100.10 Bcast:192.168.100.15 Mask:255.255.255.240

•UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

•RX packets:14970 errors:0 dropped:0 overruns:0 frame:0

•TX packets:14977 errors:0 dropped:0 overruns:0 carrier:0

•collisions:0 txqueuelen:100

•RX bytes:3624073 (3.4 Mb) TX bytes:3626223 (3.4 Mb)•Interrupt:19 Base address:0x10a0
複製代碼同時/dev/sdb1,應該被掛接。使用df -h,可以看到的信息包含下面的行:
    /dev/sdb1 485M 8.1M 452M 2% /ha

7、 啟動備份伺服器的Heartbeat    啟動主伺服器的Heartbeat,使用命令:
    #/etc/init.d/heartbeat start
    或者
    #service heartbeat start
    可以使用命令查看日誌文件:
    #tail -f /var/log/messages
    此時會發現出現如下信息:  backup heartbeat: info: No local resources [/usr/lib/heartbeat/
    ResourceManager listkeys backup.mydomain.com]
    backup.mydomain.com heartbeat: info: Resource acquisition completed.表示備份伺服器沒有可以使用的資源,原因是備份伺服器的現在是閑置狀態,它只監聽主伺服器心跳,直到主伺服器失效。
    8、 查看主伺服器日誌信息
    可以使用命令查看日誌文件:
    #tail -f /var/log/messages
    此時會發現出現如下信息:primary heartbeat: info: Heartbeat restart on node backup.mydomain.com

•primary heartbeat: info: Link backup.mydomain.com:eth2 up.

•primary heartbeat: info: Node backup.mydomain.com: status up

•primary heartbeat: info: Running /etc/ha.d/rc.d/status status

•primary heartbeat: info: Running /etc/ha.d/rc.d/ifstat ifstat

•primary heartbeat: info: Node backup.mydomain.com: status active•primary heartbeat: info: Running /etc/ha.d/rc.d/status status
複製代碼可以使用tcpdump命令查看心跳廣播是否到達兩個伺服器節點。
    #tcpdump -i all -n -p udp port 694


9、 停止主伺服器的Heartbeat
    停止主伺服器的Heartbeat,使用命令:
    #/etc/init.d/heartbeat stop
   或者
     #service heartbeat stop
    此時可以使用命令查看備份伺服器日誌文件:
    #tail -f /var/log/messages
    此時會發現出現如下信息:backup.mydomain.com heartbeat: WARN: node primary.mydomain.com: is dead

•backup.mydomain.com heartbeat: info: Link primary.mydomain.com:eth1dead.

•backup.mydomain.com heartbeat: info: Running /etc/ha.d/rc.d/status status

•backup.mydomain.com heartbeat: info: Running /etc/ha.d/rc.d/ifstat ifstat

•backup.mydomain.com heartbeat: info: Taking over resource group test

•*** /etc/ha.d/resource.d/test called with status

•backup.mydomain.com heartbeat: info: Acquiring resource group:

•primary.mydomain.

•com test

•backup.mydomain.com heartbeat: info: Running /etc/ha.d/resource.d/test start

•*** /etc/ha.d/resource.d/test called with start

•backup.mydomain.com heartbeat: info: mach_down takeover complete.複製代碼在這個過程中,使用ping命令進行不間斷監測,可以發現集群IP地址一直處於可通狀態,並沒有產生任何阻塞或延遲,所以,在關閉處於激活狀態的heartbeat的情況下,雙機系統可以實現無縫切換。但是在另外一些情況下,比如網路故障、主機關機或重啟等,如果該主機的heartbeat處於激活狀態,則不能實現雙機的無縫切換,切換過程需要有一定的延遲,使用ping命令可以發現集群IP地址暫時無法使用。




[火星人 ] 用Heartbeat配置Linux高可用性集群《一》已經有604次圍觀

http://coctec.com/docs/service/show-post-1789.html