大話高可用集羣之概念篇

1.1 概念

        高可用集羣,英文原文爲High Availability Cluster,簡稱HA Cluster,簡單的說,集羣(cluster)就是一組計算機,它們作爲一個整體向用戶提供一組網絡資源。這些單個的計算機系統 就是集羣的節點(node)。

       高可用集羣的出現是爲了使集羣的整體服務儘可能可用,從而減少由計算機硬件和軟件易錯性所帶來的損 失。如果某個節點失效,它的備援節點將在幾 秒鐘的時間內接管它的職責。因此,對於用戶而言,集羣永遠不會停機。高可用集羣軟件的主要作用就是實現故障檢查和業務切換的自動化。

       只有兩個節點的高可用集羣又稱爲雙機熱備,即使用兩臺服務器互相備份。當一臺服務器出現故障時,可由另一臺服務器承擔服務任務,從而在不需要人工干預的 情況下,自動保證系統能持續對外提供服務。雙機熱備只是高可用集羣的一種,高可用集羣系統更可以支持兩個以上的節點,提供比雙機熱備更多、更高級的功能, 更能滿足用戶不斷出現的需求變化。

  • 節點

     運行ha軟件的主機成爲節點。在ha集羣節點中有主次之分,分別稱爲:主節點/備份節點,.每個節點上都有自己的一組資源。一般情況下主幾點提供應用服務,備份節點提供監控模式。

  • HA資源(resource)

     資源是一個節點可以控制的實體,並且當節點發生故障時,這些資源能夠被其它節點接管(failover資源轉移),heartbeat中,可以當做資源的實體有:磁盤分區、文件系統、IP地址、應用程序服務、NFS文件系統等。

  • 事件(event)

     也就是集羣中可能發生的事情,例如節點系統故障、網絡連通故障、網卡故障、應用程序故障等。這些事件都會導致節點的資源發生轉移,HA的測試也是基於這些事件來進行的。

  • 動作(action)

    事件發生時HA的響應方式,動作是由shell腳步控制的,例如,當某個節點發生故障後,備份節點將通過事先設定好的執行腳本進行服務的關閉或啓動。進而接管故障節點的資源。

1.3 HA邏輯層

      通常一個集羣由3個層次組成:messagelayer(通信層)、CRm集羣資源管理層,Resource agent資源代理層。

ha


  •   通信層 :(Messaging Laye):

        用來專門傳輸2個集羣節點的信息事物,爲了加快傳輸的利用率,使用UDP的方式進行通信。通信層傳輸中的集羣事物包括:心跳信息,資源粘性比較信息(資源更傾向於那個節點),資源的轉移信息等。至於爲什麼會有資源粘性,主要是爲了當服務器A,B 2個節點的時候,節點A和幾點B的性能可能不同,通過資源粘性的方法來決定資源更傾向於在那個節點上運行。當資源通過資源粘性轉移到某個節點時,我們把這種情況成爲failback。在heartbeat中主要分2種通信結構: 1.HBcomm 通信層 (節點之間的進程通信)通過PILS動態連接庫加載。比如支持多播,單播,串口等通信方式。所有節點間通信PLUGIN模塊放在lib/plugins/hbcomm/路徑下。2.Unix Domain Socket (節點內通信)。在通信層中只負責信息的傳遞,並不對信息進行比較。假如在資源粘性中A主機節點的粘性爲100,B節點的資源粘性爲200.在通信層中只負責粘性數據的傳遞,並不對資源粘性100和200進行比較。(顯然正常情況下資源粘性數字大的節點應該接管資源)。

  • 集羣資源管理層:(Cluster Resource Manger Layer):

       產生的集羣事物進行收集,並且把收集的信息進行比較運算,然後決定資源運行在那個節點上。Crm需要在每個節點上面都運行,並且通過通信層通信。Crm通過dc來進行協調資源運行在那個節點上。Dc本身包括2個組件:集羣策略引擎(Cluster policy engine),集羣轉移引擎(Cluster transition engine)。集羣策略引擎負責對接受到的信息進行計算並且得出結果。集羣轉移引擎用通過策略引擎計算的結果指揮相關資源進行資源轉移等操作。爲了對每個節點的本地資源進行管理,crm通過lrm進行管理,lrm負責接受pe信息並且執行相關動作。

  • 集羣代理層:(Resource agent Layer)

      在CRM中的lrm中,lcrm是通過調用相關腳本來進行對資源進行操作的。腳本是有固定格式的,必須遵守LSB規則。在linux中/etc/init.d中的文件一般是遵循LSB規則的。在LSB腳本中必須傳遞start,stop,restart,status參數。我們通過參數返回的結果來判斷資源是否正常運行。HA集羣中還可以通過OCF格式的腳本進行對資源進行操作。在HA集羣中我們把資源管理的腳本稱做集羣資源代理。

     在HA集羣中,每個層次是單獨的。比如通信層的軟件可以單獨是一個軟件,CRM層的軟件可以是單獨的軟件。

