1. 程式人生 > >高可用(HA)叢集原理概述

高可用(HA)叢集原理概述

一、高可用叢集(High Availability Cluster)

   叢集(cluster)就是一組計算機,它們作為一個整體向用戶提供一組網路資源。每一個單個的計算機系統都叫叢集節點(node)。隨著業務的增長,叢集通過新增新的節點,滿足資源的高可擴充套件性。

   計算機硬體和軟體易錯性不可避免,這樣在節點上的服務會不可避免的中斷。高可用叢集的出現是為保證即使節點失效,而服務能不中斷。

   高可用叢集在一組計算機中,採用主備模式,主節點提供服務,備節點等待;一旦,主節點失效,備節點無需人工的無縫取代主節點提供服務,這樣保證了服務的不中斷。

   高可用叢集軟體的主要作用就是實現故障檢查和業務切換的自動化,以提供不中斷的服務。

二、高可用叢集(HA)的衡量標準

    高可用性群集(High Available), 是通過系統的可靠性(reliability)和可維護性(maintainability)來度量的。

   通常用平均無故障時間(MTTF)來度量系統的可靠性,用平均維修時間(MTTR)來度量系統的可維護性。

   故:HA=MTTF/(MTTF+MTTR)*100%

   具體HA衡量標準:

  • 99% 一年宕機時間不超過4天

  • 99.9% 一年宕機時間不超過10小時

  • 99.99% 一年宕機時間不超過1小時

  • 99.999% 一年宕機時間不超過6分鐘

三、高可用叢集的層次結構

wKioL1Nnb3eCWjqRAAH1gczbB40573.jpg

1.資訊層(Messaging)

   也叫底層基礎架構層,主要用於節點之間傳遞心跳資訊,也稱為心跳層。節點之間傳遞心跳資訊可以通過廣播,組播,單播等方式。

   心跳資訊:叢集中每一臺伺服器都不停的將自己線上的資訊通告給叢集中的其他主機。

   心跳資訊的傳遞是基於套接字通訊的,通過軟體提供服務監聽套接字,實現資料傳送、請求。必須安裝軟體,並開啟服務,這是實現高可用叢集的基礎。

2.成員層(Membership)

   這層最重要的作用是通過Cluster Consensus Menbership Service(CCM)這種服務由Messaging層提供的資訊,來產生一個完整的成員關係。

CCM 元件(Cluster Consensus Menbership Service):作用,承上啟下,監聽底層接受的心跳資訊,當監聽不到心跳資訊的時候就重新計算整個叢集的票數和收斂狀態資訊,並將結果轉遞給上層,讓上層做出決定採取怎樣的措施。CCM 還能夠生成一個各節點狀態的拓撲結構概覽圖,以本節點做為視角,保證該節點在特殊情況下能夠採取對應的動作。

   Messaging & Membership一般由同一軟體實現。

3.資源分配層(Resource Allocation)

   也叫資源管理器層,真正實現叢集服務的層。包含CRM(叢集資源管理器,cluster Resource Manager),CIB(叢集資訊基庫,Cluster Infonation Base),PE(策略引擎,Policy Engine),TE(實施引擎,Transition Engine), LRM(Local Resource Manager,本地資源管理器)。

CRM元件:核心元件,實現資源的分配和管理。每個節點上的CRM都維護一個CIB用來定義資源特定的屬性,哪些資源定義在同一個節點上。主節點上的CRM被選舉為DC(Designated Coordinator指定協調員,主節點掛掉會選出新的DC),成為管理者,它的工作是決策和管理叢集中的所有資源。

   任何DC上會額外執行兩個程序,一個叫PE,;一個叫TE。

  • PE :定義資源轉移的一整套轉移方式,但只做策略,並不親自來參加資源轉移的過程,而是讓TE來執行自己的策略。

  • TE : 就是來執行PE做出的策略的並且只有DC上才執行PE和TE。

CIB元件:XML格式的配置檔案,工作的時候常駐記憶體,只有DC才能對CIB進行修改,其他節點上的複製DC上的CIB而來。叢集的所有資訊都會反饋在CIB中。

