淺談高可用集羣套件(keepalived+Corosync+Pacemaker)

在講個組件之前現將一下集羣

什麼是集羣

將多臺同構或異構的計算機連接起來協同完成特定的任務就構成了集羣系統。各個Linux廠商也推出了能夠顯著地提高基於TCP/IP協議的多種網絡服務的服務質量的高可用性集羣系統,通過將物理上分離的多個集羣連接在一起使使多個同構或異構的計算機能夠通過局域網或廣域網共享計算資源,並能夠爲用戶提供對資源的透明訪問。

集羣分類

1、 LB:load balancing 負載均衡(針對大容量的請求)

負載均衡羣集爲企業需求提供了更實用的系統。該系統使負載可以在計算機羣集中儘可能平均地分攤處理。該負載可能是需要均衡的應用程序處理負載或網絡流量負載。這樣的系統非常適合於運行同一組應用程序的大量用戶。每個節點都可以處理一部分負載,並且可以在節點之間動態分配負載,以實現平衡。對於網絡流量也如此。通常,網絡服務器應用程序接受了太多入網流量,以致無法迅速處理,這就需要將流量發送給在其它節點上運行的網絡服務器應用。還可以根據每個節點上不同的可用資源或網絡的特殊環境來進行優化。

2、 HA:high Availability 高可用 (7X24小時在線)

高可用性羣集的出現是爲了使羣集的整體服務儘可能可用,以便考慮計算硬件和軟件的易錯性。如果高可用性羣集中的主節點發生了故障,那麼這段時間內將由次節點代替它。次節點通常是主節點的鏡像,所以當它代替主節點時,它可以完全接管其身份,並且因此使系統環境對於用戶是一致的。能夠實現服務器實時在線的功能。

3、 HP:high performance 高性能(科學計算集羣)

通常,多個計算機同時處理數據,以解決複雜的科學問題。這是並行計算的基礎,儘管它不使用專門的並行超級計算機,這種超級計算機內部由十至上萬個獨立處理器組成。但它卻使用商業系統,如通過高速連接來鏈接的一組單處理器或雙處理器 PC,並且在公共消息傳遞層上進行通信以運行並行應用程序。使用最多的就是氣象分析,科學勘探,核爆炸分析等。

實現方法

1、對於負載均衡集羣,要實現可通過LVS,nginx,haproxy等工具實現

2、對於高可用集羣,要實現可藉助keepalived、hearbeat、corosync+pacemaker工具實現

3、對於高性能集羣,要實現得從軟硬件雙方面着手

本文重點介紹高可用集羣實現的幾大組件。

keepalived介紹

Keepalived是一個基於VRRP協議來實現的服務高可用方案,可以利用其來避免IP單點故障,類似的工具還有heartbeat、corosync、pacemaker。但是它一般不會單獨出現,而是與其它負載均衡技術(如lvs、haproxy、nginx)一起工作來達到集羣的高可用。

VRRP全稱 Virtual Router Redundancy Protocol,即 虛擬路由冗餘協議。可以認爲它是實現路由器高可用的容錯協議,即將N臺提供相同功能的路由器組成一個路由器組(Router Group),這個組裏面有一個master和多個backup,但在外界看來就像一臺一樣,構成虛擬路由器,擁有一個虛擬IP(vip,也就是路由器所在局域網內其他機器的默認路由),佔有這個IP的master實際負責ARP相應和轉發IP數據包,組中的其它路由器作爲備份的角色處於待命狀態。master會發組播消息,當backup在超時時間內收不到vrrp包時就認爲master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master,保證路由器的高可用。

在VRRP協議實現裏,虛擬路由器使用 00-00-5E-00-01-XX 作爲虛擬MAC地址,XX就是唯一的 VRID (Virtual Router IDentifier),這個地址同一時間只有一個物理路由器佔用。在虛擬路由器裏面的物理路由器組裏面通過多播IP地址 224.0.0.18 來定時發送通告消息。每個Router都有一個 1-255 之間的優先級別,級別最高的(highest priority)將成爲主控(master)路由器。通過降低master的優先權可以讓處於backup狀態的路由器搶佔(pro-empt)主路由器的狀態,兩個backup優先級相同的IP地址較大者爲master,接管虛擬IP。

heartbeat / Corosync+Pacemaker
一些慨念性問題
  1. 集羣事物信息層(massage layer)
    傳遞集羣事物信息

  2. 集羣資源管理(Cluster Resource Manager)

CRM包過:
  DC(Designated Coordinator):DC上運行了兩個進程,pe(決策引擎) te(事務引擎)
    PE(Policy Engine) 策略引擎,獲取所有的節點信息,決定資源怎麼分配,資源怎樣啓動,怎樣啓動,這樣要通過資源約束來實現,資源約束通過配置接口實現。各個節點之間通過xml傳遞數據。pe通過CIB接受messaging layer信息。
    TE(Transactio Engine)

  LRM(Local Resource Manager)CRM通過LRM(本地資源管理器)管理執行,LRM調用RA來具體實現。
  CLB (cluster information base)集羣信息庫:使用CIB來配置xml文件。在配置集羣時,可以連接到任何節點的CRM,配置cib,然後cib信息可以同步到DC中,DC再通知給 所有的CIB中。
  1. 資源代理(Resource Agent)

