Linux HA

       Linux-HA 入門指南(引用)        

       分類:            大雜燴3296人閱讀評論(0)收藏舉報

目錄(?)[+]

引言

首先,本文中的大部分內容並非原創。撰寫本文的目的只是以某種方式作出貢獻。我所作的工作只是將Linux-HA的其他文檔中(如Volker Wiegand的硬件安裝指南)的部分編輯成一份文檔,這份文檔可以幫助初學者瞭解Linux-HA, 而不需麻煩Alan Robertson, 並且避免在郵件列表上出現重複的問題。

開始

你首先需要兩臺電腦,這兩臺電腦並不需要有相同的硬件(或者內存大小等),但如果相同的話,當某個部件出現故障時會容易處理得多。

接下來您需要決定如何部署。你的集羣是通過Heartbeat 軟件產生在兩臺電腦之間心跳信號來建立的。爲了傳輸心跳信號,需要在節點之間存在一條或多條介質通路(串口線通過modem電線,以太網通過交叉線,等等)。

現在可以開始配置硬件了。既然想要獲得高可用性(HA),那麼您很可能希望避免單點失效。在本例中,可能是您的null modem線/串口,或者網卡(NIC)/ 交叉線。因此便需要決定是否希望爲每個節點添加第二條串口null modem連線或者第二條NIC/交叉線連接。製作Cat-5交叉線的方法可參照附錄A。我使用一個串口和一塊額外的網卡來作爲heartbeat的通路,這是因爲我只有一條null modem線和一塊多餘的網卡,並且認爲有兩種介質類型傳輸heartbeat信號比較好。

硬件配置完成之後,便需要安裝操作系統以及配置網絡(我在本文中使用的是RedHat)。假設您有兩塊網卡,那麼有一塊應該配置用於常規網絡用途,另一塊作爲集羣節點之間的專用網絡連接(通過交叉線)。例如,假設集羣有如下的IP地址:

節點 1 (linuxha1)

192.168.85.1 (常規的 192x 網絡)


10.0.0.1 (heartbeat 專用的 10x 網絡)

節點 2 (linuxha2)

192.168.85.2 (192x)


10.0.0.2 (10x)

注意:以上地址都不能是您的“集羣地址”-即節點間由heartbeat和Failed over控制的地址。

在大多數*nix系統中,以上步驟在安裝過程中都比較容易完成。然而,如果您遇到了任何問題,可以參照Ethernet HOWTO,或者您的發行版的相關文檔。輸入如下命令檢查您的配置:

ifconfig 

這將顯示您的網卡及其配置。也可以使用命令“netstat –nr”來獲得網絡路由信息。

如果一切正常,接下來要確定可以來兩個節點之間通過所有接口ping通對方。

如果使用了串口,便需要檢測其連接情況。把一個節點作爲接收者,輸入命令:

cat </dev/ttyS0 

在另一個節點上,輸入:

echo hello >/dev/ttyS0 

應該可以在接收節點上看到該文本。如果正常的話交換這兩個節點的角色再作一次,否則有可能是使用了錯誤的設備文件。關於解決串口連接問題的兩個比較好的參考文獻是Volker的HA Hardware Guide和Serial HOWTO。

安裝Heartbeat

接下來便可以安裝Heartbeat軟件。當你閱讀本文檔的時候可能已經有了這個軟件,如果沒有的話可以從如下位置得到: http://linux-ha.org/download

在網站上也有RPM安裝包,您也可以選擇從源代碼編譯。取得源代碼tar文件或者安裝source RPM包,將其解包到某個文件夾。在源代碼樹的頂端,輸入"./ConfigureMe configure", 之後輸入"make"和"make install"。如果您在安裝網站上發佈的RPM包時遇到了問題,並想要創建自己的RPM包,FAQ中的信息會對您有所幫助。

配置Heartbeat

配置ha.cf