LRM元件:是執行CRM傳遞過來的在本地執行某個資源的執行和停止的具體執行人。

資源(補充)

   在叢集中構成一個完整服務的每一部分都叫資源,都需要配置和管理。

   以web應用為例:vip是資源,web伺服器是資源,儲存也是資源。不同的服務的資源也不盡相同,其中儲存資源的選擇、配置、管理是高可用叢集中的難點問題。

4.資源代理層(Resource Agents)

   叢集資源代理,能夠管理本節點上的屬於叢集資源的某一資源的啟動,停止和狀態資訊的指令碼,資源代理分為:LSB(/etc/init.d/*),OCF(比LSB更專業,更加通用)。

   任何資源代理都要使用同一種風格,接收四個引數:{start|stop|restart|status},每個種資源的代理都要完成這四個引數據的輸出。

工作機制PE根據CIB獲取資源的配置資訊(叢集上的所有資訊都會收集到DC的CIB,同步到其它節點),而後做出決策,一旦做得決策就會進行資源的管理。PE藉助於本地的CCM通知給其它節點CIB來實現對某些資源管理資訊的傳遞,比如說通告其它CRM要啟動某一資源了,收到資訊後CRM並不負責啟動,轉由LRM(Local Resource Manager本地資源管理)啟動,而併發資源又藉助於RA(Resource Agent資源代理)實現資源管理。

四、高可用叢集軟體

Messaging and Membership Layer(資訊與關係層):

  • heartbeat (v1,v2,v3)

  • corosync

  • cman

  • keepalived

  • ultramokey

Cluster Resource Manager Layer(資源管理層,簡稱:CRM):

  • haresource,crm (heartbeat v1/v2)

  • pacemaker (heartbeat v3/corosync)

  • rgmanager (cman)

常用組合:

  • heartbeat v2+haresource(或crm) (一般常用於CentOS 5.X)

  • heartbeat v3+pacemaker (一般常用於CentOS 6.X)

  • corosync+pacemaker (現在最常用的組合)

  • cman + rgmanager (紅帽叢集套件中的元件,還包括gfs2,clvm)

  • keepalived+lvs (常用於lvs的高可用)

五、補充

1.STONITH(Shoot The Other Node in the Head,"爆頭")元件

   這種機制直接操作電源開關,控制故障節點的電源開關,通過暫時斷電又上電的方式,使故障節點重啟,這種方式需要硬體支援。

   主節點在某一端時間由於某種原因,沒時間傳遞心跳資訊,這個時候叢集會選取新的DC,從新分配資源提供服務,如果主節點伺服器還沒有宕掉,這樣就會導致伺服器分隔、資源爭用,這種情況被稱為腦裂(brain-split)。此時,使用者能訪問,一旦有寫的操作,就會導致檔案系統崩潰,損失慘重。為避免這種情況,新的DC一旦產生,第一時間對主節點執行stonith,這種操作叫做資源隔離。

wKiom1NoL-7zYRbLAAG-7DJLTq4547.jpg

2.資源隔離

  • 節點級別:這種就叫STONITH,直接把對方的電源給切斷,一般這種主機都是連線到電源交換機上的。

  • 資源級別:同樣需要依賴一些硬體裝置來完成。比如節點通過光纖交換機連線到共享儲存,通過把需要踢除出去的節點的光纖介面遮蔽來實現資源隔離。

3.仲裁裝置

  • ping node:兩個節點的模式下,一旦其中一個節點發生故障,發生叢集分隔以後,無法判定哪個節點不正常,但工作正常的節點一定是可以連到網際網路,故正常的節點是可以跟前端路由通訊,所以可以把前端路由當成第三個節點,如果可以ping通,那就說明自己是正常的,可以將對方隔離掉。

  • qdisk: RHCS不是使用ping節點來判斷,而是使用一個共享儲存的裝置,節點按照心跳資訊頻率每隔一個資訊頻率時間就往磁盤裡寫一個數據位,如果裝置每隔一個心跳時間間隔就更新一次資料位,就說明這個裝置處於活動狀態的,可以將對方隔離掉。