當節點發生故障時,心跳信息傳遞給CRM,CRM通過集羣決策,決定哪個備用節點啓動,但是CRM沒有能力啓動節點上的服務(資源),因此需要藉助於RA來實現

RA:Resource agent(服務啓動的腳本?),能夠被CRM調用,用於實現在節點上對某資源進行管理的工具,通常情況下是一個腳本。必須能夠接受參數{start|stop|restart|status}。CRM會每隔固定時長(自定義)檢查資源狀態,因此status必須是runing或者stopped,而不能是否定狀態的短語。

# 架構圖

這裏寫圖片描述

簡單描述下整個過程,在最底部的messaging layer,所有的節點都安裝了heartbeat或者corosync等軟件,節點之間能夠互相通信,然後在上一層,資源管理層,CRM來統籌管理由messaging傳遞過來的信息,託舉一個DC,DC運行了兩個進程,pe和te,pe是策略引擎,它根據CIB(集羣資源倉庫)收集到的所有的資源配置信息(獲取當前互動節點的信息),進行決策。連接到任何一個節點的CRM都可以配置CIB,然後就可以同步到DC中,DC再通知所有的節點。然後CRM通過LRM來管理資源管理,而LRM則調用RA來具體控制資源。

在高可用的情況下,所有的資源都是由CRM控制LRM調用RA來控制,自動啓動的,因此,不用讓資源服務開機自動啓動。一定要保證。可以通過chkconfig service off來停止開機自動啓動服務

DC發現集羣中有一個節點發生故障,剔除掉,然後根據在CRM中配置的規則(比如傾向性,傾向於優先使用哪個備用服務器),然後通過底層信息將集羣事務決策傳遞給備節點,備節點CRM收到來自底層的信息後,通知LRM,調用RA,啓動資源。

實現服務的高可用。一個服務由多個資源組成,例如一個web服務需要有vip、web服務、網頁文件,又如lvs服務,至少有ipvs和規則等組成才能算是一個完整的服務。

集羣系統可以通過單播,組播,廣播進行集羣事務信息通告。

上文涉及的策略
  1. 資源組:

    • 一組資源共進退,比如vip和ipvs
  2. 資源約束

    * 排列約束(colation):定義資源是否能夠運行於同一節點
    
        * score:
    
            * 正值:可以在一起(inf:正無窮)
            * 負值:不能在一起(-inf:負無窮)
    * 位置約束(location):定義資源更傾向於運行在那個節點
    
        * score(分數)
    
            * 正值:傾向運行於該節點
            * 負值:傾向於逃離此節點
    * 順序約束(order):定義資源啓動或關閉時的次序
    
  3. 資源隔離

    • 節點級別:STONITH(爆頭):預防某個節點沒掛透
    • 資源級別:FC,SAN,SWITH可以實現在存儲資源級別拒絕某節點的訪問
共享設備和文件系統

要想所有數據在各節點進行共享使用,必須使用共享設備和共享文件系統

  • 支持共享的設備
    • NAS (在文件級別進行共享)
    • SAN
    • SCIC
提供集羣事務傳遞的軟件

1、heartbeat:heartbeat v1 heartbear v2 heartbear v3

2、corosync:OpenAIS定義了一套規範,分隔爲corosync和一組api。這裏corosync是主要使的,只用於實現messaging layer,不實現資源管理的功能。

3、cman:cluser manger,紅帽的,是對OpenAIS的一種實現。

4、keepalived

5、ultramokey

提供集羣資源管理的軟件

1、heartbeat v1:haresources(hearbeat自帶功能,配置接口是一個配置文件:haresource)。

2、heartbear v2:可以作爲獨立進程:crm(各個節點均運行進程crmd,5566,客戶端使用crm進行交互(shell),完成配置),也有圖形界面heartbeat-GUI

3、heartbeat v3:分隔多個項目 heartbear(底層信息傳遞)+pacemaker(CRM資源管理)+cluster-glue。pacemaker不僅可以與heartbear一起工作,也可以與corosync一起工作,這個時候需要使用cluster-glue進行粘合。

4、pacemaker:仍然使用crmd運行,配置接口使用crm(紅帽對應的爲psc),對應的GUI接口爲hwk,LCMC,pacemaker-mgmt

5、rgmanager:cman使用的工具,resource group manager。故障轉移域,failover domain。

RHCS:Redhat Cluster Suite(套件),配置接口,conga,全生命週期的配置接口

注意事項

1、 節點名稱必須與uname -n命令結果一致

2、 ssh互信通信

3、時間同步

heartbeat

三個主要配置文件
1、祕鑰文件,600,authkeys
2、heartbeat服務的配置文件ha.cf
3、資源管理配置文件

heartbeat通過resource配置文件管理資源,可以使用替代產品crmd來進行資源管理
crmd:提供命令行和推行界面的兩種配置方式

例子

1、 HA MYSQL + HA HTTP

可以定義資源粘性,比如mysql更傾向於運行在A節點,http更傾向於B節點

2、 HA 雙主mysql

集羣文件系統:當一個節點在寫共享文件時,會向文件施加一個所,而集羣文件系統會向其他集結宣告這個鎖,其他節點就不能同步寫該共享文件。

集羣文件系統有:GFS,OCFS2

支持集羣文件系統的設備:DAS,SAN

d當測試到某個服務失敗時,先嚐試重啓,再嘗試資源轉移

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