在啓用Heartbeat之前,需要配置三個文件。第一個是ha.cf,該文件位於在安裝後創建的/etc/ha.d目錄中。該文件中包括爲Heartbeat使用何種介質通路和如何配置他們的信息。在源代碼目錄中的ha.cf文件包含了您可以使用的全部選項,詳述如下:

serial /dev/ttyS0 

使用串口heartbeat-如果不使用串口heartbeat,則必須使用其他的介質,如bcast(以太網)heartbeat。用適當的設備文件代替/dev/ttyS0。

watchdog /dev/watchdog 

可選。通過Watchdog 功能可以獲得提供最少功能的系統,該系統不提供heartbeat,可以在持續一份鐘的不正常狀態後重新啓動。該功能有助於避免一臺機器在被認定已經死亡之後恢復heartbeat的情況。如果這種情況發生並且磁盤掛載因故障而遷移(fail over),便有可能有兩個節點同時掛載一塊磁盤。如果要使用這項功能,則除了這行之外,也需要加載“softdog”內核模塊,並創建相應的設備文件。方法是使用命令“insmod softdog”加載模塊。然後輸入“grep misc /proc/devices”並記住得到的數字(應該是10)。然後輸入”cat /proc/misc | grep watchdog”並記住輸出的數字(應該是130)。根據以上得到的信息可以創建設備文件,“mknod /dev/watchdog c 10 130”。

bcast eth1 

表示在eth1接口上使用廣播heartbeat(將eth1替換爲eth0,eth2,或者您使用的任何接口)。

keepalive 2 

設定heartbeat之間的時間間隔爲2秒。

warntime 10 

在日誌中發出“late heartbeat“警告之前等待的時間,單位爲秒。

deadtime 30 

在30秒後宣佈節點死亡。

initdead 120 

在某些配置下,重啓後網絡需要一些時間才能正常工作。這個單獨的”deadtime”選項可以處理這種情況。它的取值至少應該爲通常deadtime的兩倍。

baud 19200 

波特率,串口通信的速度。

udpport 694 

使用端口694進行bcast和ucast通信。這是默認的,並且在IANA官方註冊的端口號。

auto_failback on 

必須的。對於那些熟悉Tru64 Unix的人來說,heartbeat的工作方式類似於“favored member“模式。在failover之前,haresources文件中列出的主節點掌握所有的資源,之後從節點接管這些資源。當auto_failback設置爲on時,一旦主節點重新恢復聯機,將從從節點取回所有資源。若該選項設置爲off,主節點便不能重新獲得資源。該選項與廢棄的nice_failback選項類似。如果要從一個nice_failback設置爲off的集羣升級到這個或更新的版本,需要特別注意一些事項以防止flash cut。請參閱FAQ中關於如何處理這類情況的章節。

node linuxha1.linux-ha.org 

必須的。集羣中機器的主機名,與“uname –n”的輸出相同。

node linuxha2.linux-ha.org 

必須的。同上。

respawn <userid> <cmd> 

可選的:列出將要執行和監控的命令。例如:要執行ccm守護進程,則要添加如下的內容:

respawn hacluster /usr/lib/heartbeat/ccm 

使得Heartbeat以userid(在本例中爲hacluster)的身份來執行該進程並監視該進程的執行情況,如果其死亡便重啓之。對於ipfail,則應該是:

respawn hacluster /usr/lib/heartbeat/ipfail 

注意:如果結束進程的退出代碼爲100,則不會重啓該進程。

ping ping1.linux-ha.org ping2.linux-ha.org .... 

可選:列出ping節點。這些節點不是集羣節點。他們是用來爲ipfail等模塊檢查網絡連接情況的。

ping_group <name> ping1.linux-ha.org ping2.linux-ha.org ....  

可選:指定一個ping節點組。與ping節點類似,但只要節點組中的任何一個節點可用,便認爲該節點組可用。組的名字可以是任意字符串,用來唯一標識該組。每個組必須出現在單獨的行上。與ping節點類似,節點組也不是集羣節點。他們與ping節點的功能相同,也是用來檢查網絡連接情況的。

