高可用集羣的構架層次:
1. 後端主機層: 這一層主要是正在運行在物理主機上的服務。
2. Message layer: 信息傳遞層,主要傳遞心跳信息
2. Cluster Resources Manager(CRM): 集羣資源管理器層,這一層是心跳信息傳遞層管理器。用於管理信條信息的傳遞和收集
3. Local Resources Manager(LRM): 本地資源管理器層, 用於對於收集到的心跳信息進行資源決策調整。是否轉移服務等等
4. Resource Agent(RA): 資源代理層,這一層主要是具體啓動或停止具體資源的腳本。遵循{start|stop|restart|status}服務腳本使用格式
各層次實現的軟件和對應關係
1. Message layer層:
1) heartbeat v1
2) heartbeat v2
3) heartbeat v3
4)(OpenAIS)corosync
5) cman
2. CRM層
1) heartbeat v1:
使用文本配置接口haresources
2) heartbeat v2:
通過一個crmd服務來實現配置,各節點都需要運行crmd服務,並且使用crmsh或者heartbeat-gui來進行配置
3) heartbeat v3: heartbeat + pacemaker + cluster-glue
pacemaker: 集羣資源管理器服務
CLI: crm(SuSE), pcs(redhat)
GUI: hawk, LCMC, pacemaker-mgmt
cluster-glue: 可以做爲中間粘合層,使用其他資源管理器例如crmsh
4) cman:
使用rgmanager(resource group manager)實現管理, 具有Failover Domain故障轉移域這一特性
也可以使用RHCS(Redhat Cluster Suite)套件來進行管理: Conga的全生命週期接口
5) corosync:
使用rgmanager或者pacemaker
3. LRM層通常和CRM層在實現上是通過CRM的一個組件實現
4. RA層
1) heartbeat legacy: heartbeat的傳統類型
2) LSB:/etc/rc.d/init.d/*
3) OCF(Open Cluster Framework):有提供商提供,有pacemaker,linbit
4) STONITH: 用來聯合硬件設備工作,可以把故障機電源強制關閉。
RHEL OR CentOS高可用集羣解決方案:
1. RHEL(CentOS)5:
1) 自帶: RHCS(cman+rgmanager)
2) 選用第三方:corosync+pacemaker, heartbeat(v1或v2), keepalived
2. RHEL(CentOS)6:
1) RHCS(cman+rgmanager)
2) corosync+rgmanager
3) cman+pacemaker
4) heartbeat v3 + pacemaker
5) keepalived
應用方式:
1) 做前端負載均衡器的高可用:keepalived
2) 做大規模的高用集羣:corosync(cman)+pacemaker
資源隔離:解決資源徵用問題
1. 場景一:
當集羣中分裂出兩組子集羣,並且兩個子集羣之間並不能通信時, 兩個子集羣會發生資源徵用。如果兩集羣同時徵用後端存儲系統,則會造成災難性的文件系統崩潰。
爲了解決此問題,集羣系統引入了投票機制,只有擁有半數以上合法票數的集羣才能存活,否則退出集羣系統。
votes: 投票權
total: 總票數
quarum: 滿足法定人數,半數以上
2. 場景二:
如果集羣爲偶數時,如果集羣分裂,兩邊可能都掌握相等的票數,因此集羣系統不應該爲偶數,如果是偶數則需要一個額外的ping節點參與投票。
3. 當分裂的票數不足集羣退出集羣系統後,爲了保證它們永遠不會徵用資源需要STONITH機制來進行資源隔離。
STONITH具體來說,就是通過硬件設備,使得退出的主機重啓或者關機。或者通過交換機阻斷推出集羣主機的向外通信和資源通信網絡
HA集羣的工作模型:
1. A/P: two node: 主被模型,要藉助於ping node 工作
2. N-M: N個節點M個服務, N>M, 活動節點爲N, 備用節點爲N-M
3. N-N: N個節點N個服務, N節點都有服務,如果一個壞了,會有一個節點運行多個服務
4. A/A: 雙主模型,兩個節點都是活動的。兩個節點運行兩個不同的服務。也可以提供同一個服務,比如ipvs, 前端基於DNS輪詢。
資源轉移的限定方式:
1. rgmanager:
failover domain: 故障轉移域,設定一個資源只能在哪些主機上面轉移
priority: 設定,在一個轉移域中,哪些主機優先被轉移資源
2. pacemaker: 通過資源約束,和粘性來限定資源轉移方式。
資源黏性: 如果兩個節點傾向性位置約束一致,資源對哪個節點粘性爲正值,則留在哪個節點。
資源約束(3種類型):
位置約束:資源更傾向於哪個節點上;通過一個數值來表示。
1) inf: 無窮大
2) n: 傾向於運行在某節點
3) -n: 傾向於離開某節點
4) -inf: 負無窮,如果所有節點全不可選,只能在此節點。
排列約束:資源運行在同一節點的傾向性;
1) inf: 兩者永遠在一起
2) -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: 主從資源內容,只能克隆兩份,主的能讀能寫,從的不能做任何操作