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