HA cluster原理

HA cluster

一、什么是高可用集群
 
高可用集群就是當某一個節點或服務器發生故障時,另一個節點能夠自動且立即向外提供服務,即將有故障節點上的資源轉移到另一個節點上去,這樣另一個節點有了資源既可以向外提供服務。高可用集群是用于單個節點發生故障時,能夠自動將資源、服務進行切換,這樣可以保證服務一直在線。在這個過程中,對于客戶端來說是透明的。
 

            ————————————————————————————————–
            ————————————————————————————————–


二、高可用集群衡量標準
 
高可用集群一般是通過系統的可靠性(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某個網關或設備,通過通不通來仲裁(兩節點集群,需要關閉投票仲裁,使用ping來決定

                 注意:一般集群中的主機數量都為3臺以上,且為奇數;目的是為了防止分離時,剛好分離成每邊成員都是相等了,造成資源的爭用,服務無法提供,但是也可以關閉投票機制,使用ping node,但是還是不能完全彌補此種缺陷


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的架構層次與解決方案

         

              HA Cluster.png

 
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服務才行吧。


            ————————————————————————————————–

            ————————————————————————————————–


總結:

            

           為了構建一個較為完善的高可用集群,我們應該使用三個或者更多的的節點,組織起來后負責實現一個復雜功能。這個功能包含這些節點之間通信狀態,健康狀態是否正常;每個節點的資源狀態輸出;每個節點上邊都運行一個軟件,該軟件通過單播多播,廣播的方式進行通訊來完成事務集群決策。輸出完之后通過上層應用進行調用,但是多數應用都沒有這種功能,所以我們在此之后再加一層次,這個層次稱為資源管理器。資源管理器真正管理資源是靠資源管理器中的一個子層LRM。但是LRM對于某個功能的具體實現需要調用腳本,或者調用一個systemd的until file來實現,這一個又一個的實現,我們稱之為資源代理,所有資源代理集合起來,我們稱之為資源代理層。

這只是規范











原創文章,作者:hunter,如若轉載,請注明出處:http://www.www58058.com/60964

(0)
hunterhunter
上一篇 2016-11-27 09:12
下一篇 2016-11-27 09:19

相關推薦

  • if、case 語法

    1. 條件選擇 if 語句         選擇執行:             ? 單分支      &nbs…

    Linux干貨 2016-08-22
  • Redis高可用架構(1)—Keepalive+VIP

    最近整理一下Redis高可用架構的文檔,也準備分享出來,雖然這些架構也不是很復雜。Redis的高可用方案目前主要嘗試過5種方式,其中2種方式已經在線上使用。 1)Redis Master-Slave + Keepalive + VIP。這是很經典的db架構,也可以用與mysql的主從切換?;驹硎牵篕eepalive通過腳本檢測master的存活,然后通過…

    Linux干貨 2016-04-13
  • 關于綁定與不綁定CPU的對比

        此文嚴格意義上說,我沒有很大的把握,其中關于CPU調度域的概念現在還有些混淆,但還是發出來,希望能做點鋪路的貢獻吧。    另外CPU調度域的原理我沒辦法自己寫,能力尚淺, 只能將IBM知識庫 和 另一位博主的文章摘錄如下,并添加了些幫助理解的圖片,希望能幫助到初學者。 …

    Linux干貨 2016-05-03
  • dns 服務

     DNS服務 1.正向解析    1. 創建解析庫                    2.改配置文件主要改 any no no 3個選項   3.添加一個解…

    2017-05-31
  • 硬盤基礎知識及 MBR、GPT分區格式

    一,硬盤知識     硬盤接口類型:         ? 并行:             IDE: 133MB/s &n…

    Linux干貨 2016-09-19
  • Linux下硬連接和軟連接的區別

    Linux下硬鏈接與軟鏈接的區別   鏈接,是指在計算機文件之間傳遞參數和控制命令,并把它們組成一個可執行的整體的過程。例如我們常見的windows系統下的“快捷方式”,它是一種鏈接,人們可以通過它來直接訪問計算機上的某個文件,不必逐級在硬盤目錄下尋找;互聯網上的“超文本鏈接”,它用文字鏈接的形式來指向一個頁面,人們可以通過此鏈接快速訪問網站的頁面…

    Linux干貨 2016-10-21
欧美性久久久久