配置haresources

配置好ha.cf文件之後,便是haresources文件。該文件列出集羣所提供的服務以及服務的默認所有者。 注意:兩個集羣節點上的該文件必須相同,否則BadThingsWillHappen

在本文中我們假設要配置的HA服務爲Apache和Samba。集羣的IP地址是必須的,並一定不能在haresources文件以外配置該地址!在haresources文件中需要如下內容:

linuxha1.linux-ha.org 192.168.85.3 httpd smb 

該行指定在啓動時,節點linuxha1得到IP地址192.168.85.3,並啓動Apache和Samba。在停止時,Heartbeat將首先停止smb,然後停止Apache,最後釋放IP地址192.168.85.3。這裏假設命令“uname –n”的輸出爲“linuxha1.linux-ha.org”-如果輸出爲“linuxha1”,便應使用“linuxha1”。

注意:httpd和smb分別是Apache和Samba的啓動腳本。Heartbeat會在以下路徑中尋找有相同名字的啓動腳本:

/etc/ha.d/resource.d  
/etc/init.d

這些腳本必須通過<scriptname> start來啓動服務,以及<scriptname> stop來停止服務。您可以使用任何符合這個標準的腳本來作爲服務。

若要向教本傳遞參數,則格式應該爲: <scriptname>::<argument> 因此若我們添加了一個服務“maid”,他需要參數“vacuum”,則haresources文件中的該行需要修改爲:

linuxha1 192.168.85.3 httpd smb maid::vacuum 

這種方式爲我們將IP地址作爲服務提供了靈活性。在上面我們用的其實是簡化的符號。該行實際應該是(省略了maid服務):

linuxha1 IPaddr::192.168.85.3 httpd smb 

這裏IPaddr是服務腳本的名字,其參數爲192.168.85.3。當然,您可以在目錄/etc/ha.d/resource.d中找到名爲IPaddr的腳本。該腳本也允許您操作IP服務的子網掩碼,廣播地址和基本接口等參數。要指定有32個地址的子網,您可以定義該服務爲(不顯式指定IPaddr因爲這樣不會有問題):

linuxha1 192.168.85.3/27 httpd smb 

這裏指定IP地址爲192.168.85.3,子網掩碼爲255.255.255.224,廣播地址將取默認值爲192.168.85.31(即該子網上的最高地址)。您可以指定的最後一個參數爲廣播地址。若要以192.168.85.16覆蓋默認的廣播地址,可以這樣寫:

linuxha1 192.168.85.3/27/192.168.85.16 httpd smb 

您可能想要知道是否需要指定上面的某個參數,這要視情況而定。如果您已經爲服務的IP地址建立了一條合適的路由(獨立於Heartbeat),並設置了正確的子網掩碼和廣播地址,那麼您便不需要。然而情況並不總是這樣的,這便是這些選項存在的原因。另外,您可能有不止一個網絡接口用於IP服務。下面將會講述Heartbeat如何處理這種情況…

正確配置好haresources文件之後,將ha.cfharesource拷貝到/etc/ha.d目錄,接下來便可以啓動heartbeat了!

配置ipfail

ipfail插件的用途是檢測網絡故障,並作出合理的反應,如果需要的話使集羣資源failover。爲了實現這樣的功能ipfail使用ping節點或者ping節點組,這些節點在集羣中作爲“啞”節點出現。如果HA節點間可以相互通信ipfail便可以可靠地檢測到其中一個網絡連接失效的情況,並作出補救。

