RedHat AS4 + HeartBeat 雙機熱備方案

目前,雙機和集羣採用的操作系統主要有UNIX、Linux、BSD及微軟公司的WindowsNT/2000。隨着Linux的迅速發展,穩定性、安全性及功能的不斷增強,人們對Linux的使用越來越廣泛,Linux已成爲服務器市場中的一個重要操作系統,基於Linux的雙機和集羣系統也越來越多。
 Linux集羣的主要優點有:高可靠性、高性能、低成本等等。

1、概述
 1.1 實現目的
 雙機熱備份(HotStandby)是一種軟硬件相結合的高可靠性應用方案。雙機熱備系統由兩臺獨立的服務器以及相應的控制軟件構成,兩臺服務器在網絡中表現爲單一的系統,對外表現爲一個獨立的網絡IP,並以單一系統的模式進行控制和管理。該系統將兩臺服務器的數據和運行狀態(包括硬盤數據和內存數據)進行鏡像,可以實現兩臺服務器之間的熱備份,並能夠做到無縫切換,從而對外提供穩定可靠的服務,實現雙機系統的高可用性解決方案。
 1.2 功能概述
 雙機熱備份系統由相應的應用軟件進行控制,操作系統和應用程序安裝在兩臺服務器的系統盤上。每一臺服務器分配一個固定的IP地址,此外還指定了一個獨立IP地址作爲集羣IP(clusterIP),該IP是雙機系統對外提供服務的接口。

 兩臺服務器一臺成爲主節點(Primary Server),另一臺成爲從節點(StandbyServer),主節點與從節點之間保持固定時間間隔的心跳信號,通過心跳信號實現兩個對等系統之間的週期性的握手,從而能夠監視對方的運行狀態,進行主機及網絡的故障檢測。

 在系統正常情況下,主節點佔用系統資源並運行所有的服務,爲信息系統提供支持,從節點通過心跳信號監視主節點的運行情況。一旦主節點發生故障(如主機故障,網絡故障,軟件故障等),從節點就會自動接管(TakeOver)主節點的資源和服務,繼續支持信息的運營,從而保證整個雙機系統能夠不間斷的運行(Non-Stop)。主節點在恢復運行後,又可以自動獲取資源並取代從節點。

 1.3 運行環境
 在集羣系統的實現方案中雙機熱備份系統是硬件配置最簡單和價格最低廉的解決方案,通常鏡像服務的硬件配置需要兩臺獨立的服務器,每臺服務器有獨立的操作系統硬盤和數據存貯硬盤,每臺服務器有提供網絡連接功能的網卡,此外還可以有一對完成內部連接和數據鏡像功能的網卡。
