【第154期 July 5, 2010】
 

研發新視界

如何使用heartbeat及mon在OpenSUSE上建立High-availability的環境

作者/陳柏宇

[發表日期:2010/7/5]




簡介

本文將探討在OpenSUSE中使用heartbeat和mon建立高可用度(High-Availability)環境:高可用度的設計可以讓系統容許錯誤的產生,並且根據其設計使得整個系統能繼續提供服務,主要原理乃利用heartbeat監控各個server,配合mon監控各server中的service,使本系統達高可用度的設計,圖一跟圖二分別顯示heartbeat和mon的配置與監控方式。


《圖一》Heartbeat配置圖



《圖二》Server內Mon的監控圖


圖一顯示使用heartbeat監控server1跟server2的運作情形,其中server1為主(master)、server2為副(slave),兩個server的eth0網卡對應到相同的虛擬IP,平常皆是server1開啟server2關閉的狀態,當server1發生無法連線的情形時,server2將會啟動並對應虛擬IP,直到server1回復連線狀態,server2才會關閉將主導權交給server1,其中使用eth1網卡透過heartbeat監測對方的server為開啟或關閉狀態。

圖二顯示mon監視電腦中各個service,並控制heartbeat的啟動或關閉,當server1中mon監視的service中有一個發生問題時,它將會把heartbeat關閉,此時server2的heartbeat將會把該server啟動,直到server1中的service回復正常運作時,server1的mon會把heartbeat啟動,此時server2將會把heartbeat監控的service關閉,並把虛擬ip的控制權交由server1。

安裝注意事項

一、OpenSUSE安裝注意事項

安裝時,記得把軟體裡的kernal development打勾,並確定gcc c++、c和perl complie有安裝。

二、解壓縮安裝檔

解壓縮software.tar.gz到[/tmp]下。



heartbeat配置

一、安裝

1.偵測heartbeat

在command line執行service heartbeat status查看heartbeat是否已安裝。





2.安裝heartbeat

使用OpensSUSE-11.1提供之zypper套件執行/tmp/heartbeat資料夾底下之安裝檔(/tmp/heartbeat/server:ha-clustering.repo),如需最新版本請至官網(請參參考文獻第三點)下載。

使用zypper安裝方式,請在command line輸入以下指令:



二、設定heartbeat

1.環境設定

在兩台SUSE-11.1上都安裝兩張網卡,使用Yast->Network Device->Network settings將ha1和ha2的ip設定為如下位址。

ha1 eth0:192.168.102.129 eth1:10.0.0.1
ha2 eth0:192.168.102.130 eth1:10.0.0.2

2.參數設定

