高可用集羣原理解析

  HA(High Avaliablity,高可用)集羣的出現是爲了使集羣的整體服務儘可能可用,從而減少由計算機硬件和軟件易錯性所帶來的損失。如果某個節點失效,它的備援節點將在幾秒鐘的時間內接管它的職責。


一、高可用原理簡述

    我們在要做高可用的節點上安裝好實現高可用功能的程序,這些程序最核心的包括兩個部分:心跳監測部分和資源管理部分;通過資源管理器的配置接口定義資源,並將配置文件同步到其它節點,節點之間在心跳監測層通過相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未收到對方發送的報文,那麼就認爲對方失效,這時會啓動資源管理模塊來接管運行在對方主機上的資源或者服務


二、HA的框架和要點

wKiom1cNyGDAZtvYAASk5zOa9_8356.png

  1、Messaging與Membership層:Messaging層主要用於節點之間傳遞心跳和集羣事務信息,可以使用廣播、組播、單播、串行鏈路等方式,集羣節點之間的心跳信息也要做認證。成員關係(Membership)層最重要的作用是主節點通過Cluster Consensus Menbership Service(CCM或者CCS)這種服務由Messaging層提供的信息,來產生一個完整的成員關係。

      解決方案:heartbeat, corosync, cman(openais)

      注:有時候,接收不到節點的心跳信息可能並非是節點出現故障,也有可能是節點很繁忙,因此建議節點上至少配兩張網卡,一張網卡專門用來傳遞心跳信息,另外一張網卡即用於對外提供服務,也可作爲傳遞心跳信息的備用網卡

     

  2、CRM:cluster resource manager,集羣資源管理器,工作在Messaging Layer之上。資源管理器的主要工作是根據messaging Layer傳遞的健康信息來決定服務的啓動、停止和資源的定義、轉移、分配。每一個節點上都包含一個CRM,在CRM中還包含LRM和DC等組件

      解決方案:   

        haresources(heartbeat v1):

          配置接口:配置文件,文件名也叫haresources,在一個節點完成配置後,再手動將配置文件同步到其它節點;

        crm(heartbeat v2):

          運行爲守護進程mdmtd,監聽在5560/tcp;配置文件cib(cluster information base),爲xml格式;配置接口:命令行客戶端crmsh,GUI客戶端hb_gui,在一個節點完成配置後,配置文件會自動同步到其它節點;

        pacemaker(heartbeat v3):

          運行爲守護進程;配置文件cib.xml;配置接口:CLI(crm,pcs), GUI(hawk,LCMC,pacemaker-mgmt);

        rgmanager:運行爲守護進程,配置文件爲/etc/cluster/cluster.xml,配置接口:clustat, cman_tool, Conga(Web GUI):控制端luci+被控制端ricci(運行於各節點)


  3、LRM:local resource manager,它是CRM的一個子組件,用來獲取某個資源的狀態,並且管理本地資源


  4、RA:resource agent,是實際負責操縱(啓動、停止、監控等)資源的,LRM用來管理本地資源的,但是不能操縱資源,當需要操縱資源時會調用RA來執行,RA通常是腳本文件,在一個節點上可能有多個RA。

      RA的類型

        heartbeat legacy:heartbeat的傳統類型,通常是/etc/ha.d/haresources.d/目錄下的腳本

        LSB:/etc/init.d/*

        OCF(open cluster framework):比LSB更強大的一種腳本,支持更多的參數

        STONITH:一種特殊的RA,主要作用是使出現問題的節點從集羣環境中脫離,進而釋放集羣資源,避免兩個節點爭用一個資源的情形發生。保證共享數據的安全性和完整性


  5、DC:可以理解爲事務協調員,這個是當多個節點之間彼此收不到對方的心跳信息時,這樣各個節點都會認爲對方發生故障了,於是就會產塵分裂狀況(分組)。並且都運行着相關服務,因此就會發生資源爭奪的狀況。因此,事務協調員在這種情況下應運而生。事務協調員會根據每個組的法定票數來決定哪些節點啓動服務,哪些節點停止服務。例如高可用集羣有3個節點,其中2個節點可以正常傳遞心跳信息,與另一個節點不能相互傳遞心跳信息,因此,這樣3個節點就被分成了2組,其中每一個組都會推選一個DC,用來收集每個組中集羣的事務信息,並形成CIB,且同步到每一個集羣節點上。同時DC還會統計每個組的法定票數(quorum),當該組的法定票數大於總票數二分之一時,則表示啓動該組節點上的服務,否則放棄該節點上的服務。對於某些性能比較強的節點來說,它可以投多張票,因此每個節點的法定票數並不是只有一票,需要根據服務器的性能來確定,DC位於主節點上。     

      PE和TE也是DC的子組件,其中:

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

        TE(Transition Engine):執行PE做出的策略。


  6、仲裁設備:偶數個集羣節點分裂時可能出現兩組票數相同的情況,這時候就需要藉助仲裁設備(ping node, ping group或quorum disk)來決定服務該在哪個節點上啓動。


  7、集羣分裂場景中,without quorum之時,如何採取對資源管控的策略:

     stopped

     ignore:僅在只有兩個節點,又沒有仲裁節點時纔可考慮

     freeze:繼續處理未完成的請求,但不再接受新請求

     suicide


  8、資源啓動一個服務需要的子項目。例如啓動一個web服務,需要ip、服務程序、文件系統(用來存儲數據),這些都可以統稱爲資源。


  9、資源隔離機制:

      節點級別:STONITH,這種方式直接操作電源開關,當一個節點發生故障時,另一個節點如果能偵測到,就會通過網絡發出命令,控制故障節點的電源開關,通過暫時斷電,而又上電的方式使故障節點被重啓動或者直接斷電, 這種方式需要硬件支持

        電源交換機

        服務硬件管理模塊

      資源級別:例如:使用FC SAN switch可以實現在存儲資源級別拒絕某節點的訪問

      應用場景:集羣分裂

wKiom1cVlD_ihthyAASBhPb-sE4659.png


  10、資源類型

       primitive, native:主資源,其僅能運行於某一節點

       group:組資源,可用於實現限制多個資源運行於同一節點及對此些資源統一進行管理

       clone:克隆資源,一個資源可以運行於多個節點;

          應該指定:最大克隆的份數,每個節點最多可以運行的克隆;

       master/slave主從資源,特殊的克隆資源;


  11、資源運行的傾向性(資源轉移傾向性):

       rgmanager:

         failover domain, node priority

       pacemaker:

         資源黏性:資源傾向於留在當前節點的分數;通常使用score來定義,當score爲正數表示樂意留在當前節點,負數表示不樂意留在當前節點

         資源約束

            位置約束:資源對某節點運行的傾向性

               inf:正無窮, -inf:負無窮

               n, -n

            排列約束:定義資源彼此間的傾向性

               inf, -inf

               n, -n

            順序約束:屬於同一服務的多個資源運行在同一節點時,其啓動及關閉的次序約束;

               啓動:A→B→C

               關閉:C→B→A

               例如:定義高可用的mysql服務,需要三個資源vip、mysqld、nfs,合理的啓動次序應該是vip→nfs→mysqld

        要定義資源同進同退,有兩種方式:排列約束和組資源,常用後者。


  12、HA集羣的工作模型:

       A/P:兩節點,active/passive,主備模型;

       A/A:兩節點,active/active,雙主模型,兩個節點各自運行一個集羣服務,彼此把對方當作備用節點

       N-M:N>M, N個節點,M個服務;活動節點數爲N,備用節點數爲N-M

       N-N


  13、根據messagin層程序和CRM層程序的不同組合,CentOS或RHEL系統高可用集羣的解決方案有:

       CentOS 5:

         RHCS:cman+rgmanager

         選用第三方方案:corosync+pacemaker, heartbeat(v1或v2), keepalived

       CentOS 6:

         RHCS:cman+rgmanager

         corosync + rgmanager

         cman + pacemaker

         heartbeat v1(自帶haresources), v2(自帶crm), v3(自帶pacemaker)

         keepalived

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章