HA(High Availability)高可用集群,其特點為根據(jù)實際需求為前端Diretor,后端RS-server,數(shù)據(jù)庫服務(wù)器,共享存儲等集群節(jié)點做一個從備份服務(wù)器或者多個服務(wù)器互相備份,一旦主服務(wù)器掛掉,備份服務(wù)器能立馬檢測到并取代主服務(wù)器上的資源繼續(xù)運行服務(wù),從而最大限度避免了因服務(wù)器宕機造成的服務(wù)中止。
主節(jié)點(active/primary)備節(jié)點(passive/standby)
主調(diào)度器(Director)一般為集群中的關(guān)鍵節(jié)點,所以一般都有備份節(jié)點的存在;而后端RS-server可以根據(jù)實際可靠需求加備份節(jié)點,而存儲服務(wù)器,如Mysql-Server,也作為集群的關(guān)鍵節(jié)點,一般都配有主從服務(wù)器。
HA集群著重服務(wù)的可靠性和穩(wěn)定性兩個方面
可用性=服務(wù)在線時間/(服務(wù)在線時間+故障處理時間)
可用性由 99%,99.9%,99.99%,99.999%不斷提升,每多一個9,服務(wù)可用性提高十倍。在某些應(yīng)用中服務(wù)可用性都要達到五個9的級別如:金融交易系統(tǒng).....
HA Resource(高可用集群資源):一旦節(jié)點故障這些資源需要轉(zhuǎn)移到其他備份節(jié)點上,包括VIP,服務(wù),隔離設(shè)備,文件系統(tǒng)。每個RS上都運行有服務(wù)資源,當有多個RS節(jié)點時,一旦某個節(jié)點發(fā)生故障要立馬進行資源轉(zhuǎn)移到其他節(jié)點,讓其他節(jié)點處理未處理完的請求,并且要防止Director將前端請求繼續(xù)此節(jié)點,但有如此多的節(jié)點存在,故障發(fā)生時到底往哪個節(jié)點轉(zhuǎn)移了?且要是這個故障節(jié)點又恢復(fù)了如何處理?這時就要定義資源的黏性,資源的約束等。
資源的粘性:資源更傾向運行在哪個節(jié)點上,即資源與節(jié)點的傾向性
如:定義web服務(wù)在A服務(wù)器上的資源粘性為120,在B服務(wù)器上的資源粘性為100,一旦A發(fā)生故障又恢復(fù)正常后web服務(wù)又會從B服務(wù)器上轉(zhuǎn)移到A服務(wù)器
資源的黏性:資源是否傾向運行在當前節(jié)點,Score>0(傾向)Scoro<0(不傾向,即一有其他可運行此服務(wù)的節(jié)點,資源就立馬轉(zhuǎn)移到其他節(jié)點)
資源的約束:定義資源與資源的傾向性
-
colocation(排列約束):定義不同資源能否運行在同一個節(jié)點上,Score>0(可以),Score<0(不可以)?
-inf(負無窮。。決不能運行在同一節(jié)點)
inf(正無窮。。必須運行在同一個節(jié)點)
-
location(位置約束):每個節(jié)點都可以給某資源一個Score,Score >0(資源傾向運行在此節(jié)點)
-
Score <0(資源不傾向運行在此節(jié)點)
一般資源黏性+位置約束 哪個大,資源更傾向運行在那個節(jié)點
Order(順序約束):定義資源啟動關(guān)閉時的順序,因為不同資源可能有依賴關(guān)系如:VIP與IPVS規(guī)則,VIP先啟動IPVS規(guī)則后啟動
資源分類
-
Primitive 一個資源單獨只運行在一個節(jié)點上(主資源)。
-
clone 每個節(jié)點上都運行此資源。
-
group 將多個資源劃分為一個組,同組資源同進退,一起在節(jié)點上進行轉(zhuǎn)移。
-
master/slave 主/從,一個資源只能運行在兩個節(jié)點上,且一個為主一個為從。
備份節(jié)點如何知道主節(jié)點故障?
heartbeat(心跳信息):每個節(jié)點都要隨時與備份節(jié)點上進行通信,目的為檢測對方是否在線
但當存在三個及三個以上節(jié)點時且這些節(jié)點也要互相傳輸心跳信息(如 運行有同種服務(wù)的RS之間互為備份節(jié)點,),從而判斷自己是否故障,是否為合法節(jié)點,如何判斷?
將所有節(jié)點定義在一個組播內(nèi)讓其互相ping, 比如有A、B、C、D、E 五個RS節(jié)點運行有Web服務(wù),某時刻A、B、C三個節(jié)點能互相ping通,而D、E兩個節(jié)點可以互相ping 通,則可以定義一個Quorum(投票)機制,為每個節(jié)點定義為一票,則五個節(jié)點共五票,且定義只有獲得一半以上票數(shù)才為合法節(jié)點,所以此時A、B、C節(jié)點共三票,而D,E節(jié)點共兩票,可以認為D,E節(jié)點未非法節(jié)點(即D,E節(jié)點出了故障)
或者A節(jié)點ping不通其他節(jié)點獲得一票,而B、C、D、E四個節(jié)點可以互相ping通獲得四票,可以認為A節(jié)點為非法節(jié)點
而對于多節(jié)點集群來說,為了投票機制的實施,節(jié)點數(shù)最好為奇數(shù),獲得票數(shù)超過一半則認為合法
且可以定義不同節(jié)點的擁有票數(shù)不同,如A節(jié)點性能好有兩票投票權(quán),B節(jié)點性能一般擁有一票投票權(quán),此時就不用節(jié)點奇數(shù),只要總票數(shù)為奇數(shù)便可以產(chǎn)生決策。
一旦節(jié)點被認為為非法節(jié)點應(yīng)對其采取什么措施?
-
Freeze(凍結(jié)) 此非法只處理已經(jīng)連接的請求,不再接受新的請求,處理完請求后再進行資源轉(zhuǎn)移
-
stop 非法節(jié)點直接停止運行服務(wù),進行資源轉(zhuǎn)移,這種措施最常用
-
ignore 直接忽略 繼續(xù)正常運行服務(wù)
什么時候會用到ignore?
只有兩個互為備份的節(jié)點時
當只有兩個節(jié)點互為備份時,一旦主節(jié)點ping不通備份節(jié)點,這時因為只有兩個節(jié)點無法采取投票機制(一旦采取投票機制則兩個節(jié)點都只獲得一票,都認為自己掛掉了,那么不但主節(jié)點會停止服務(wù),原本應(yīng)該替代主節(jié)點的備份節(jié)點也因為認為自己非法而無法對主節(jié)點進行取代),主節(jié)點只能繼續(xù)運行服務(wù),直到被Stonish設(shè)備或fence設(shè)備隔離進行資源轉(zhuǎn)移,這時備份節(jié)點也會取代主節(jié)點。
為了提供一個一個MySQL服務(wù)要具有哪些資源?
-
VIP 專門提供服務(wù)
-
FIP(float IP)流動的IP,可以再節(jié)點之間轉(zhuǎn)移
-
Mysql服務(wù)
-
文件系統(tǒng)(要進行掛載)
一旦一個節(jié)點掛掉,向哪個節(jié)點轉(zhuǎn)移?
定義個節(jié)點的資源約束score,哪個score大,更傾向于向哪個節(jié)點轉(zhuǎn)移
腦裂:假設(shè)一個集群有4個RS_Server A、B、C、D
其中A正在往一個文件中寫入數(shù)據(jù),并且由于A服務(wù)器的CPU繁忙或錯誤添加了一條Iptables規(guī)則隔離了heartbeat傳輸?shù)仍?,未對其備份?jié)點發(fā)出自己的心跳信息,這時CRM(cluster resource manager 專門用來收集集群資源或服務(wù)信息的集群資源管理器)發(fā)現(xiàn)檢測不到A的心跳信息,認為A服務(wù)器掛掉了,便把A上的所有資源轉(zhuǎn)移到了其他節(jié)點比如B上,這是B節(jié)點繼續(xù)完成A節(jié)點的任務(wù)(向文件中寫入數(shù)據(jù)),就會造成A和B同時往一個文件中寫入,便會造成文件系統(tǒng)的崩潰及文件錯亂。
如何避免腦裂?
在進行資源轉(zhuǎn)移之前先將原來的節(jié)點進行資源隔離:
-
節(jié)點隔離
Stonish設(shè)備 如 直接斷電爆頭,一發(fā)現(xiàn)某節(jié)點無法傳輸heartbeat直接給其斷電
-
資源級別隔離
FC-SAN (光纖交換機)可以實現(xiàn)在存儲資源隔離故障節(jié)點的訪問
如何檢測一個節(jié)點是否故障?
-
加仲裁磁盤 主節(jié)點往一個共享磁盤中不斷寫入數(shù)據(jù),一旦備節(jié)點發(fā)現(xiàn)自己可以訪問共享磁盤但未發(fā)現(xiàn)主節(jié)點寫入數(shù)據(jù),則可以認為主節(jié)點掛掉,進行隔離
-
ping網(wǎng)關(guān) 只要能ping通網(wǎng)關(guān) 說明本節(jié)點正常,一旦ping不同則可以認為自己發(fā)生故障進行隔離
-
watchdog看門狗,協(xié)調(diào)同一個節(jié)點上不同進程每隔一段時間往watchdog中寫入數(shù)據(jù),一旦寫入中斷watchdog會嘗試重啟此進程,如果重啟不了,則此節(jié)點故障,從此集群中去掉
Massaging Layer(負責以UDP協(xié)議在主節(jié)點與備節(jié)點間以組播模式傳輸heartbeat,資源黏性,資源約束,等信息),Massaging Layer 也是一個服務(wù)(UDP/694),且要讓其開機自啟動。
Cluster Resource Manager(集群的資源管理器):專門處理統(tǒng)計收集群上每個資源的狀態(tài)如:資源黏性資源約束,節(jié)點是否健康;并又CRM的子件PE計算出資源現(xiàn)在應(yīng)該運行在哪個節(jié)點上,再由CRM的子件TE指揮每個節(jié)點的LRM完成相應(yīng)操作如:將服務(wù)從A節(jié)點遷移到B,在B節(jié)點上啟用VIP,文件系統(tǒng).....
高可用集群節(jié)點上的服務(wù)啟動都要由CRM決定,不能讓其自啟動,所以必須#chkocnfig 服務(wù)名稱 off
PE:policy engine 策略引擎
TE:Tranaction Engine 事物引擎
LRM:location Resource Manager 本地資源管理器
PE,TE,LRM都是CRM的組成
RA:Resource Agent資源代理
所有能夠負責資源啟動、關(guān)閉、重啟、狀態(tài)監(jiān)測的腳本都叫RA,RA運行在每個節(jié)點上
RA的類別
Legency heartbeat v1 RA
LSB 所有遵循linux的shell編程支持start|restart|stop|status的腳本都是LSB類型 如/etc/rc.d/init.d/目錄中的所有腳本
OCF(open cluster framework)此類腳本不但可以接受start|restart|stop|status等參數(shù),甚至可以接受monitior(監(jiān)控)等參數(shù)
DC(designated coordinator)事物協(xié)調(diào)員,DC也為CRM的子件,是在多節(jié)點中選舉出的一個節(jié)點
Messager Layer的軟件實現(xiàn)
-
heartbeat(v1 v2 v3 三個版本)
-
heartbeat v3 又分為heartbeat、pacemaker、cluster-glue
-
CoroSync 紅帽6.0后默認使用的Messaging Layer
-
Cman 紅帽5.0后默認使用的Messaging Layer 但由于工作在內(nèi)核空間且配置復(fù)雜所以6.0后換成了工作在用戶空間的CoroSync
-
keepalived keepalived的配置與應(yīng)用與前幾個相比有所不同,如對VIP的配置是基于VRRP(Virtual Router Redundancy Protocol)虛擬路由冗余協(xié)議實現(xiàn)的
CRM(cluster resource manager)層的軟件實現(xiàn)
CRM必須工作在Messaging Layer 層上
-
Haresources (heartbeat v1 v2 都有自帶)
-
CRM (heartbeat v2 自帶)
-
Pacemaker (heartbeat v3 獨立出去的項目)
-
Ragmanager (專門為Cman提供的一種crm)
所以集群的Messager Layer與CRM 組合如下:
-
haresource + heartbeat v1/v2
-
crm + heartbeat v2
-
pacemaker + corosync
-
pacemaker + heartbeat v3
-
cman + ragmanager
那么定義一個Web服務(wù)的高可用集群至少要幾個節(jié)點?要定義幾個資源?
至少需要兩個節(jié)點,上面要運行MassagerLayer 和 CRM
至少要定義四個資源 VIP 、httpd服務(wù) 、Filesystem、Stonish設(shè)備
為了避免隨便一個服務(wù)器配好資源,裝上MassagerLayer和CRM,時間再一同步就可以隨便加入我們的集群系統(tǒng),該如何處理?
首先每個節(jié)點要裝Messager Layer和CRM節(jié)點之間進行heartbeat等信息傳輸時都因該采取加密傳輸(如進行hash運算),如果有兩個節(jié)點可以進行單播傳輸heartbeat信息,兩個以上節(jié)點可以進行單播、組播、廣播傳輸heartbeat信息,高級可用集群節(jié)點上的服務(wù)必須由CRM控制,所以要設(shè)置CRM自啟動而服務(wù)要用chkconfig關(guān)閉開機自啟動,而Massager Layer也是一個服務(wù)且要開機自啟動,Messager Layer監(jiān)聽在UDP/694上,以UDP協(xié)議在Messager Layer層傳輸heartbeat等信息。
如果要配置一個HA集群要注意什么?
節(jié)點名稱要與uname -n的結(jié)果一致;節(jié)點名稱/IP的解析最好在/etc/hosts文件中,不要用DNS解析,否則DNS-Server掛掉會對集群造成影響;節(jié)點的時間必須同步;SSH互信通信(當要停止或其他節(jié)點的HA集群服務(wù)時,不能從此節(jié)點進行,而要從一個正常的節(jié)點進行HA服務(wù)的關(guān)閉或啟動)這是就必須要求能夠以SSH遠程登錄到其他節(jié)點。
那第一個節(jié)點怎么辦?
第一個節(jié)點要自我啟動,然后啟動其他節(jié)點上的服務(wù)。
-
Web
+關(guān)注
關(guān)注
2文章
1304瀏覽量
74442 -
Linux
+關(guān)注
關(guān)注
88文章
11756瀏覽量
218999 -
集群
+關(guān)注
關(guān)注
0文章
142瀏覽量
17659 -
SQL
+關(guān)注
關(guān)注
1文章
789瀏覽量
46688 -
Cyclone
+關(guān)注
關(guān)注
0文章
55瀏覽量
30951
原文標題:Linux之HA高可用集群的基礎(chǔ)概念總結(jié)
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
基于開源系統(tǒng)的高可用性集群應(yīng)用
Mesos高可用集群解決方案
淺談Kubernetes集群的高可用方案
Eureka的集群搭建方法-保證高可用
通過安裝該Linux-HA軟件可以實現(xiàn)Linux雙機系統(tǒng)的高可用性解決方案
簡單分析Java高可用集群和微服務(wù)架構(gòu)
搭建Keepalived+Lvs+Nginx高可用集群負載均衡
FusionCompute集群重點知識點梳理
Linux之HA高可用集群知識,學到就是賺到
評論