雙機系統的兩臺服務器擁有共享的數據存儲空間(可以是一個數據存儲硬盤或一臺專門的數據存儲服務器)。任何一臺服務器在運行服務時,從共享的數據存儲空間內讀取和存儲數據。每臺服務器的操作系統和應用程序文件存儲在各自的本地存儲空間上。
雙機熱備份系統採用內存鏡像的技術,即把兩臺服務器的數據和運行狀態(包括硬盤數據和內存數據)進行鏡像。這個技術的優點是所有的應用程序和操作數據在兩臺服務器上鏡像同步,當主節點出現故障時,從節點可以在幾乎沒有延遲的情況下接管主節點運行的服務,從而實現無縫切換和熱備份。該技術的缺點是,由於兩臺服務器的內存完全一致,當由於系統應用程序帶有缺陷而導致系統宕機時,兩臺服務器會同步宕機。
 也可以在雙機系統中使用第三方生產的磁盤陣列櫃,在磁盤陣列櫃中安裝有磁盤陣列控制卡,陣列櫃可以直接將櫃中的硬盤配置成爲邏輯盤陣。該結構不採用內存鏡像技術,因此需要有一定的切換時間,同時由於所有的數據全部存貯在磁盤陣列櫃中,當主節點出現故障時,從節點接替主節點,從磁盤陣列櫃中讀取數據,所以不會產生數據不同步的問題。由於這種方案不需要網絡鏡像同步,因此這種集羣方案服務器的性能要比鏡像服務器結構高出很多。
 雙機熱備份系統的兩臺服務器通過內部局域網進行連接,通過週期性的心跳信號保持通信和進行相互監視。兩臺服務器之間可以採用多種連接方式,可以使用串口線,也可以通過以太網ethernet進行連接,還可以採用並存的多種連接方式實現兩臺主機的多重互連。如果雙機系統有冗餘連接,在第一條通信路徑失效的情況下,控制軟件可以嘗試使用第二條通信路徑進行連接。因此,爲了避免不必要的失效切換,最好建立兩種以上獨立的物理路徑,使用至少兩種心跳。
 雙機熱備份系統具有配置簡單,使用方便,價格低廉等諸多優點,但由於鏡像服務器需要採用網絡方式鏡像數據,通過鏡像軟件實現數據的同步,因此需要佔用網絡服務器的CPU及內存資源,造成服務器的性能有所降低。

 1.4 軟件需求
 本方案僅討論Redhat Linux系統下的雙機熱備份系統的實現,使用的雙機控制軟件是Linux-HAheartbeat。因此,除了安裝操作系統及相關的應用服務程序之外,還需要安裝heartbeat控制軟件。
 通過對heartbeat軟件的配置,可以把兩臺服務器分別指定爲主節點和從節點,指定心跳信號的時間間隔,指定clusterIP、子網掩碼、廣播地址、鑑權方式,還可以設置heartbeat啓動的服務,該服務最終由雙機系統通過clusterIP對外提供。
 Heartbeat可以最大限度地保護用戶端的應用連續性。用戶的硬件資源(如網卡),軟件資源(如操作系統、數據庫管理系統、數據庫應用系統、電子郵件系統等)均能處於heartbeat容錯軟件的保護之下,當這些被保護的資源出現技術故障時,heartbeat容錯軟件可以隨時實施系統資源的切換。因此,heartbeat真正實現了用戶硬件或是軟件資源發生故障時系統及應用層上的在線熱切換。
 Heartbeat軟件的特點有:
 1. 不需增加額外硬件資源,純軟件方式實現雙機容錯,並且對雙機無硬件配置要求。
 2. 可支持DB2,Notes、Exchange、SQLServer、Sybase、Informix、Oracle、SAP等
   多種系統的應用層熱切換。
 3. 支持共享磁盤陣列櫃和內存鏡像等多種方式,給用戶提供了選擇上的靈活性,
   同時也能適應各種機型、網絡結構、軟件平臺及應用系統。
 4. 佔用系統資源較少,不增加網絡負荷,並且不會干擾具體應用程序的運行和操作。
   真正實現無人值守,全自動地實現系統資源和應用服務的切換。

 1.5 方案說明
 服務器Server A和Server B構成雙機熱備份系統的兩臺主機,並且分別作爲主節點(PrimaryServer)和從節點(Standby Server)。兩臺主機均運行Linux-HAheartbeat,該軟件成爲雙機熱備系統的控制程序。
 兩臺主機通過串口線、以太網等多種方式進行連接,傳送數據和心跳信號,並互相進行狀態監視。可以只使用一種連接方式(如以太網連接),但是多種連接方式下的冗餘路徑可以保證雙機連接的可靠性和服務質量。
 數據庫服務器或磁盤陣列櫃是專門的數據存儲和共享設備,兩臺服務器在運行時,均從該設備中讀取和存儲數據。這種方式可以有效地提高數據傳輸效率,提高雙機熱備服務器的系統性能,並且能夠保證兩臺服務器之間的數據同步。

 1.6 存在的問題
 雙機備份系統有兩種配置方式,分別是“基於系統切換的雙機系統”和“基於系統鏡像的雙機系統”,二者的區別是:
 基於系統切換的雙機系統僅僅把兩臺服務器的硬盤數據進行鏡像,在主節點失效的情況下,從節點將進行系統一級的切換。該方式不能實現無縫切換,實現的是冷備份。
 基於系統鏡像的雙機系統把兩臺服務器的硬盤數據和內存數據都進行鏡像。爲保證完全的內存鏡像,兩臺服務器之間需通過專用連接網段實時地保持一個連續的、雙向的鏡像進程,該進程確保兩臺服務器之間的數據同步。一旦故障發生,無論任何一臺服務器失效,失效服務器上的數據和應用,將立即切換到另一臺
 服務器上,從而使用戶在沒有中斷的情況下可以繼續使用雙機系統提供的服務。該方式能夠做到無縫切換,實現的是熱備份。
 本方案描述的heartbeat雙機熱備份系統是一種基於系統鏡像的雙機系統,實現方法是,主節點在出現故障的情況下,集羣IP地址無縫地切換到從節點,從而客戶機對服務器的訪問可以由從節點來支持。但是兩臺服務器之間並沒有鏡像進程完成徹底的內存鏡像,因而主節點在故障時所運行的數據信息不能切換到從節點,造成數據丟失以及服務中斷。所以該方案不是嚴格意義上的系統鏡像,實現的是服務一級的切換,並不能實現實時數據的切換。

