用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高可用性集群《一》 已經有922 次圍觀
本文地址: http://coctec.com/docs/service/show-post-1789.html