一、什麼是高可用集群
高可用集群就是當某一個節點或服務器發生故障時,另一個節點能夠自動且立即向外提供服務,即將有故障節點上的資源轉移到另一個節點上去,這樣另一個節點有了資源既可以向外提供服務。高可用集群是用於單個節點發生故障時,能夠自動將資源、服務進行切換,這樣可以保證服務一直在線。在這個過程中,對於客戶端來說是透明的。
二、高可用集群衡量標准
高可用集群一般是通過系統的可靠性(reliability)和系統的可維護性(maintainability)來衡量的。通常用平均無故障時間(MTTF)來衡量系統的可靠性,用平均維護 時間(MTTR)來衡量系統的可維護性。因此,一個高可用集群服務可以這樣來定義:HA=MTTF/(MTTF+MTTR)*100%
一般高可用集群的標准有如下幾種:
99%:表示 一年宕機時間不超過4天
99.9% :表示一年宕機時間不超過10小時
99.99%: 表示一年宕機時間不超過1小時
99.999% :表示一年宕機時間不超過6分鐘
三、HA Cluster 相關特性
1、提供冗余系統:HA Cluster:為提升系統調用性,組合多台主機構建成為的集群
2、vote system投票系統:HA中的各節點無法探測彼此的心跳信息時,必須無法協調工作;此種狀態即為partitioned cluster;
投票原則:
(1)少數服從多數原則:quorum
whit quorum(擁有法定票數) > total1/2
without quorum(無法定票數)<= total1/2
當HA節點數為奇數時,通過判斷投票數來仲裁,當HA節點數為偶數時,就需要使用其他仲裁設備
(2)仲裁設備
quorum disk (qdisk):qdisk 是一個小於 10MB 導入所有集群節點的共享磁盤設備。qdiskd 是運行在集群的所有節點上用來定期評估自身的健康情況的後台服務,它定期將其節點的狀態信息放 入到 qdisk 上。 每 qdiskd 服務在提交其節點信息後,接著查看 qdisk 上其他節點的狀態,權重為(N / 2);
ping node:同時ping某個網關或設備,通過通不通來仲裁
3、failover: 失效轉移,故障轉移,failback:失效轉回,故障轉回,通過配置ha.cf文件中的auto_failback on啟用
4、心跳信息傳遞機制
(1)Serail cable:串形接口連接,作用范圍有限,不建議使用;
(2)Ethernet cable:網線連接,通過網絡接口(中間可通過交換機)將主機連接起來;
(3)UDP Unicast:UDP單播方式
UDP Multicast:UDP組播方式(相對比較常用)
UDP Broadcast:UDP廣播方式
說明:組播地址:用於標識一個IP組播域;IANA(Internet Assigned number authority)把D類地址空間分配給IP組播使用;其范圍是:224.0.0.0-239.255.255.255;
永久組播地址:224.0.0.0-224.0.0.255;
臨時組播地址:224.0.1.0-238.255.255.255;
本地組播地址:239.0.0.0-239.255.255.255, 僅在特定本地范圍內有效
四、HA Cluster的工作模型
1、主從方式(非對稱)A/P:兩節點集群,active, passive,工作於主備模型;
集群包含2個節點和一個或多個服務器,備份節點隨時都在檢測主節點的健康狀態信息,當主節點發生故障時,服務會自動切換到備份節點保證運行,平時備份節點不會運行(感覺會讓費資源)
2、對稱方式:A/A:兩節點集群,active/active,工作於雙主模型;
集群包含2個節點和一個或多個服務,其中每一個節點都運行著不同的服務且相互作為備份,兩個節點互相檢測對方的健康狀況,這樣當其中一個節點發生故障時,該節點上的服務會自動切換到另一個節點上去,保證服務運行
3、多機模型:M-N(M個節點,N個服務,M>N)或M-M(M個節點,M個服務)
集群包含多個節點和多個服務。每一個節點都可能運行和不運行服務,每台服務器都監視著幾個指定的服務,當其中的一個節點發生故障時,會自動切換到這組服務器中的一個節點上去。
五、HA Cluster的架構層次與解決方案
1、Messaging Layer:主要為信息層,作用是傳遞當前節點的心跳信息,告知其他節點是否在線,如果不在線,可根據相關機制實現資源轉移,同時傳遞集群相關事務消息(每個節點安裝相關心跳軟件,通過網線連接起來,相互監聽在相關IP地址和端口上)
解決方案:
(1)heartbeat V1,V2(穩定版),V3
(2)corosync(openAIS的子項目分出研發,功能強大)
(3)keepalive
(4)cman
2、CRM(Cluster Resource Messager):集群資源管理器
主要用來提供那些不具有高可用的服務提供高可用性的,調用Messaging Layer來實現工作。因此工作在Messaging Layer上層。資源管理器的主要工作是根據messaging Layer傳遞的健康信息來決定服務的啟動、停止和資源轉移、資源的定義和資源分配。在每一個節點上都包含一個CRM,且每個CRM都維護這一個CIB(Cluster Internet Base,集群信息庫),只有在主節點上的CIB是可以修改的,其他節點上的CIB都是從主節點那裡復制而來的。在CRM中還包含LRM和DC等組件
解決方案:
(1)heartbeat v1 haresources (配置接口:配置文件,文件名為haresources)
(2)heartbeat v2 crm (在各節點運行一個crmd進程,配置接口:命令行客戶端程序crmsh,GUI客戶端:hb_gui);
(3)heartbeat v3, pacemaker (pacemaker可以以插件或獨立方式運行;配置接口,CLI接口:crmsh, pcs; GUI: hawk(webgui), LCMC, pacemaker-mgmt);
(4)rgmanager (配置接口,CLI:clustat, cman_tool; GUI: Conga(luci+ricci))
組合方式:
(1)heartbeat v1
(2)heartbeat v2
(3)heartbeat v3 + pacemaker
(4)corosync + pacemaker
(5)cman + rgmanager (RHCS)
(6)cman + pacemaker
3、LRM(Local Resource Messager):本地資源管理器,屬於CRM的組件,用來獲取某個資源狀態,並且管理本地資源,例如:當檢測到對方沒有心跳信息時,則會啟動本地相關服務
4、DC:理解為事務協調員,當集群節點發生故障,出現分組的情況時,由於可能都運行著相關服務,會發生資源搶奪的情況,因此事務協調員DC會根據每個組的法定票數來決定哪些節點啟動服務,哪些節點停止服務
5、資源隔離組件:如果主節點出現相關故障,此時備份節點立即搶占資源,而主節點正在執行寫操作,備份節點一旦也執行相應的寫操作,會導致文件系統錯亂和服務器崩潰,因此隔離機制此種情況需要采用資源
(1)節點級別隔離
STONITH(Shoot The Other Node in the Head,”爆頭“)通過控制電源開關斷電,上電來使節點重啟或關機
(2)資源級別
FC SAN switch可以實現在存儲資源級別拒絕某節點的訪問
6、資源代理RA(Resource Agent):RA實際復制啟動相關資源的,是一個腳本文件,一個節點可以有多個RA
(1)heartbeat legacy:heartbeat傳統類型的RA,通常位於/etc/ha.d/haresources.d/目錄下;
(2)LSB:Linux Standard Base, /etc/rc.d/init.d目錄下的腳本,至少接受4個參數:{start|stop|restart|status};
(3)OCF:Open Cluster Framework,子類別:provider
STONITH:專用於實現調用STONITH設備功能的資源;通常為clone類型
7、資源:資源就是啟動一個服務需要的子項目。例如啟動一個httpd服務,需要ip,也需要服務腳本、還需要文件系統(用來存儲數據的),這些我們都可以統稱為資源
(1)資源類型:
(a)primitive:主資源,只能運行於集群內的某單個節點;(也稱作native);
(b)group:組資源,容器,包含一個或多個資源,這些資源可通過“組”這個資源統一進行調度;
(c)clone:克隆資源,可以在同一個集群內的多個節點運行多份克隆;
(d)master/slave:主從資源,在同一個集群內部於兩個節點運行兩份資源,其中一個主,一個為從;
(2)資源約束
(a)location:位置約束,定義資源對節點的傾向性;用數值來表示,-oo, +oo;
(b)colocation:排列約束,定義資源彼此間“在一起”傾向性;-oo, +oo
group(分組):亦能實現將多個資源綁定在一起;
(c)order:順序約束,定義資源在同一個節點上啟動時的先後順序;例如:首先應該先掛載共享存儲,在啟動httpd或mysqld服務才行吧。