2、具體實現步驟
 一、安裝兩個 RedHat AS4 U5系統,要求:
   1. 關閉防火牆
   2. seLinux設置爲disable
   3. 每臺電腦需要配置兩塊網卡
   注:我是在Ubuntu下用VirtualBox模擬實現的,虛擬網卡一定要用Host-onlyadapter連接模式。

 二、保證兩臺電腦以下三個文件必須相同:(黑體粗字項之間用Tab鍵分隔)
  1. /etc/hosts
    [root@node1 ~]# vi/etc/hosts
    #主節點的對外用IP地址 

   域名                           主機名
    192.168.56.33           node1.example.com   node1
    #心跳用IP地址               主機名
    10.0.0.3                    node1

    #從節點的對外用IP地址    域名                           主機名
    192.168.56.66           node2.example.com   node2
    #心跳用IP地址               主機名
    10.0.0.6                    node2

    #保證 機器名 與 uname -n 命令 輸出一致
    #保證 兩臺電腦每塊網卡能夠ping通

  2. /etc/host.conf
    [root@node1 ~]# vi/etc/host.conf
    order hosts,bind

  3. /etc/resolv.conf
    [root@node1 ~]# vi/etc/resolv.conf
    # DNS地址如果爲空可以根據當地dns輸入
    nameserver192.168.0.1

  注:/etc/host.conf 一般默認就是,/etc/resolv.conf 因實際地址配就是了!

 三、在兩臺電腦上分別安裝heartbeat軟件包,按如下順序安裝:
  1. heartbeat-gui-2.1.2-2.el4.centos.i386.rpm
  2. heartbeat-pils-2.1.2-2.el4.centos.i386.rpm
  3. heartbeat-stonith-2.1.2-2.el4.centos.i386.rpm
  4. heartbeat-2.1.2-2.el4.centos.i386.rpm
 
 四、配置 authkeys、ha.cf 和 haresources 三個文件:
  1. 進入目錄 /usr/share/doc/heartbeat-2.1.2/目錄,
    複製 authkeysha.cfharesources/etc/ha.d/目錄進行配置。
    注意:這三個文件在兩臺電腦裏的內容必須一致。

  2. 配置心跳的加密方式:(黑體粗字項之間用空格分隔)
    使用雙機對聯線(網線爲交叉線),配置如下:
    [root@node1 ~]# vi/etc/ha.d/authkeys
    # 添加如下內容在文件中:
    auth 1
    1 crc

    存盤退出,然後必須修改文件權限:
    [root@node1 ~]# chmod 600authkeys

  3. 配置心跳的配置文件:(黑體粗字項之間用空格分隔)
    [root@node1 ~]# vi/etc/ha.d/ha.cf
    # HeartBeat的日誌文件記錄位置,如沒有該目錄,則需要手動添加
    logfile/var/log/ha-log
    # 心跳IP用哪個網卡
    bcast eth1
    # 設定心跳監測時間爲2秒
    keepalive 2
    # 超出該時間間隔未收到對方節點的心跳,則發出警告並記錄到日誌中
    warntime 6
    # 超出該時間間隔未收到對方節點的心跳,則認爲對方已經死亡
    deadtime 9
    # 在某些系統上,系統啓動或重啓之後需要經過一段時間網絡才能正常工作,
    # 該選項用於解決這種情況產生的時間間隔,取值至少爲deadtime的兩倍。
    initdead 60
    # 使用udp端口694 進行心跳監測
    udpport 694
    # heartbeat把兩臺主機分別爲 主節點 和 從節點,
    # 主節點在正常情況下佔用資源並運行所有的服務,
    # 遇到故障時把資源交給從節點並由從節點運行服務。
    # 當auto_failback選項爲on時,一旦主節點恢復運行,則自動恢復資源。
    # 當auto_failback選項爲 off 且 nice_failback選項爲 on 時,
    #  一旦主節點恢復運行,則不會自動恢復資源。
    auto_failback off
    nice_failback on

    # 以下 主機名 必須要與 uname -n 命令得到的結果一致
    # 主節點 對應的 主機名
    node node1
    # 從節點 對應的 主機名
    node node2

  4. 配置心跳的資源:(黑體粗字項之間用空格分隔)
    [root@node1 ~]# vi/etc/ha.d/haresources
    # 先指定主機名爲node1的主機系統附加一個虛擬IP 192.168.56.30給eth0:0,
    # 再指定主機名爲node1的主機系統先啓動httpd、再啓動mysql,
    # 關閉時先關閉mysql、再關閉httpd。
    # 這裏如果主機名爲node1的主機宕機後,
    # 主機名爲node2的主機可以自動啓動httpd和mysql服務,
    # 並新分配IP 192.168.56.30給node2的eth0:0。
    node1 192.168.56.30 httpdmysql

 五、設置heartbeat啓動系統時自啓動:( 字母S和K爲大寫 )
   [root@node1 ~]# cd/etc/rc.d/rc0.d
   [root@node1 ~]# ln -s/etc/init.d/heartbeat K05heartbeat

   [root@node1 ~]# cd/etc/rc.d/rc3.d
   [root@node1 ~]# ln -s/etc/init.d/heartbeat S75heartbeat

   [root@node1 ~]# cd/etc/rc.d/rc5.d
   [root@node1 ~]# ln -s/etc/init.d/heartbeat S75heartbeat

   [root@node1 ~]# cd/etc/rc.d/rc6.d
   [root@node1 ~]# ln -s/etc/init.d/heartbeat K05heartbeat
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章