heartbeat的運作主要根據ha.cf、authkeys、haresouces的設定,其中ha.cf設定heartbeat的各種參數,authkeys設定傳遞訊息使用的加密方式,haresources設定server與server之間方享的資源、對應的ip和主從關係,這些設定檔heartbeat本身都有提供範例可在(/usr/share/doc/packages/heartbeat)中找到。

  • 設定hosts(etc/hosts)


  • 執行vi /etc/hosts修改hosts內容,將各server的名稱加入其中,以本系統為例,在hosts檔中加入ha1(192.168.102.129)和ha2(192.168.102.130)。

    /etc/hosts內容:


    設定完成後,重開機。
    重開機完成後在兩台機器commad line中輸入uname –n分別顯示ha1和ha2代表設置成功。

  • 設定ha.cf(etc/ha.d/ha.cf)


  • (1)將(/tmp/heartbeat/etc/ha.cf)複製並貼上到(/etc/ha.d/ha.cf)



    (2)ha.cf各設定值的解釋,Use_logd yes啟動時記得將logd.cf複製貼上到/etc/ha.d底下。



  • 設定authkeys(etc/ha.d下)


  • (1)將(/tmp/heartbeat/etc/authkeys)複製並貼上到(/etc/ha.d/authkeys),並執行chmod 600 /etc/ha.d/authkey變更authkeys執行權限



    (2)authkeys內容格式與範例。




  • 設定haresources(etc/ha.d下)


  • (1)將(/tmp/heartbeat/etc/haresources)複製並貼上到(/etc/ha.d/haresources)



    (2)haresources格式



    虛擬ip的設定,位址的前三碼必需跟eth0一樣,即必需設定為192.168.102.xxx。

  • 測試heartbeat


  • Step 1: 開啟ha2的heartbeat,在server2打入指令service heartbeat start
    Step 2: 打入指令service heartbeat status,查看heartbeat有無開啟完成,發生錯誤時可以使用tail /var/log/messages –f查看錯誤訊息。
    Step 3: 使用瀏覽器查看http://192.168.102.130:8080/測試server2 tomcat有無開啟成功
    Step 4: 使用瀏覽器查看http://192.168.102.55:8080/測試虛擬IP可否連線
    Step 5: 開啟ha1的heartbeat,在server1打入指令service heartbeat start
    Step 6: 打入指令service heartbeat status,查看heartbeat有無開啟完成,發生錯誤時可以使用tail /var/log/messages –f查看錯誤訊息。
    Step 7: 使用瀏覽器查看http://192.168.102.129:8080/ 測試server1 tomcat有無開啟成功
    Step 8: 使用瀏覽器查看http://192.168.102.130:8080/測試server2 tomcat有無斷開連接
    Step 9: 使用瀏覽器查看http://192.168.102.55:8080/測試虛擬IP可否連線

    mon配置

    一、下載與安裝

    安裝mon server前置套件perl client model和Time::Period[6]套件以提供mon server安裝時所需要的模組,然後安裝mon server,如需最新版本請至官網[7]下載,安裝過程如下。

    Step1 : 安裝perl client model (/tmp/mon/mon-client-1.0.2):



    Step2 : 安裝Time::Period (/tmp/mon/period-1.20)



    Step3 : 安裝mon server將mon.tar.gz(/tmp/mon/mon.tar.gz)解壓縮至/usr/lib底下,並執行/usr/lib/mon/mon測試是否安裝完成:


    執行/usr/lib/mon/mon時,如果沒出現錯誤訊息代表安裝完成。

    二、mon.cf (/etc/mon下)參數設定

    1.將(/tmp/mon/etc/mon.cf)複製並貼上到(/etc/mon/mon.cf),然後根據自己主機的設定更改各個參數



    2.更改mon.cf設定自己主機位址hostgroup,以本系統為例,設定如下。



    3.設定mon.cf各種監測的參數,以本系統為例,監測tomcat service設定如下。



    4.設定mon.cf中jtest service各種監測的參數,以本系統為例設定如下。



    三、複製貼上jp.monitor

    jp.monitor是使用shell script撰寫而成的一支monitor程式,其功用即可監控ps底下執行的process,判斷其是否存在,使用它必需將其複製到目錄[/usr/lib/mon/mon.d]底下,以下為複製語法。



    四、建立基本alert

    mon在本系統主要的功用就是監視service,當service停止服務時把heartbeat關閉,當service啟動時把heartbeat開啟,因此需要兩個alert,一個負責把heartbeat關閉(down.alert),一個負責把heartbeat開啟(up.alert)。

    1.ha1的alert

    將down.alert和up.alert複製貼上到自己主機的mon中



    down.alert(/usr/lib/mon/alert.d下)



    up.alert(/usr/lib/mon/alert.d下)



    mon監測到service啟動或關閉狀態時,會在/tmp/up.alert.log或/tmp/down.alert.log中輸入時間,因此除了透過Email查看狀態外,也可透過log檔查看mon的運行狀態,以下為透過tail查看的語法。



    2.ha2的alert

    ha2的up.alert跟down.alert的設定不太一樣,因為ha2的heartbeat必需保持永遠開啟的狀態,因此它的up.alert和down.alert不可執行關閉heartbeat的指令,需將內容修改成如下。

    五、建立mon service

    為了讓主機在開啟時能自動執行mon,並且讓管理者能隨時查看mon的執行狀態,因此我們必需建立mon service以達到這個目的。

    將mon service複製貼上到自己主機的/etc/init.d/中。



    輸入service mon status測試mon service是否載入成功,以下為成功的結果。



    將mon service設為開機自動開啟



    六、測試mon

    使用mon監視tomcat要注意,tomcat開啟時的首頁要有辦法顯示,否則mon會一直認為tomcat為關閉狀態,以下為測試的步驟。

    Step 1 : 開啟heartbeat,執行service heartbeat start
    Step 2 : 使用service heartbeat status,確定heartbeat開啟
    Step 3 : 開啟tomcat,執行service tomcat start
    Step 4 : 使用service tomcat status,確定tomcat開啟
    Step 5 : 開啟mon,執行service mon start
    Step 6 : 使用service mon status,確定mon開啟
    Step 7 : 關閉tomcat,執行service tomcat stop
    Step 8 : 使用tail /tmp/down.alert.log,查看mon有無偵測到tomcat關閉
    Step 9 : 使用service heartbeat status,查看heartbeat是否關閉,使用tail /var/log/messages –f查看log
    Step 10 : 開啟tomcat,執行service tomcat start
    Step 11 : 使用tail /tmp/up.alert.log,查看mon有無偵測到tomcat開啟
    Step 12 : 使用service heartbeat status,查看heartbeat是否開啟,使用tail /var/log/messages –f查看log
    Step 13 : 查看Email

    參考文獻

    一、http:#www.linux-ha.org/DownloadSoftware
    二、http:#clusterlabs.org/wiki/Main_Page
    三、http:#download.opensuse.org/repositories/server:/ha-clustering/
    四、http:#clusterlabs.org/wiki/Install
    五、http:#blog.chinaunix.net/u/12325/showart_143824.html
    六、http://www.cpan.org/authors/id/PRYAN/
    七、http:#mon.wiki.kernel.org/index.php/Download