【第164期 May 5, 2011】
 

研發新視界

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

作者/陳柏宇

[發表日期:2011/4/29]



簡介

本文探討在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有安裝。

二、heartbeat配置

1.安裝

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




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

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


    2.設定heartbeat

  • 環境設定:在兩台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


  • 參數設定: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. ha.cf各設定值的解釋,Use_logd yes啟動時記得將logd.cf複製貼上到/etc/ha.d底下。



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

    authkeys內容格式與範例。


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

    haresources格式

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

    4.測試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. 更改mon.cf設定自己主機位址hostgroup,以本系統為例,設定如下。


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


    3.設定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以達到這個目的。

    輸入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
  •