天天看點

Linux 系統下雙機HA的實作

                           ————基于heartbeat方式

實驗環境為兩台虛拟機作為HA主備節點,第三台虛拟機作為用戶端。具體網絡網卡參數配置見拓撲圖。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871207dLEh.jpg"></a>

一、搭建實驗環境

1、設定主節點伺服器主機名為:node1.example.com eth0網卡位址為:192.168.0.43 eth1網卡位址位址為:192.168.10.43

設定備用節點伺服器主機名為:node2.example.com eth0網卡位址為:192.168.0.45 eth1網卡位址為:192.168.10.45

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871209wdEF.jpg"></a>

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871212ykFf.jpg"></a>

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871217iXjR.jpg"></a>

用戶端IP位址為192.168.0.42

2、在主節點伺服器上開啟web服務,并驗證web服務是否可以成功通路。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871220lYX0.jpg"></a>

驗證成功後,關閉web服務。為了試驗的順利進行,這裡将web服務設定為開機不啟動。

關閉httpd服務的目的是為了驗證後面用戶端通路伺服器時,web服務的開啟是受heartbeat控制的,而不是人為開啟的web服務。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871221QHn2.jpg"></a>

在雙機HA功能下,主備節點要通過heartbeat資訊來保持聯系,為了實作主備節點的heartbeat功能,需要安裝額外的軟體包。但是Redhat預設并沒有安裝這些軟體包,這就需要到對應官方網站上去下載下傳對應的軟體包。需要安裝的軟體包有六個,分别是:

libnet-1.1.4-3.el5.i386.rpm

perl-MailTools-1.77-1.el5.noarch.rpm

heartbeat-pils-2.1.4-10.el5.i386.rpm

heartbeat-stonith-2.1.4-10.el5.i386.rpm

heartbeat-gui-2.1.4-10.el5.i386.rpm

heartbeat-ldirectord-2.1.4-10.el5.i386.rpm

heartbeat-devel-2.1.4-10.el5.i386.rpm

heartbeat-2.1.4-10.el5.i386.rpm

安裝上面六個軟體包,會出現依賴關系,提示依賴下面的軟體包(這些包在RedhatCD光牒檔案中),是以為了友善安裝這些軟體包,建議建立本地yum庫,如此以來就可以解決軟體安裝時出現的很多包依賴關系。

perl-Compress-Zlib

perl-HTML-Parser

perl-HTML-Tagset

perl-URI

perl-libwww-perl

perl-MailTools

perl-TimeDate

perl-String-CRC32

net-snmp-libs

把要安裝的軟體包複制到根目錄下。然後通過本地yum庫進行上述軟體包的安裝。由于上述軟體包都是以.rpm結尾的,是以這裡就使用*通配所有軟體包。指令為:

yum –nongpgcheck localinstall *.rpm

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871223eN3Q.jpg"></a>

安裝完成後,再來确認一下安裝了所有的軟體包。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871225NsIW.jpg"></a>

二、 軟體的配置 

Heartbeat軟體的安裝目錄為/etc/ha.d,其中的README.config對配置檔案進行了說明,共有三個主要的配置檔案:ha.cf,haresources,authkeys。切換到/etc/ha.d目錄下,卻發現并沒有這三個主要的配置檔案。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871227pqfH.jpg"></a>

那麼這三個主要的配置檔案在那裡呢?可以切換到/usr/share/doc/heartbeat-2.1.4/目錄下檢視一下是否有這三個主要的配置檔案。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871229yiu7.jpg"></a>

将上述的三個主要的配置檔案複制到/etc/ha.d/目錄下。哈哈,三個主要配置的配置檔案

出來了吧?

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871232iRno.jpg"></a>

下面依次對三個配置檔案進行說明,此外還可以參考Linux-HA附帶的安裝文檔以及配置檔案自身的注釋。

2.1配置authkeys檔案 

authkeys檔案用于heartbeat的鑒權設定,共有三種可用的鑒權方式:crc、md5和sha1。三種方式安全性依次提高,但同時占用的系統資源也依次擴大。crc安全性最低,适用于實體上比較安全的網絡,sha1提供最為有效的鑒權方式,占用的系統資源也最多。

其配置語句格式如下: 

auth &lt;number&gt; 

&lt;number&gt; &lt;authmethod&gt; [&lt;authkey&gt;] 

舉例說明: 

auth 1 

1 sha1 key-for-sha1 

其中鍵值key-for-sha1可以任意指定,number設定必須保證上下一緻。 

auth 2 

2 crc 

crc方式不需要指定鍵值。

還是先來看一下authkeys檔案的内容吧?檔案前面的内容可以直接忽略過去,需要修改的行數并不是很多。主要在最後面。可以看到這四行都預設被注釋掉了。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871233Cf9D.jpg"></a>

修改的方法有很多的,最簡單直接打開注釋就行了,然後儲存退出;也可以使用echo指令将要設定的值導入到該檔案中;或者使用ssl加密并導入到該檔案之中。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871234F68J.jpg"></a>

這裡使用後兩種來驗證一下,打開檔案,可以看到兩種方式都将資料導入到檔案中了。在試驗過程中,為了節省時間,可以選用非加密傳輸方式。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871236S35J.jpg"></a>

為了檔案的安全性,我們要設定該檔案的權限為600,修改完成後,要記得檢視是否修改成功。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871238d8rm.jpg"></a>

2、2配置ha.cf檔案 

