亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

linux高可用集群(HA)原理詳解

original 2016-11-07 11:36:59 470
abstrait:一、什么是高可用集群        高可用集群就是當(dāng)某一個節(jié)點或服務(wù)器發(fā)生故障時,另一個 節(jié)點能夠自動且立即向外提供服務(wù),即將有故障節(jié)點上的資源轉(zhuǎn)移到另一個節(jié)點上去,這樣另一個節(jié)點有了資源既可以向外提供服務(wù)。高可用集群是用于單個節(jié)點發(fā) 生故障時,能夠自動將資源、服務(wù)進行切換,這樣可以保證服務(wù)一直在線。在這個過程中,對于

一、什么是高可用集群

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

二、高可用集群的衡量標(biāo)準(zhǔn)

高可用集群一般是通過系統(tǒng)的可靠性(reliability)和系統(tǒng) 的可維護性(maintainability)來衡量的。通常用平均無故障時間(MTTF)來衡量系統(tǒng)的可靠性,用平均維護 時間(MTTR)來衡量系統(tǒng)的可維護性。因此,一個高可用集群服務(wù)可以這樣來定義:HA=MTTF/(MTTF+MTTR)*100%。

一般高可用集群的標(biāo)準(zhǔn)有如下幾種:

99%:表示 一年宕機時間不超過4天

99.9% :表示一年宕機時間不超過10小時

99.99%: 表示一年宕機時間不超過1小時

99.999% :表示一年宕機時間不超過6分鐘

三、高可用集群的三種方式

實現(xiàn)高可用集群有三種方式:

(1)、主從方式(非對稱)

這種方式組建的高可用集群通常包含2個節(jié)點和一個或多個服務(wù)器,其中一臺作為主節(jié)點(active),另一臺作為備份節(jié)點(standy)。備份節(jié)點隨時都在檢測主節(jié)點的健康狀況,當(dāng)主節(jié)點發(fā)生故障時,服務(wù)會自動切換到備份節(jié)點上以保證服務(wù)正常運行。

這種方式下的高可用集群其中的備份節(jié)點平時不會啟動服務(wù),只有發(fā)生故障時才會有用,因此感覺比較浪費。

(2)、對稱方式

這種方式一般包含2個節(jié)點和一個或多個服務(wù),其中每一個節(jié)點都運行著不同的服務(wù)且相互作為備份,兩個節(jié)點互相檢測對方的健康狀況,這樣當(dāng)其中一個節(jié)點發(fā)生故障時,該節(jié)點上的服務(wù)會自動切換到另一個節(jié)點上去。這樣可以保證服務(wù)正常運行。

(3)、多機方式

這種集群包含多個節(jié)點和多個服務(wù)。每一個節(jié)點都可能運行和不運行服務(wù),每臺服務(wù)器都監(jiān)視著幾個指定的服務(wù),當(dāng)其中的一個節(jié)點發(fā)生故障時,會自動切換到這組服務(wù)器中的一個節(jié)點上去。

四、高可用集群的組件

實現(xiàn)高可用集群需要用到如下組件:

1、 Messaging  Layer:可以理解為信息層,主要的作用是傳遞當(dāng)前節(jié)點的心跳信息,并告知給對方,這樣對方就知道其他節(jié)點是否在線。如果不在線,則可以實現(xiàn)資源轉(zhuǎn)移, 這樣另一臺節(jié)點就可以充當(dāng)主節(jié)點,并正常提供服務(wù)。傳遞心跳信息一般使用一根心跳線連接,該線接口可以使用串行接口也可以是以太網(wǎng)接口來連接。每一個節(jié)點 上都包含信息層。

可以提供該組件的軟件有:

(1)、heartbeat

heartbeat有三個版本即heartbeat v1、heartbeat  v2和heartbeat  v3

heartbeat v1是比較老的版本,heartbeat v2是目前穩(wěn)定的版本,在做實驗的時候使用該版本。

(2)、corosync(openAIS的子項目)

(3)、keepalive

(4)、cman

Heartbeat 是比較常用的軟件,Keepalived配置相對比較簡單,而ultramonkey好像不怎么常用,Corosync比heartbeat功能還要強大,功能更加豐富。
后續(xù)實驗過程以上三種都會使用到

2、 CRM:Cluster  Resource Messager,該組件叫做資源管理器,它主要是用來提供那些不具有高可用的服務(wù)提供高可用性的。它需要借助Messaging  Layer來實現(xiàn)工作,因此工作在Messaging Layer上層。資源管理器的主要工作是根據(jù)messaging Layer傳遞的健康信息來決定服務(wù)的啟動、停止和資源轉(zhuǎn)移、資源的定義和資源分配。在每一個節(jié)點上都包含一個CRM,且每個CRM都維護這一個 CIB(Cluster Internet  Base,集群信息庫),只有在主節(jié)點上的CIB是可以修改的,其他節(jié)點上的CIB都是從主節(jié)點那里復(fù)制而來的。在CRM中還包含LRM和DC等組件。

可以提供CRM的軟件有:

