一、高可用集羣的定義
高可用集羣,英文原文爲High Availability Cluster,簡稱HACluster,簡單的說,集羣(cluster)就是一組計算機,它們作爲一個整體向用戶提供一組網絡資源。這些單個的計算機系統 就是集羣的節點(node)。
高可用集羣的出現是爲了使集羣的整體服務儘可能可用,從而減少由計算機硬件和軟件易錯性所帶來的損失。如果某個節點失效,它的備援節點將在幾秒鐘的時間內接管它的職責。因此,對於用戶而言,集羣永遠不會停機。
高可用集羣軟件的主要作用就是實現故障檢查和業務切換的自動化。只有兩個節點的高可用集羣又稱爲雙機熱備,即使用兩臺服務器互相備份。當一臺服務器出現故障時,可由另一臺服務器承擔服務任務,從而在不需要人工干預的 情況下,自動保證系統能持續對外提供服務。雙機熱備只是高可用集羣的一種,高可用集羣系統更可以支持兩個以上的節點,提供比雙機熱備更多、更高級的功能,更能滿足用戶不斷出現的需求變化。
二、高可用集羣的特點
高可用服務
通常使用集羣方式實現,這也是集羣的最大作用和體現。
其終極目標是確保服務實時可用,不會因爲任意的軟硬件故障導致服務出現終止和不可用的情形。
度量標準
系統的可靠性(reliability)和可維護性(maintainability)來度量。
工程上,通常用平均無故障時間(MTTF)來度量系統的可靠性,用平均修復時間(MTTR)來度量系統的可維護性。
計算公式,HA=MTTF/(MTTF+MTTR)*100%
99% 全年停機時間不超過4天
99.9% 全年停機時間不超過10小時
99.99% 全年停機時間不超過1小時
99.999% 全年停機時間不超過6分鐘
集羣節點
集羣軟件必須包括一種機制來定義哪些系統的可用作集羣節點(定義節點,2節點或以上)。
所有位於集羣中的主機都稱爲節點。
集羣服務與資源
哪些服務或應用程序可以在節點之間進行故障轉移,並互連可以在節點間傳送通信。
服務通常包括多種資源,多種資源組成某種服務。
如mysql高可用服務,則vip,mysqld,共享或鏡像磁盤等則爲該服務所需要的資源。
對集羣服務的管理,實際上是對資源的管理。
資源隔離與腦裂
由於軟硬件故障導致節點宕機發生資源爭用,即出現故障節點或正常並存的情形。
在故障的節點控制相同的集羣資源的情況下,實施資源隔離,防止腦裂發生(Fence機制,STONITH等)。
集羣狀態監控
通過集羣管理和監控工具以及預定義的腳本來配置常見的服務或應用程序,監控,故障轉移等。
最爲大家所熟知的如心跳,主要用於在集羣環境中各節點之間相互感知對方的存在。
可以基於串口、多播、廣播和組播通信機制。一旦心跳失敗,則會發生相應的資源轉移,集羣重構等動作。
三、高可用集羣的層次結構
高可用集羣可分爲三個層次結構
Messaging and Membership:Messaging主要用於節點之間傳遞心跳信息,也稱爲心跳層。節點之間傳遞心跳信息可以通過廣播,組播,單播等方式。成員關係(Membership)層,這層最重要的作用是主節點(DC)通過CCM或者CCS(Cluster Consensus Menbership Service)這種服務由Messaging層提供的信息,來產生一個完整的成員關係。這層主要實現承上啓下的作用,承上,將下層產生的信息生產成員關係圖傳遞給上層以通知各個節點的工作狀態;啓下,將上層對於隔離某一設備予以具體實施。
Cluster Resource Manager:集羣資源管理層,真正實現集羣服務的層。在該層中每個節點都運行一個集羣資源管理器CRM(Cluster Resource Manager),它能爲實現高可用提供核心組件,包括資源定義,屬性等。在每一個節點上CRM都維護有一個CIB(集羣信息庫 XML文檔)和LRM(本地資源管理器)組件。對於CIB,只有工作在DC(主節點)上的文檔是可以修改的,其他CIB都是複製DC上的那個文檔而來的。對於LRM,是執行CRM傳遞過來的在本地執行某個資源的執行和停止的具體執行人。當某個節點發生故障之後,是由DC通過PE(策略引擎)和TE(實施引擎)來決定是否搶奪資源。
Resource Agents:資源代理層,集羣資源代理(能夠管理本節點上的屬於集羣資源的某一資源的啓動,停止和狀態信息的腳本),資源代理分爲:LSB(/etc/init.d/*)、OCF(比LSB更專業,更加通用)、Legacy heartbeat(v1版本的資源管理)。
四、高可用集羣軟件
Messaging and Membership Layer(信息與關係層):
heartbeat (v1,v2,v3),heartbeat v3 分拆爲 heartbeat+pacemaker+cluster-glue
corosync (OpenAIS應用)
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、資源類型
primitive(native): 基本資源,同一時刻只能運行在一個節點,如服務的IP地址;
group: 資源組;
clone: 克隆資源(可同時運行在多個節點上),要先定義爲primitive後才能進行clone;
master/slave: 只能運行2個節點,一主一從,比如drbd服務。
2、資源粘性stickiness
表示資源是否傾向於留在當前節點
>0: 傾向於留在當前節點;
<0: 傾向於離開此節點;
=0: 由HA來決定去留;
INFINITY: 正無窮大;
-INFINITY: 負無窮大;
3、資源約束
資源的啓動是要有先後次序的,這時就需要對資源進行約束。
資源約束用以指定在哪些羣集節點上運行資源,以何種順序裝載資源,以及特定資源依賴於哪些其它資源。
pacemaker提供了三種資源約束方法:
Location(位置約束): 定義資源可以/不可以/儘可能在哪些節點上運行;
Collocation(排列約束):定義集羣資源可以/不可以在某個節點上同時運行;
Order(順序約束):定義集羣資源在節點上啓動的順序;
4、法定票數quorum
集羣服務中的每個node都有自己的票數,票數是由DC負責統計,形成CIB(集羣信息庫),然後同步集羣信息庫到各個節點上,只有quorum大於總票數的二分之一,集羣服務纔可以繼續運行,當quorum小於總票數的二分之一時,會有以下動作:
ignore(忽略): 當集羣服務只有兩個節點時,無論誰掛了,都需要切換node,所以要忽略法定票數;
freeze(凍結): 已經啓動的資源繼續運行,不允許新的資源啓動;
stop(停止): 停止集羣服務,這是默認值;
suicide(自殺): 將所有節點全部隔離;
5、隔離Fence
多臺node在共享存儲寫同一個文件時,文件系統就會崩潰,所以資源轉移之前需要先完成其他節點的隔離,隔離有2個級別:
資源隔離: 讓被隔離主機不能再使用這個資源。如讓隔離的主機不能訪問共享存儲;
主機隔離: 直接讓被隔離的主機關機。如通過STONITH讓主機斷電,強行關閉;
六、如何避免腦裂
爲了避免出現腦裂,可採用下面的預防措施:
如前所述,在主、備節點間建立一個冗餘的、可靠的物理連接來同時傳送控制信息;
一旦發生腦裂時,藉助額外設備強制性地關閉其中一個節點;
第二種方式即是俗稱的"將其它節點'爆頭'(shoot the other node in the head)",簡稱爲STONITH。基於能夠通過軟件指令關閉某節點特殊的硬件設備,Heartbeat即可實現可配置的Stonith。但當主、備服務器是基於WAN進行通信時,則很難避免"腦裂"情景的出現。因此,當構建異地"容災"的應用時,應儘量避免主、備節點共享物理資源。
本文出自 “運維點滴記錄” 博客,請務必保留此出處http://wzlinux.blog.51cto.com/8021085/1720288