ha.cf是heartbeat的主要配置檔案,可以對heartbeat的多數性能和狀态進行配置。大部分選項的取值可以采用預設值,其中的主要選項及配置方法說明如下: 

debugfile /var/log/ha-debug:該檔案儲存heartbeat的調試資訊 

logfile /var/log/ha-log:heartbeat的日志檔案 

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871241tarm.jpg"></a>

keepalive 2:心跳的時間間隔,預設時間機關為秒

deadtime 30:超出該時間間隔未收到對方節點的心跳,則認為對方已經死亡。 

warntime 10:超出該時間間隔未收到對方節點的心跳,則發出警告并記錄到日志中。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871244zEd5.jpg"></a>

initdead 120:在某些系統上,系統啟動或重新開機之後需要經過一段時間網絡才能正常工作,該選項用于解決這種情況産生的時間間隔。取值至少為deadtime的兩倍。 

udpport 694:設定廣播通信使用的端口,694為預設使用的端口号。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871247f7Py.jpg"></a>

bcast eth1:設定廣播通信所使用的網絡接口卡。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871249YNjJ.jpg"></a>

auto_failback on:heartbeat的兩台主機分别為主節點和從節點。主節點在正常情況下占用資源并運作所有的服務,遇到故障時把資源交給從節點并由從節點運作服務。在該選項設為on的情況下,一旦主節點恢複運作,則自動擷取資源并取代從節點,否則不取代從節點。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712512A0t.jpg"></a>

node 定義叢集主機的節點号名稱

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871253nlvE.jpg"></a>

另外還有一些設定,由于對實驗作用不是很大,這裡就不進行配置了。

baud 19200:設定串行通信的波特率。 

serial /dev/ttyS0:選擇串行通信裝置,用于雙機使用序列槽線連接配接的情況。如果雙機使用以太網連接配接,則應該關閉該選項。 

ping ping-node1 ping-node2:指定ping node,ping node并不構成雙機節點,它們僅僅用來測試網絡連接配接。 

respawn hacluster /usr/lib/heartbeat/ipfail:指定與heartbeat一同啟動和關閉的程序,該程序被自動監視,遇到故障則重新啟動。最常用的程序是ipfail,該程序用于檢測和處理網絡故障,需要配合ping語句指定的ping node來檢測網絡連接配接。

2、3 配置haresources檔案 

haresources檔案用于指定雙機系統的主節點、叢集IP、子網路遮罩、廣播位址以及啟動的服務等。其配置語句格式如下: 

node-name network-config &lt;resource-group&gt; 

其中node-name指定雙機系統的主節點,取值必須比對ha.cf檔案中node選項設定的主機名中的一個,node選項設定的另一個主機名成為從節點。 

network-config用于網絡設定,包括指定叢集IP、子網路遮罩、廣播位址等。resource-group用于設定heartbeat啟動的服務,該服務最終由雙機系統通過叢集IP對外提供。

指定主節點伺服器為node1.example.com 對外宣稱的IP位址為192.168.0.140的伺服器提供web服務。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871255HbFu.jpg"></a>

最後,别忘記修改/etc/hosts檔案,保證主備節點伺服器之間知道對方的IP位址,保證彼此可以正常通信。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871258mWkp.jpg"></a>

由于備用節點伺服器的配置和主節點伺服器的配置基本相同,隻有主機名和IP位址不同,這裡就省略配置備節點伺服器的配置步驟了。

三、實驗的驗證

當主備節點都配置完成後,要啟動主備節點的heartbeat服務,然後就可以到用戶端來驗證測試實驗成功與否了。有點激動啊!呵呵^_^,如圖所示,實驗配置是成功的。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871260JQSV.jpg"></a>

再來到主節點伺服器上,檢視一下主節點伺服器IP位址的變化吧!可以發現,對外宣稱的VIP位址綁定在了主節點伺服器上的eth0網卡上。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_1268871265FhIP.jpg"></a>

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712680Ff5.jpg"></a>

此時,假設由于某些意外原因(手動停止主節點伺服器的heartbeat服務),主節點伺服器突然當機了。再來重新整理用戶端的浏覽器,會發現首頁内容變成了備節點伺服器(這裡為了區分用戶端通路的是不同的伺服器,主備節點伺服器的網頁内容不同)。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712701PXp.jpg"></a>

切換來到備節點伺服器上,檢視一下備節點伺服器IP位址的變化可以發現,對外宣稱的VIP位址綁定在了備節點伺服器上的eth0網卡上。

由此就可以說明雙機系統可以實作無縫切換。

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712740O8T.jpg"></a>

主節點再次啟動heartbeat 

在這種情況下,主節點将重新綁定VIP位址,備節點web釋放該IP位址,并由主節點對外提供服務。在主節點啟動heartbeat之後,叢集IP位址的釋放和綁定有一定的延遲。雖然有一定的延遲,但是叢集IP位址的釋放和綁定是同步進行的,使用ping指令可以發現叢集IP位址一直處于可通狀态,該過程并不影響雙機系統的可用性。是以該過程仍然是一個無縫切換。

為了驗證主備節點伺服器之間的連通性,可以使用tcpump –i eth1 udp port 694

<a href="http://linuxtro.blog.51cto.com/attachment/201003/18/1239505_12688712780lTK.jpg"></a>

本文轉自 linuxtro 51CTO部落格,原文連結:http://blog.51cto.com/linuxtro/284869,如需轉載請自行聯系原作者

繼續閱讀