高可用集羣原理

1.高可用集羣概念
html

    高可用集羣就是當某一個節點或服務器發生故障時,另外一個節點可以自動且當即向外提供服務,即將有故障節點上的資源轉 移到另外一個節點上去,這樣另外一個節點有了資源既能夠向外提供服務。高可用集羣是用於單個節點發生故障時,可以自動將資源、服務進行切換,這樣能夠保證服務 一直在線。在這個過程當中,對於客戶端來講是透明的。mysql

2.高可用集羣組件linux

wKioL1XvBJOB9a5mAAEKDcK7zeE336.jpg

    1).Messaging Layer:集羣服務信息層,主要的做用是傳遞當前節點的心跳信息,並告知給對方,這樣對方就知道其餘節點是否在線。若是不在線,則能夠實現資源 轉移,這樣另外一臺節點就能夠充當主節點,並正常提供服務。傳遞心跳信息通常使用一根心跳線鏈接,該線接口可使用串行接口也能夠是以太網接口來鏈接。每一 個節點上都包含信息層。sql

    2).CRM:Cluster  Resource Messager,該組件叫作資源管理器,它主要是用來提供那些不具備高可用的服務提供高可用性的。它須要藉助Messaging  Layer來實現工做,所以工做在Messaging Layer上層。資源管理器的主要工做是根據messaging Layer傳遞的健康信息來決定服務的啓動、中止和資源轉移、資源的定義和資源分配。在每個節點上都包含一個CRM,且每一個CRM都維護這一個 CIB(Cluster Internet  Base,集羣信息庫),只有在主節點上的CIB是能夠修改的,其餘節點上的CIB都是從主節點那裏複製而來的。在CRM中還包含LRM和DC等組件。
服務器

    3).DC:事務協調員,其包括PE和TE兩個子模塊,DC負責收集每一個組中集羣的事務信息,並造成CIB,且同步到每個集羣節點上。同時DC還會統計每一個組的法定票數(quorum),當該組的法定票數大於二分之一時,則表示啓動該組節點上的服務;不然中止該節點上的服務。DC通常位於主節點上。ide

    4).PE和TE:PE和TE是DC的子組件,PE(Policy Engine),策略引擎,來定義資源轉移的一整套轉移方式,但只是作策略者,並不親自來參加資源轉移的過程,而是讓TE來執行本身的策略。TE(Transition Engine),事務引擎, 就是來執行PE作出的策略的。spa

    5).LRM:Local Resource  Messager,叫作本地資源管理器,它是CRM的一個子組件,用來獲取某個資源的狀態,而且管理本地資源的。例如:當檢測到對方沒有心跳信息時,則會啓動本地相應服務。代理

    6).RA:Resource Agent,資源代理,實際負責啓動關閉資源的,LRM用來管理本地資源的,可是不能啓動關閉資源,當須要啓動關閉資源時會調用RA來啓動,RA是一個個腳本文件,在一個節點上可能有多個RA。常見的RA風格有OCF和LSB。code

    7).stonith:若是備份節點在某一時刻不能收到主節點的心跳信息時,那麼若是此時備份節點馬上搶佔資源時,而此時主節點正好在執行寫操做,備份節點一旦也執行相應的寫操做,會致使文件系統錯亂或者服務器崩潰,所以在搶佔資源的時候可使用資源隔離機制來防止此類事件發生。而咱們經常 使用stonithd(即爆頭)來使主節點再也不搶佔資源。htm

3.資源

    資源就是啓動一個服務須要的子項目。例如啓動一個httpd服務,須要ip,也須要服務腳本、還須要文件系統(用來存儲數據的),這些咱們均可以統稱爲資源。

    資源類型

        primitive:能夠理解爲主資源,有時候看到的會是native,都是一個意思,表示在某一時刻只能運行在某一結點上的資源。

        group:組資源,將多個資源綁定在一個同一個組上面且運行在同一個節點上。

        clone:是將primitive資源克隆n份且運行在多個節點上。

        master/slave:也是將primitive克隆2份、其中master和slave節點各運行一份,且只能在這2個節點上運行。

    資源粘性:資源是否傾向於留在當前節點。一般使用score來定義,當score爲正數表示樂意留在當前節點,負數表示不樂意留在當前節點。

    資源約束

        位置約束(location):資源對節點的傾向程度,一般可使用一個分數(score)來定義,當 score爲正值時,表示資源傾向與此節點;負值表示資源傾向逃離於此節點。也能夠將score定義爲-inf(負無窮大)和inf(正無窮大)。例如: 有三個節點rs一、rs二、rs3當rs1是主節點且發生故障時,則比較rs2和rs3的score值,誰是正值,則資源將會轉移到哪一個節點上去。

        排列約束(colocation):用來定義資源是否能夠在一塊兒,一般也是使用一個score來定義的。當score是正值表示資源能夠在一塊兒;不然表示不能夠在一塊兒。經過定義資源類型爲group也能夠來將全部資源綁定在一塊兒。

        順序約束(order):用來定義資源啓動和中止的順序。例如,首先應該先掛載共享存儲,再啓動httpd或mysqld服務才行吧。

    資源隔離級別:資源隔離是爲了集羣產生腦裂時防止因爲搶佔共享存儲致使文件系統崩潰。

        節點級別:使用stonithd設備來實現。

        資源級別:使用FC SAN switch能夠實如今存儲資源級別拒絕某節點的訪問。

參考資料:

linux高可用集羣原理詳解:http://www.mamicode.com/info-detail-416675.html

相關文章
相關標籤/搜索