天天看點

高可用(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分鐘

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

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,這種操作叫做資源隔離。

2.資源隔離

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

資源級别:同樣需要依賴一些硬體裝置來完成。比如節點通過光纖交換機連接配接到共享存儲,通過把需要踢除出去的節點的光纖接口屏蔽來實作資源隔離。

3.仲裁裝置

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

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

寫在最後

   此博文很多要點均是自己了解并整理所得,由于時間原因并沒有時間去通讀官方文檔得到更詳細更權威的解說,故若細節之處如有錯誤,萬望指出。

  以後有暇,通讀文檔,還來潤色。

本文出自 “” 部落格,請務必保留此出處

繼續閱讀