四、高可用叢集的分類
1.雙機熱備(Active/Passive)
官方說明:Two-node Active/Passive clusters using Pacemaker and DRBD are a cost-effective solution for many High Availability situations.
2.多節點熱備(N+1)
官方說明:By supporting many nodes, Pacemaker can dramatically reduce hardware costs by allowing several active/passive clusters to be combined and share a common backup node.
3.多節點共享存儲(N-TO-N)
官方說明:When shared storage is available, every node can potentially be used for failover. Pacemaker can even run multiple copies of services to spread out the workload.
4.共享存儲熱備 (Split Site)
官方說明:Pacemaker 1.2 will include enhancements to simplify the creation of split-site clusters.
五、高可用叢集軟體
Messaging and Membership Layer(資訊與關系層):
heartbeat (v1,v2,v3),heartbeat v3 分拆 heartbeat pacemaker cluster-glue
corosync
cman
keepalived
ultramokey
Cluster Resource Manager Layer(資源管理層,簡稱:CRM):
haresource,crm (heartbeat v1/v2)
pacemaker (heartbeat v3/corosync)
rgmanager (cman)
常用組合:
heartbeat v2+haresource(或crm) (說明:一般常用于CentOS 5.X)
heartbeat v3+pacemaker (說明:一般常用于CentOS 6.X)
corosync+pacemaker (說明:現在最常用的組合)
cman + rgmanager (說明:紅帽叢集套件中的元件,還包括gfs2,clvm)
keepalived+lvs (說明:常用于lvs的高可用)
總結:我們經常在技術部落格中看到,heartbeat+pacemaker實作mysql高可用,或corosync+pacemaker實作mysql高可用等,有的博友會問了,我們到底用什麼好呢?經過上面的說明大家應該有所了解!
六、共享存儲
說到叢集, 我們不得不說到,共享存儲,因為不管理是Web高可用也,Mysql高可用也好,他們的資料都是共享的就一份,所有必須放在共享存儲中,主節點能通路,從節點也能通路。下面我們就簡單說一下共享存儲。
1.DAS:(Direct attached storage)直接附加存儲
說明:裝置直接連接配接到主機總線上的,距離有限,而且還要重新挂載,之間有資料傳輸有延時
RAID 陣列
SCSI 陣列
2.NAS:(network attached storage)網絡附加存儲
說明:檔案級别的共享
NFS
FTP
CIFS
3.SAN:(storage area network)存儲區域網絡
說明:塊級别的,模拟的scsi協定
FC光網絡(交換機的光接口超貴,一個差不多2萬,如果使用這個,代價太高)
IPSAN(iscsi)存取快,塊級别,廉價
七、叢集檔案系統與叢集LVM(叢集邏輯卷管理cLVM)
叢集檔案系統:gfs2、ocfs2
叢集LVM:cLVM
注:一般用于高可用雙主模型中(如下圖)
八、高可用叢集的工作原理
說明:這裡主要以主/從節點的高可用來說明工作原理。
主伺服器和從伺服器建立雙機熱備,基本上都是共享一個存儲,以mysql為例。通常情況下,資料庫檔案挂載在主資料庫伺服器上,使用者連接配接到主伺服器上進行資料庫操作。當主伺服器出現故障時,從伺服器就會自動挂載資料庫檔案,并接替主伺服器的工作。使用者在未通知的情況下,通過從資料庫連接配接到資料庫檔案進行操作。等主伺服器的故障修複之後,又可以重新提供服務;
那麼,從伺服器是如何知道主伺服器挂掉了呢,這就要使用一定的檢測機制,如心跳檢測,也就是說每一個節點都會定期向其他節點通知自己的心跳資訊,尤其是主伺服器,如果從伺服器在幾個心跳周期内(可自行設定心跳周期)還沒有檢測到的話,就認為主伺服器宕掉了,而這期間在通告心跳資訊當然不能使用tcp傳輸的,如果使用tcp檢測,還要經過三次握手,等手握完了,不定經過幾個心跳周期了,是以在檢測心跳資訊的時候采用的是udp的端口694來進行傳遞資訊的,如果主伺服器在某一端時間由于服務繁忙,沒時間響應心跳資訊,這個時候從伺服器要是把主服務資源搶過去(共享資料檔案),但是這個時候主伺服器還沒有宕掉,這樣就會導緻資源搶占,就這樣使用者在主從上都能通路,如果僅僅是讀操作還沒事,要是有寫的操作,那就會導緻檔案系統崩潰,這樣一切都玩了,是以在資源搶占的時候,可以采用一定的隔離方法來實作,就是從伺服器搶占資源的時候,直接把主伺服器給“STONITH”,就是我們常說的“爆頭”;
那麼,我們又用什麼方式來檢測心跳資訊呢?就是通過心跳線來檢測。運作在從伺服器上的Heartbeat可以通過以太網連接配接檢測主伺服器的運作狀态,一旦其無法檢測到主伺服器的“心跳”則自動接管主伺服器的資源。通常情況下,主、從伺服器間的心跳連接配接是一個獨立的實體連接配接,這個連接配接可以是串行線纜、一個由“交叉線”實作的以太網連接配接。Heartbeat甚至可同時通過多個實體連接配接檢測主伺服器的工作狀态,而其隻要能通過其中一個連接配接收到主伺服器處于活動狀态的資訊,就會認為主伺服器處于正常狀态。從實踐經驗的角度來說,建議為Heartbeat配置多條獨立的實體連,以避免Heartbeat通信線路本身存在單點故障。
上面的原理中我們提到了“隔離方法”,下面我們來說一說,隔離方法有兩種,一種是節點隔離,另一種是資源隔離。節點隔離就是我們常說的STONITH(Shoot The Other Node In the Head ,俗稱“爆頭”),意思就是直接切斷電源;常用的方法是所有節點都接在一個電源交換機上,如果有故障,就直接導緻該節點的電壓不穩定,或斷電,讓有故障的節點重新開機或關閉。(如下圖),而資源隔離,就是 fencing 直接把某種資源截獲過來。
下面我們再來說一說“心路線”的類型,一種是串行電纜,另一種就是我們常看到的以太網線(交叉的雙絞線),它們各有優缺點,串行電纜,被認為是比以太網連接配接安全性稍好些的連接配接方式,因為hacker無法通過串行連接配接運作諸如telnet、ssh或rsh類的程式,進而可以降低其通過已劫持的伺服器再次侵入備份伺服器的幾率。但串行線纜受限于可用長度,是以主、備伺服器的距離必須非常短。以太網線連接配接,使用此方式可以消除串行線纜的在長度方面限制,并且可以通過此連接配接在主從伺服器之間同步檔案系統,進而減少了對正常通信連接配接帶寬的占用。(如下圖)
參考文檔:
http://www.linux-ha.org/wiki/Main_Page
http://clusterlabs.org/wiki/Main_Page
http://opencf.org/home.html