heartbeat v1自帶的資源管理為haresource

heartbeat v2自帶的資源管理有haresource和crm

其中crm由于配置文件是XML格式的,大多數(shù)人如果不懂其語法格式的話,可能會出現(xiàn)配置錯誤。因此crm提供了一個監(jiān)聽端口,可以用其它GUI工具來配置管理集群

Heartbeat V3 版后資源管理器獨立出來,而不是作為Heartbeat的一部分了,它的名字叫Pacemaker功能異常強大,還提供了命令行工具來管理集群。

Cman 是紅帽開發(fā)的一個資源管理器,在紅帽5.X版本上可能遇到,6.x版本后紅帽也開始使用強大的pacemaker

3、LRM:Local Resource  Messager,叫做本地資源管理器,它是CRM的一個子組件,用來獲取某個資源的狀態(tài),并且管理本地資源的。例如:當(dāng)檢測到對方?jīng)]有心跳信息時,則會啟動本地相應(yīng)服務(wù)。

4、 DC:可以理解為事務(wù)協(xié)調(diào)員,這個是當(dāng)多個節(jié)點之間彼此收不到對方的心跳信息時,這樣各個節(jié)點都會認(rèn)為對方發(fā)生故障了,于是就會產(chǎn)塵分裂狀況(分組)。并 且都運行著相關(guān)服務(wù),因此就會發(fā)生資源爭奪的狀況。因此,事務(wù)協(xié)調(diào)員在這種情況下應(yīng)運而生。事務(wù)協(xié)調(diào)員會根據(jù)每個組的法定票數(shù)來決定哪些節(jié)點啟動服務(wù),哪 些節(jié)點停止服務(wù)。 例如高可用集群有3個節(jié)點,其中2個節(jié)點可以正常傳遞心跳信息,與另一個節(jié)點不能相互傳遞心跳信息,因此,這樣3個節(jié)點就被分成了2 組,其中每一個組都會推選一個DC,用來收集每個組中集群的事務(wù)信息,并形成CIB,且同步到每一個集群節(jié)點上。同時DC還會統(tǒng)計每個組的法定票數(shù)(quorum),當(dāng)該組的法定票數(shù)大于二分之一時,則表示啟動該組節(jié)點上的服務(wù);否則停止該節(jié)點上的服務(wù)。對于某些性能比較強的節(jié)點來說,它可以投多張票,因此每個節(jié)點的法定票數(shù)并不是只有一票,需要根據(jù)服務(wù)器的性能來確定。DC一般位于主節(jié)點上。

5、PE和TE

PE和TE也是DC的子組件,其中:

PE(Policy Engine):策略引擎,來定義資源轉(zhuǎn)移的一整套轉(zhuǎn)移方式,但只是做策略者,并不親自來參加資源轉(zhuǎn)移的過程,而是讓TE來執(zhí)行自己的策略。

TE(Transition Engine): 就是來執(zhí)行PE做出的策略的并且只有DC上才運行PE和TE。

6、stonithd組件
STONITH(Shoot The Other Node in the Head,”爆頭“), 這種方式直接操作電源開關(guān),當(dāng)一個節(jié)點發(fā)生故障時,另 一個節(jié)點如果能偵測到,就會通過網(wǎng)絡(luò)發(fā)出命令,控制故障節(jié)點的電源開關(guān),通過暫時斷電,而又上電的方式使故障節(jié)點被重啟動或者直接斷電, 這種方式需要硬件支持。

如果備份節(jié)點在某一時刻不能收到主節(jié)點的心跳信息時,那么如果此時備份節(jié)點立刻搶占資源時,而此時主節(jié)點正好在執(zhí)行 寫操作,備份節(jié)點一旦也執(zhí)行相應(yīng)的寫操作,會導(dǎo)致文件系統(tǒng)錯亂或者服務(wù)器崩潰,因此在搶占資源的時候可以使用資源隔離機制來防止此類事件發(fā)生。而我們常常 使用stonithd(即爆頭)來使主節(jié)點不在搶占資源。

其中資源隔離包括:

(1)、節(jié)點級別

使用stonithd設(shè)備來實現(xiàn)

(2)、資源級別

例如:使用FC SAN switch可以實現(xiàn)在存儲資源級別拒絕某節(jié)點的訪問

7、共享存儲

對 于某些服務(wù)如http、mysql等服務(wù),需要將某些數(shù)據(jù)共享,這樣當(dāng)使用不同的節(jié)點來訪問存儲設(shè)備時,都可以返回正確的信息。如果不使用存儲設(shè)備,假設(shè) http服務(wù)為例,當(dāng)某個客戶想訪問某個圖片時,如果這個圖片只放在某個指定的服務(wù)器上時,一旦該服務(wù)器掛了,http服務(wù)就會切換到另一臺設(shè)備上去,而 另一臺設(shè)備上面沒有該圖片,那么該用戶此時就不能訪問該圖片了,當(dāng)然這種情況是我們不想看到了。為了解決這類事件發(fā)生,可以使用共享存儲設(shè)備,將相關(guān)的數(shù) 據(jù)放在共享設(shè)備上,這樣無論那一臺服務(wù)器掛了,都不會影響用戶的訪問。

