這篇文章我們主要了解高可用集羣概念及工作原理,以及高可用集羣的邏輯架構等。
ll 本文導航
· 什麼是高可用集羣?
· 高可用集羣有哪些特點?
· 高可用集羣的邏輯架構
· 高可用集羣的解決方案
· 高可用集羣的工作模型
ll 要求
掌握高可用集羣的基礎原理與邏輯架構。
什麼是高可用集羣?
所謂高可用集羣,即當前服務器出現故障時,可以將該服務器中的服務、資源、IP等轉移到另外一臺服務器上,從而滿足業務的持續性;這兩臺或多臺服務器構成了服務器高可用集羣。
對於客戶端來說,集羣就像是一臺服務器,因爲集羣運行的是同一種服務,即使其中有的服務器宕機或無法通信時,也不會對業務造成影響。
高可用集羣有哪些特點?
一、高可用服務
集羣最大的目的和作用就是實現服務的高可用性,其最終目的是保證業務不會因爲線路、硬件、軟件故障而導致的服務不可用。
二、度量標準(服務可用性)
由系統可靠性(Availability)和可維護性(maintainabilit)來度量
計算方式:HA=MTTF(平均無故障事件)/(MTTF+MTTR(平均修復事件))*100%
99% 全年服務中斷時間不超過4天
99.9% 全年服務中斷時間不超過10個小時
99.99% 全年服務中斷時間不超過1個小時
99.999% 全年服務中斷時間不超過6分鐘
三、集羣節點
集羣存在所有主機都稱爲節點,每HA集羣最低要求需有2個節點;正常來說,節點數最好爲奇數。在生產環境中,HA集羣的節點數至少爲3個,可以降低發生腦裂的概率。
四、集羣服務與資源
集羣服務通常包括多個資源,多個資源組成某種集羣服務。如mysql高可用服務,其資源包括vip、mysqld、共享存儲等。對於集羣服務的管理,實際上就是對資源的管理。
五、腦裂、資源爭用、資源隔離
腦裂:因某種特殊原因造成集羣分裂成兩個小集羣,而這兩個小集羣互相不能正常通信,此時,就會發生鬧裂(Brain Split)現象。
資源爭用:當一個集羣中因特殊情況分裂成兩個小集羣,且這兩個集羣都不能通信時,這時可能會造成資源爭用的情況;分裂情況發生後,如果沒有及時的決策,那麼可能會因爲兩個小集羣同時使用一個文件系統,而造成後端共享存儲中文件損壞,甚至造成整個文件系統的崩潰。顯然,這種情況是不允許發生的。
資源隔離:主要爲了解決資源爭用的問題。資源隔離分爲節點級別隔離和資源級別隔離。所謂節點級別隔離指當集羣發生分裂時,即發生腦裂現象後,通過STONITH機制將資源隔離,並通過仲裁機制將分裂的票數不足的集羣退出集羣。STONITH指通過硬件設備,使得退出的主機重啓或關機,或者通過交換機阻斷退出的集羣向外通信和資源通信的能力。
資源隔離的解決方案:
1、當集羣分裂成兩個小集羣時會發生資源爭用的情況,爲避免爭用後端存儲系統而造成災難性的系
統崩潰,集羣系統引入了投票機制,只有擁有半數以上合法票數的集羣才能存活,否則就推出集羣
系統。
2、當集羣爲偶數時,如果分裂,兩邊可能都掌握相等的票數;因此,集羣系統不應該爲偶數,如果
是偶數則需要一個額外的ping節點參與投票。
3、票數不足的集羣退出集羣服務後,爲了保證它不會爭用資源需要STONITH機制來進行資源隔離。
所以,爲了防止腦裂,集羣節點數一般爲奇數,就算集羣分裂,也不可能使得兩個集羣的票數相等。
高可用集羣的邏輯架構
高可用集羣的解決方案
一、基於【CentOS | RHEL】5:
1、自帶: RHCS(cman+rgmanager)
2、選用第三方:corosync+pacemaker, heartbeat(v1或v2), keepalived
二、基於【CentOS | RHEL】6:
1、RHCS(cman+rgmanager)
2、corosync+rgmanager
3、cman+pacemaker
4、heartbeat v3 + pacemaker:6.4之前
5、keepalived:6.4之後
高可用集羣的工作模型
A/P:兩個節點,工作於主備模型;
N-M: N>M,N個節點,M個服務,活動節點爲N,備用節點爲N-M;
N-N:N個節點,N個服務;
A/A:雙主模型:兩個節點都是活動的;
資源轉移的方式:
rgmanager:failover domain(故障切換域), priority(優先級)
failover domain: 故障轉移域,設定一個資源只能在哪些主機上面轉移
priority: 設定,在一個轉移域中,哪些主機優先被轉移資源
pacemaker:
資源黏性:如果兩個節點傾向性位置約束一致,資源對哪個節點粘性爲正值,則留在哪個節點。
資源約束(3種類型):
位置約束:資源更傾向於哪個節點上;
inf: 無窮大
n: 傾向於運行在某節點
-n: 傾向於離開某節點
-inf: 負無窮
排列約束:資源運行在同一節點的傾向性;
inf: 兩者永遠在一起
-inf: 兩者永遠不再一起
順序約束:資源啓動次序及關閉次序;
例子:如何讓web service中的三個資源:vip、httpd及filesystem運行於同一節點上?
1、排列約束;說明三個在一起可能性inf
2、資源組(resource group);三個資源定義在一個組內,然後這個組決定在某一個節點上啓動
3、定義順序約束,保證啓動順序,vip–filesystem–httpd
對稱性與非對稱性:
對稱性: 默認所有節點都能轉移資源。
非對稱性; 有些節點不能轉移資源。
如果節點不再成爲集羣節點成員時,如何處理運行於當前節點的資源:
stoped: 直接停止服務
ignore:忽略,以前運行什麼服務現在還運行什麼。
freeze: 事先建立的連接,接續保持,不再接收新的請求。
suicide: kill掉服務。
一個資源剛配置完成時,是否啓動?
target-role: 目標角色,可以爲啓動,也可以爲不啓動。
資源代理類型(RA):
heartbeat legacy: 傳統類型
LSB: /etc/rc.d/init.d/ 下面的服務腳本
OCF:
STONITH: 專門用來實現資源隔離的
資源類型:
primitive, native : 主資源,只能運行於一個節點。
group: 組資源
clone: 克隆資源,所有節點都運行的資源,首先是主資源。
通常爲STONITH資源, Cluster filesystem, 分佈式鎖
1) 最多運行的最大數。 總clone數
2) 每一個節點上最多運行幾個。
master/slave: 主從資源內容,只能克隆兩份,主的能讀能寫,從的不能做任何操作