1.3資源組RG(resource group )

心跳

                                          圖1.3.-1

       在圖1.3-1 lamp環境中我們把mysql,mount,httpd,ip設置爲一個資源組。試想一下如果我們不設置資源組的時候,有可能出現資源轉移時只轉移某個單獨的資源。例如主服務器的http服務down的時候,有可能備份服務器轉移http服務資源,然而對於的掛載點,ip地址,數據庫等資源並沒有轉移過來。造成lamp環境運行失敗。如下圖所示:

haover

  • 多資源組實例圖

  • groupok

group

1.4 資源約束

        資源屬性用來對資源進行約束,定義資源之間的傾向性。在圖1.3-1中我們通過定義資源組的方式來保證lamp環境下的各個資源相互依賴。資源和節點之間的傾向性通過資源粘性來定義。資源與資源之間的關係通過資源約束來定義。通常有3種約束方法:排列約束、位置約束、順序約束。位置約束:正值傾向於次,負數傾向於逃離次,例如在圖1.3-1中檔httpd服務down的時候,假如備份服務器的位置約束對於mysql,mount,ip等爲正值的話則轉移到備份服務器上。順序約束:定義資源啓動或關閉的順序。例如在lamp中先啓myql後啓動httpd。先關閉httpd後關閉mysql。排列約束:用來定義資源是否可以運行在同一節點,正值可以在一起,負值不可以在一起。所有3重資源約束是通過正負整數值來決定的其中-inf表示 負無窮,inf表示正無窮。




1.5 腦裂與資源隔離:

         在“雙機熱備”高可用(HA)系統中,當聯繫2個節點的“心跳線”斷開時,本來爲一整體、動作協調的HA系統,就分裂成爲2個獨立的個體。由於相互失去了 聯繫,都以爲是對方出了故障,2個節點上的HA軟件像“裂腦人”一樣,“本能”地爭搶“共享資源”、爭起“應用服務”,就會發生嚴重後果:或者共享資源被 瓜分、2邊“服務”都起不來了;或者2邊“服務”都起來了,但同時讀寫“共享存儲”,導致數據損壞(常見如數據庫輪詢着的聯機日誌出錯)。

         實際上腦裂正常情況下是無法見到的,現代集羣都應該有保護機制來避免這種情況發生。例如RHCS引入的fence的概念。 具體情況是這樣,例如2個節點集羣,當心跳斷開導致節點之間互相無法通信的時候,每個節點會嘗試fence掉對方(確保對方釋放掉文件系統資源)後再繼續運行服務訪問資源。這樣,就可以確保只有一個節點可以訪問資源而不會導致數據損壞。所以這個也是RHCS爲什麼必須有fence設備的原因。到底要不要fence,官方講法是,如果你跑生產,要保證數據不受損壞,就必須有fence設備。

1)添加冗餘的心跳線,例如雙線條線。儘量減少“裂腦”發生機會。

2)通過資源隔離的方式。資源隔離的方式分2中級別:節點級別:STONITN設備。資源級別:fc san swith交換機可以實現資源級別的資源隔離。

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