配置ipfail的步驟如下:

  • 1.選擇好的候選ping節點。

    • 這步很重要。你的選擇越好,則得到的HA集羣便越強壯。選擇固定的交換機路由器等是一個好主意。不要選擇HA集羣中的任一個成員,也不要選擇其他人的工作站。選擇能反映您HA節點的連接狀況的ping節點也很重要。如果您要監視兩個接口的連接情況,明智的做法是爲每個接口選擇一個只對該接口可用的ping節點。ipfail-diagram.pdf文件中有對這個思想圖形化的描述。

    2.設置auto_failback爲on或者off。

    • 只有當Heartbeat被配置爲非legacy時ipfail纔會起作用。在ha.cf文件中,如下將auto_failback設置爲on或者off:

      • auto_failback on 
        
      或者
      • auto_failback off 
        

    3.配置ha.cf使之啓動ipfail。

    • ha.cf中增加如下一行(假設您在編譯時的PREFIX爲/usr):

      • respawn hacluster /usr/lib/heartbeat/ipfail 
        

    4.向ha.cf中加入ping節點:

    • ping pnode1 pnode2 pnodeN 
      
      將pnode1,pnode2,…pnodeN等替換爲您ping節點的IP地址。

確保向集羣中各個成員的ha.cf中加入以上相同的配置指令。

注意:在使用ping節點之前,最好檢查他們的可用性。如果不能從所有的HA節點上ping通該ping節點,便不能使用它。

選擇一個接口

爲有多個網卡的機器配置haresources文件時,重要的一點是要知道Heartbeat選擇網絡接口的方式是如何影響對於IP服務地址的支持的。畢竟在haresource文件中沒有指定所用的接口。

通過查看路由表,Heartbeat決定使用哪個接口。他嘗試選擇對於該IP地址代價最低的路由。如果發現了多於一條代價最低的路由,選擇發現的第一個路由。對於大多數配置來說,這便意味着默認路由是最後的選擇。

配置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。其實也並不是“any text you want” 都可以,可以使用的字母個數是有限制的。

啓動並測試Heartbeat

RedHat系統上,或者其他使用/etc/init.d啓動腳本文件的系統,在每個節點上執行/etc/init.d/heartbeat會在所有的節點上啓動heartbeat。建議您首先在系統主節點(在本例中是linuxha1)上啓動。

如果希望在系統啓動時運行heartbeat,根據你所用的發行版,需要作不同的配置。您需要在恰當的啓動級別目錄中建立啓動腳本的鏈接,不過RPM版本的軟件會自動完成這些配置。在我的系統上,Heartbeat以默認的優先級(75,即在服務00-74之後,在服務76-99之前)啓動,以默認的優先級(05)停止,並只對運行級 0(停機),6(重啓),3(多用戶-文本界面),5(多用戶-圖形界面)起作用。

可以通過如下命令序列完成以上配置(以root身份):

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

根據我使用Slackware的經驗,Slackware系統上並沒有/etc/rc.d/init.d目錄(也許現在有了),爲了實現如上相同的功能,可在/etc/rc.d/rc.local中加入:

/etc/ha.d/heartbeat start  

***這裏假設您將ha.rc拷貝至/etc/ha.d/heartbeat。如果在您的系統上沒有/etc/rc.d/init.d目錄,並且您也不確定進程如何啓動,便可以使用剛剛提到的rc.local方法。但使用這種方法時您需要自己處理關閉的情況,但筆者不記得如何去做了…

注意:如果您使用了watchdog功能,也需要在啓動時加載其module。可以把以下命令加到/etc/rc.d/rc.sysinit的結尾:

/sbin/insmod softdog  

如果使用的是rc.local,需要把這一行放到啓動Heartbeat命令的前面。

在您啓動了Heartbeat之後,在測試之前查看您的日誌文件(默認位置爲/var/log/ha-log)。如果一切正常,服務持有者(本例中的linuxha1)的日誌應該有類似如下所列內容:

