李聰穎 王瑞剛 于金良
摘 要:高可用性集群是以減少服務(wù)間斷時(shí)間為目的的一組服務(wù)節(jié)點(diǎn),該系統(tǒng)能夠最大限度地向用戶(hù)提供不間斷的網(wǎng)絡(luò)服務(wù),使集群的整體服務(wù)最大可用。文中采用Pacemaker對(duì)Apache提供集群資源管理,并用Corosync實(shí)現(xiàn)通信和關(guān)系管理,當(dāng)集群中的某一個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),其他節(jié)點(diǎn)將在幾秒鐘甚至更短時(shí)間內(nèi)自動(dòng)接管集群資源和服務(wù),從而不間斷的向用戶(hù)提供服務(wù),最大限度地減少服務(wù)中斷的時(shí)間。本系統(tǒng)添加了一個(gè)VIP資源,利用VIP測(cè)試Apache的高可用性。測(cè)試結(jié)果表明,該集群系統(tǒng)可以有效增強(qiáng)Apache集群服務(wù)的可用性,具有高性?xún)r(jià)比、高可靠性、高擴(kuò)展性等特點(diǎn)。
關(guān)鍵詞:Apache;Pacemaker;Linux;高可用;資源配置
中圖分類(lèi)號(hào):TP302.1 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2016)08-00-03
0 引 言
隨著計(jì)算機(jī)網(wǎng)絡(luò)的廣泛應(yīng)用,確保向用戶(hù)提供連續(xù)不間斷的網(wǎng)絡(luò)服務(wù)變得日趨重要。在金融、電信以及政府等領(lǐng)域,服務(wù)器設(shè)備擔(dān)負(fù)著存儲(chǔ)、處理和傳遞大量重要信息等任務(wù),一旦服務(wù)器出現(xiàn)故障,可能會(huì)給用戶(hù)造成非常嚴(yán)重的損失。因此,要保證網(wǎng)絡(luò)服務(wù)的連續(xù)性,使用高可用集群技術(shù)是最佳選擇。
高可用集群作為一個(gè)整體向用戶(hù)提供一組服務(wù)不間斷的網(wǎng)絡(luò)資源,為了確保集群對(duì)外連續(xù)不斷地提供可用的服務(wù),實(shí)現(xiàn)故障檢測(cè)和業(yè)務(wù)切換的自動(dòng)化,從而盡可能的降低因軟、硬件故障或人為操作失誤帶來(lái)的損失。本文介紹了現(xiàn)有高可用性集群系統(tǒng)的實(shí)現(xiàn)技術(shù),提出了一種利用Pacemaker管理Apache高可用集群資源的系統(tǒng)方案,并設(shè)計(jì)實(shí)現(xiàn)了基于Apache的高可用性集群管理系統(tǒng)。在集群中,Corosync檢測(cè)主節(jié)點(diǎn)和備份節(jié)點(diǎn)的狀態(tài),判斷當(dāng)前節(jié)點(diǎn)是否處于活躍狀態(tài)。如果主節(jié)點(diǎn)發(fā)生故障,備份節(jié)點(diǎn)將自動(dòng)接管資源和服務(wù),確保集群對(duì)外提供連續(xù)的網(wǎng)絡(luò)服務(wù)。本集群管理系統(tǒng)可用性高、管理簡(jiǎn)便且易實(shí)現(xiàn)。經(jīng)多次實(shí)驗(yàn)反復(fù)測(cè)試,本系統(tǒng)能夠檢測(cè)故障并高效的實(shí)現(xiàn)主備節(jié)點(diǎn)資源切換,快速接管服務(wù),從而實(shí)現(xiàn)Apache集群的高可用性。
1 Pacemaker簡(jiǎn)介
Heartbeat和Corosync都是高可用集群中的集群信息層(Cluster Messaging Layer),主要傳遞集群信息與心跳信息,并沒(méi)有資源管理功能,資源管理依舊依賴(lài)于上層的集群資源管理器,本文采用的便是 Pacemaker集群資源管理器。Pacemaker是Heartbeat到V3版本后拆分出來(lái)的資源管理器,現(xiàn)在Corosync合成了高可用集群中的最佳組合。Pacemaker能夠監(jiān)測(cè)和恢復(fù)資源以確保集群服務(wù)的最大可用性,它可以做任意規(guī)模的集群,配備強(qiáng)大的依賴(lài)模型使管理員能夠準(zhǔn)確理解集群資源之間的關(guān)系,編寫(xiě)各種腳本對(duì)集群資源進(jìn)行管理。
Pacemaker的關(guān)鍵特性是能夠監(jiān)測(cè)故障并恢復(fù)節(jié)點(diǎn)服務(wù),不需要共享存儲(chǔ),可以管理任何能用腳本控制的資源服務(wù),使用STONITH保證數(shù)據(jù)的一致性,支持任意類(lèi)型的集群,包括主/主, 主/備, N+1, N+M, N-to-1和 N-to-N各種類(lèi)型。能夠自動(dòng)同步集群中各節(jié)點(diǎn)的配置文件,設(shè)定集群范圍內(nèi)的多種資源約束,支持更多高級(jí)服務(wù)類(lèi)型及需要多種模式的服務(wù),也支持統(tǒng)一的腳本化集群shell。
2 技術(shù)架構(gòu)
Pacemaker堆棧結(jié)構(gòu)如圖1所示,圖中,當(dāng)Pacemaker與Corosync集成時(shí),可以支持常見(jiàn)的多種開(kāi)源集群文件系統(tǒng),并用一個(gè)通用的分布式鎖控制器協(xié)調(diào)同步資源,Corosync負(fù)責(zé)通信,Pacemaker管理成員關(guān)系和隔離服務(wù)。Pacemaker的內(nèi)部組件如圖2所示。
Pacemaker由以下幾 個(gè)關(guān)鍵組件組成:
PE 或者策略引擎 (PE or Policy Engine, PEngine):主要負(fù)責(zé)將CRM傳遞過(guò)來(lái)的信息按照配置文件中的設(shè)置計(jì)算出下一個(gè)集群狀態(tài)。
Stonithd(Shoot-The-Other-Node-In-The-Head ):通常用遠(yuǎn)程電源開(kāi)關(guān)來(lái)充當(dāng)。在 Pacemaker 中,STONITH設(shè)備被當(dāng)成資源監(jiān)控,然而Stonithd會(huì)根據(jù)STONITH的拓?fù)浣Y(jié)構(gòu)實(shí)施管理,例如它的客戶(hù)端請(qǐng)求隔離一個(gè)節(jié)點(diǎn),則它就會(huì)重啟那個(gè)節(jié)點(diǎn)。
集群資源管理守護(hù)進(jìn)程 (Cluster Resource Management Daemon, CRMD):主要作為PEngine和lrm的消息代理,需要同時(shí)選舉一個(gè)leader去協(xié)調(diào)管理集群的活動(dòng),包括集群資源的啟動(dòng)和停止。
集群信息基礎(chǔ) (Cluster Information Base, CIB):CIB在系統(tǒng)中充當(dāng)?shù)氖钱?dāng)前集群中各資源原始配置以及之后動(dòng)態(tài)變化了的狀態(tài),是一個(gè)不斷更新的信息庫(kù)。當(dāng)CIB收集到資源以及節(jié)點(diǎn)統(tǒng)計(jì)信息的變化后,都會(huì)整合到一起成為當(dāng)前集群最新的信息,并分發(fā)給集群各個(gè)節(jié)點(diǎn)。
3 Pacemaker功能概述
CIB包含集群中所有資源的配置信息和當(dāng)前狀態(tài),CIB的內(nèi)容會(huì)被自動(dòng)同步在整個(gè)集群中。PEngine計(jì)算集群的理想狀態(tài)并生成指令列表,然后輸送到DC(指定協(xié)調(diào)員),把所有節(jié)點(diǎn)選舉的DC節(jié)點(diǎn)作為主決策節(jié)點(diǎn),如果主決策節(jié)點(diǎn)宕機(jī),會(huì)迅速選舉建立一個(gè)新的主決策節(jié)點(diǎn)。DC將PEngine生成的理想策略指令列表傳遞給集群中其他節(jié)點(diǎn)上的LRMD,或者用CRMD通過(guò)集群消息傳遞基礎(chǔ)結(jié)構(gòu)。當(dāng)集群中有節(jié)點(diǎn)發(fā)生故障,Pengine會(huì)重新計(jì)算理想策略。如果出現(xiàn)特殊情況,需要關(guān)閉節(jié)點(diǎn)以保護(hù)共享數(shù)據(jù)或完整的資源回收,Pacemaker則應(yīng)用Stonithd設(shè)備,STONITH應(yīng)用遠(yuǎn)程電源開(kāi)關(guān)將節(jié)點(diǎn)“爆頭”。Pacemaker把STONITH設(shè)備配置為資源保存在CIB中,使它可以更方便地監(jiān)測(cè)節(jié)點(diǎn)宕機(jī)。
4 系統(tǒng)的實(shí)現(xiàn)與測(cè)試
4.1 系統(tǒng)環(huán)境部署
集群架構(gòu)如圖3所示,本系統(tǒng)采用ACTIVE/PASSIVE集群架構(gòu)模式,設(shè)置兩個(gè)節(jié)點(diǎn)node1和node2,操作系統(tǒng)為Ubuntu14.04,分別在兩個(gè)節(jié)點(diǎn)上安裝Apache,Corosync,Pacemaker,并添加一個(gè)虛擬IP資源,通過(guò)VIP訪(fǎng)問(wèn)兩個(gè)節(jié)點(diǎn)上的Apache服務(wù)并測(cè)試集群的高可用性。
4.2 系統(tǒng)資源配置
4.2.1 創(chuàng)建一個(gè)VIP地址資源
增加虛擬IP命令:
primitive vip ocf:heartbeat: IPaddr params ip=10.10.10.81 nic=eth0 cidr_netmask=24
檢查配置是否正確命令:verify,如果沒(méi)有報(bào)錯(cuò),則配置正確。然后用commit命令提交,把信息寫(xiě)入cib.xml的配置文件中。
查看添加的資源,成功添加VIP資源如圖5所示。有一個(gè)VIP資源運(yùn)行在node1上。
4.2.2 設(shè)置資源黏性
當(dāng)一個(gè)節(jié)點(diǎn)出現(xiàn)故障時(shí),資源在節(jié)點(diǎn)上來(lái)回流動(dòng)會(huì)造成某段時(shí)間內(nèi)無(wú)法正常訪(fǎng)問(wèn),因此在資源因?yàn)楣?jié)點(diǎn)故障轉(zhuǎn)移到其它節(jié)點(diǎn)后,即便原來(lái)的節(jié)點(diǎn)恢復(fù)正常也禁止資源再次流轉(zhuǎn)回來(lái),此舉可通過(guò)定義資源的黏性(stickiness)來(lái)實(shí)現(xiàn)。
資源黏性是指資源更傾向于運(yùn)行在哪個(gè)節(jié)點(diǎn)。本系統(tǒng)將node1資源粘性值設(shè)置為100,在沒(méi)有故障的情況下資源就會(huì)在node1上。當(dāng)node1出現(xiàn)故障時(shí),資源才會(huì)跳轉(zhuǎn)到node2上。rsc_defaults resource-stickiness=100
4.3 系統(tǒng)測(cè)試
停止node1節(jié)點(diǎn)服務(wù),查看集群狀態(tài)。從圖6可以看出,node1離線(xiàn)。VIP資源在node2上運(yùn)行。測(cè)試成功。
4.4 瀏覽器測(cè)試
為了區(qū)分兩個(gè)節(jié)點(diǎn),在Apache的index.html中分別添加Welcome to node1!Welcome to node2!,訪(fǎng)問(wèn)Apache的頁(yè)面時(shí)就會(huì)出現(xiàn)不同的內(nèi)容。
因?yàn)榕渲昧薞IP資源,所以用VIP10.10.10.81訪(fǎng)問(wèn)時(shí),也能夠出現(xiàn)Apache的頁(yè)面。如圖8 所示,用VIP訪(fǎng)問(wèn)Apache時(shí),可以從瀏覽器頁(yè)面看到服務(wù)運(yùn)行在node1上。
5 結(jié) 語(yǔ)
本文介紹了Pacemaker的特性,并使用Pacemaker進(jìn)行資源管理以及Corosync實(shí)現(xiàn)通信,搭建一個(gè)Apache高可用集群系統(tǒng)。利用集群配置的VIP資源進(jìn)行測(cè)試,當(dāng)node1節(jié)點(diǎn)服務(wù)停止或者出現(xiàn)故障時(shí),資源可以自動(dòng)快速跳轉(zhuǎn)到node2節(jié)點(diǎn)上。當(dāng)恢復(fù)node1節(jié)點(diǎn)的服務(wù)時(shí),資源還會(huì)停留在node2上,這樣可防止資源來(lái)回流動(dòng),保持系統(tǒng)的穩(wěn)定性和高可靠性。測(cè)試結(jié)果表明,本系統(tǒng)管理方便、可用性高,能夠高效的切換資源,提供不間斷的服務(wù),實(shí)現(xiàn)集群的高可用性,從而將因軟、硬件故障和人為錯(cuò)誤帶來(lái)的損失降到最低,在多個(gè)領(lǐng)域都可以得到廣泛應(yīng)用。
參考文獻(xiàn)
[1] OpenStack.OpenStack High Availability Guide[EB /OL].http://docs.openstack.org/high-availability-guide/content /index.html.(2013-12-05)[2013-12-05]
[2] OpenStack.OpenStack Installation Guide for Ubuntu12.04[EB /OL]. http://docs. openstack.org/.(2012-12-26)[2013-08-10].
[3] High-availabilityCluster[EB/OL].http://en.wikipedia.org/wiki/High-availability_cluster
[4] Linux HA[EB/OL]. http://www.linux-ha.org
[5] Pacemaker[EB/OL]. http://clusterlabs.org/
[6]宋現(xiàn)鋒.基于Linux 的高可用性集群管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2012.
[7]崔小燕. Linux集群系統(tǒng)分析[J].西安郵電學(xué)院學(xué)報(bào),2006,11(5):103-106.
[8]歸達(dá)偉.計(jì)算機(jī)集群技術(shù)[J].西安郵電學(xué)院學(xué)報(bào),2004(4):98-100.
[9]謝曉燕,張靜雯. 一種基于Linux集群技術(shù)的負(fù)載均衡方法[J].西安郵電大學(xué)學(xué)報(bào),2014,19(3):64-68.
[10]訾海燕,朱國(guó)暉.一種基于服務(wù)質(zhì)量的資源分配算法[J]. 西安郵電大學(xué)學(xué)報(bào),2013,18(5):117-120.