常用的共享存儲設(shè)備有如下三種:

DAS:Direct  Attached  Storage,直接附加存儲

NAS:Network Attached Storage,網(wǎng)絡(luò)附加存儲

SAN:Storage  Area  Network,存儲區(qū)域網(wǎng)絡(luò)

因此,一個高可用集群服務(wù)的組件架構(gòu)大概是這樣子的:

17.png

8、資源

在上面好多地方都講到了資源,那么什么是資源呢?實現(xiàn)一個高可用性需要那些資源呢?

其實資源就是啟動一個服務(wù)需要的子項目。例如啟動一個httpd服務(wù),需要ip,也需要服務(wù)腳本、還需要文件系統(tǒng)(用來存儲數(shù)據(jù)的),這些我們都可以統(tǒng)稱為資源。因此,實現(xiàn)一個高可用集群一般需要

ip、服務(wù)(腳本)和文件系統(tǒng)(存儲數(shù)據(jù)),當(dāng)然有些高可用集群不需要存儲設(shè)備的。

資源也是有類型的,可以分為這樣幾類:

(1)、primitive:可以理解為主資源,有時候看到的會是native,都是一個意思,該資源只在主節(jié)點上有。(當(dāng)然備份節(jié)點一旦將資源奪過來了,也就成了主節(jié)點,因此,主節(jié)點是相對來說的)

(2)、group:組資源,將多個資源綁定在一個同一個組上面且運行在同一個節(jié)點上。

(3)、clone:是將primitive資源克隆n份且運行在每一個節(jié)點上

(4)、master/slave:也是將primitive克隆2份、其中master和slave節(jié)點各運行一份,且只能在這2個節(jié)點上運行。

對于某些集群服務(wù)來說,啟動相關(guān)的資源是有先后順序的。例如啟動一個mysql集群服務(wù),首先應(yīng)該先掛載共享存儲設(shè)備,否則即時mysql服務(wù)啟動起來了,用戶也訪問不了數(shù)據(jù)。因此,一般說來,我們需要將資源進行約束。資源約束有如下幾類:

(1)、 位置約束(location):資源對節(jié)點的傾向程度,通??梢允褂靡粋€分?jǐn)?shù)(score)來定義,當(dāng)score為正值時,表示資源傾向與此節(jié)點;負(fù)值表 示資源傾向逃離于此節(jié)點。也可以將score定義為-inf(負(fù)無窮大)和inf(正無窮大)。例如:有三個節(jié)點rs1、rs2、rs3當(dāng)rs1是主節(jié)點 且發(fā)生故障時,則比較rs2和rs3的score值,誰是正值,則資源將會轉(zhuǎn)移到哪個節(jié)點上去。

(2)、排列約束(colocation):用來定義資源是否可以在一起,通常也是使用一個score來定義的。當(dāng)score是正值表示資源可以在一起;否則表示不可以在一起。通過定義資源類型為group也可以來將所有資源綁定在一起。

(3)、順序約束(order):用來定義資源啟動和停止的順序。例如,首先應(yīng)該先掛載共享存儲,在啟動httpd或mysqld服務(wù)才行吧。

資源粘性:用來定義資源是否傾向留在該節(jié)點。通常使用score來定義,當(dāng)score為正數(shù)表示樂意留在當(dāng)前節(jié)點,負(fù)數(shù)表示不樂意留在當(dāng)前節(jié)點。

當(dāng)某個高可用集群即包含資源粘性又包含位置約束,一旦該節(jié)點發(fā)生故障后,資源就會轉(zhuǎn)移到另一個節(jié)點上去。但是當(dāng)之前的節(jié)點恢復(fù)正常時,需要比較所有的資源粘性之和與所有位置約束之和誰大誰小,這樣資源才會留在大的一方。

資源轉(zhuǎn)移

將有故障節(jié)點的VIP設(shè)置到另一個節(jié)點上去,并在另一個節(jié)點啟用相應(yīng)的服務(wù),掛載相應(yīng)的存儲設(shè)備等等都可以叫做資源轉(zhuǎn)移。

9、資源代理(Resource Agent)

RA實際負(fù)責(zé)啟動資源的,LRM用來管理本地資源的,但是不能啟動資源,當(dāng)需要啟動資源時會調(diào)用RA來啟動,RA是一個腳本文件,在一個節(jié)點上可能有多個RA。通常在rhel上,啟動系統(tǒng)服務(wù)的不也都是一些腳本文件嗎。常見的RA有如下風(fēng)格:

(1)、LSB(Linux  Standard  Base),這是一種我們常見的如/etc/init.d/下的標(biāo)準(zhǔn)linux腳本風(fēng)格。

(2)、OCF(Open Cluster Framwork):OCF腳本是比LSB更強大的一種腳本,支持更多的參數(shù)

一般說來,構(gòu)建一個高可用集群服務(wù)需要以上組件才能完成。

Notes de version

Entrées populaires