heartbeat: 2003/02/10_13:52:22 info: Neither logfile nor logfacility found. 
heartbeat: 2003/02/10_13:52:22 info: Logging defaulting to /var/log/ha-log
heartbeat: 2003/02/10_13:52:22 info: **************************
heartbeat: 2003/02/10_13:52:22 info: Configuration validated. Starting heartbeat 0.4.9f
heartbeat: 2003/02/10_13:52:22 info: nice_failback is in effect.
heartbeat: 2003/02/10_13:52:22 info: heartbeat: version 0.4.9f
heartbeat: 2003/02/10_13:52:22 info: Heartbeat generation: 17
heartbeat: 2003/02/10_13:52:22 info: Starting serial heartbeat on tty /dev/ttyS0 (19200 baud)
heartbeat: 2003/02/10_13:52:22 info: UDP Broadcast heartbeat started on port 694 (694) interface eth1
heartbeat: 2003/02/10_13:52:23 info: pid 28140 locked in memory.
heartbeat: 2003/02/10_13:52:23 info: pid 28137 locked in memory.
heartbeat: 2003/02/10_13:52:23 info: pid 28139 locked in memory.
heartbeat: 2003/02/10_13:52:23 notice: Using watchdog device: /dev/watchdog
heartbeat: 2003/02/10_13:52:23 info: pid 28141 locked in memory.
heartbeat: 2003/02/10_13:52:23 info: Local status now set to: 'up'
heartbeat: 2003/02/10_13:52:23 info: pid 28138 locked in memory.
heartbeat: 2003/02/10_13:52:23 info: pid 28134 locked in memory.
heartbeat: 2003/02/10_13:52:25 info: Link linuxha1.linux-ha.org:eth1 up.
heartbeat: 2003/02/10_13:53:23 WARN: node linuxha2.linux-ha.org: is dead
heartbeat: 2003/02/10_13:53:23 info: Dead node linuxha2.linux-ha.org held no resources.
heartbeat: 2003/02/10_13:53:23 info: Resources being acquired from linuxha2.linux-ha.org.
heartbeat: 2003/02/10_13:53:23 info: Local status now set to: 'active'
heartbeat: 2003/02/10_13:53:23 info: Running /etc/ha.d/rc.d/status status
heartbeat: 2003/02/10_13:53:23 info: /usr/lib/heartbeat/mach_down: nice_failback: acquiring foreign resources
heartbeat: 2003/02/10_13:53:23 info: mach_down takeover complete.
heartbeat: 2003/02/10_13:53:23 info: mach_down takeover complete for node linuxha2.linux-ha.org.
heartbeat: 2003/02/10_13:53:23 info: Acquiring resource group: linuxha1.linux-ha.org 192.168.85.3 datadisk::drbd0 datadisk::drbd1 mirror
heartbeat: 2003/02/10_13:53:23 info: Running /etc/ha.d/resource.d/IPaddr 192.168.85.3 start
heartbeat: 2003/02/10_13:53:23 info: /sbin/ifconfig eth0:0 192.168.85.3 netmask 255.255.255.0  broadcast 192.168.85.255
heartbeat: 2003/02/10_13:53:23 info: Sending Gratuitous Arp for 192.168.85.3 on eth0:0 [eth0]
heartbeat: 2003/02/10_13:53:23 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff
heartbeat: 2003/02/10_13:53:24 info: Running /etc/ha.d/resource.d/datadisk drbd0 start
heartbeat: 2003/02/10_13:53:24 info: Running /etc/ha.d/resource.d/datadisk drbd1 start
heartbeat: 2003/02/10_13:53:25 info: Running /etc/ha.d/resource.d/mirror  start
heartbeat: 2003/02/10_13:53:25 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff
heartbeat: 2003/02/10_13:53:26 info: Resource acquisition completed.
heartbeat: 2003/02/10_13:53:28 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff
heartbeat: 2003/02/10_13:53:30 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff
heartbeat: 2003/02/10_13:53:32 /usr/lib/heartbeat/send_arp eth0 192.168.85.3 00304823BD48 192.168.85.3 ffffffffffff
heartbeat: 2003/02/10_13:53:33 info: Local Resource acquisition completed. (none)
heartbeat: 2003/02/10_13:53:33 info: local resource transition completed.
heartbeat: 2003/02/10_13:56:30 info: Link linuxha2.linux-ha.org:eth1 up.
heartbeat: 2003/02/10_13:56:30 info: Status update for node linuxha2.linux-ha.org: status up
heartbeat: 2003/02/10_13:56:30 info: Running /etc/ha.d/rc.d/status status
heartbeat: 2003/02/10_13:56:30 info: Status update for node linuxha2.linux-ha.org: status active
heartbeat: 2003/02/10_13:56:30 info: remote resource transition completed.
heartbeat: 2003/02/10_13:56:30 info: Running /etc/ha.d/rc.d/status status
heartbeat: 2003/02/10_13:56:31 info: Link linuxha2.linux-ha.org:/dev/ttyS0 up.

注意:你的日誌可能根據您何時在linuxha2上啓動Heartbeat而有所不同!!!筆者在linuxha2上啓動Heartbeat的時間爲13:56:30。

現在ping您的集羣IP地址(本例中的192.168.85.3)。如果正常,使用ssh登陸到上面並驗證您在linuxha1上。接下來確定指定的服務已經綁定在.3的地址上。將您的網頁瀏覽器指向192.168.85.3來測試Apache。對於Samba,假設您已經配置了名爲“test“的一個share,則映射驅動器”\\192.168.85.3\test“來測試Samba,具體的步驟可參照Samba的文檔。然而,您也可以使用netbios 名參數使得您的Samba share列在集羣名字下面而不是集羣成員的主機名下面!

注意:如果您不能啓用服務的IP地址,並且在ha-log中有類似如下的內容:

SIOCSIFADDR: No such device 
SIOCSIFFLAGS: No such device
SIOCSIFNETMASK: No such device
SIOCSIFBRDADDR: No such device
SIOCSIFFLAGS: No such device
SIOCADDRT: No such device

這意味着您需要在內核中編入IP aliasing支持。在/usr/src/linux/.config文件中查找“CONFIG_IP_ALIAS=y”,如果不存在這項內容將會是“CONFIG_IP_ALIAS is not set”,在這種情況下需要加入IP aliasing支持並重新編譯內核。

如果這些都能正常工作,您便得到了可用性(availability)。現在檢查是否有高可用性(High Availability)。

使linuxha1離線。切斷電源,結束Heartbeat,任何您能想到的方式,但不要將串口和eth1 heartbeat信號線都切斷。如果你那樣做了,則在兩個節點上都會啓動服務,當你重新建立heartbeat連接時會產生混亂。現在ping集羣IP,大概5-10秒鐘之後會再次開始響應。再次遠程登陸並驗證登陸到了linuxha2上。如果這個過程花費了超過30秒,可能是哪裏出了問題。

如果您到了這裏,則可能已經正常工作,但也應該檢查所有的heartbeat。首先檢查串口heartbeat。從用於bcast heartbeat的eth1上拔出交叉線,等待大概10秒鐘,然後查看linuxha2的/var/log/ha-log文件,確保沒有類似這樣的內容:

1999/08/16_12:40:58 node linuxha1.linux-ha.org: is dead  

如果出現了這樣的內容,則您的串口heartbeat沒有正常工作,而從節點已經進行了接管。爲了避免問題出現,在主節點上停止Heartbeat,然後再次運行上面的測試。如果您的日誌正常那麼很好,重新連接交叉線。之後斷開串口連接,等待10秒鐘,再次檢查linuxha2的日誌。如果日誌不正常,可以檢查/var/log/ha-log和/var/log/ha-debug以獲得更多線索。

附錄A-製作以太網交叉線

線路圖如下所示

連接器A引腳#

連接器B引腳#

1

3

2

6

3

1

4

2

5

7

6

8

7

4

8

5

(c) 2003 Rudy Pawul rpawul (at) iso-ne (dot) com


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章