姚 捃,嚴(yán) 南
(成都理工大學(xué) 工程技術(shù)學(xué)院,四川 樂山 614000)
云計算作為互聯(lián)網(wǎng)+時代重要的技術(shù)支撐,得到了飛速發(fā)展,而OpenStack是云計算最重要,同時也是市場占有率最高的開源技術(shù)。利用OpenStack建立的分布式存儲系統(tǒng)服務(wù)在企業(yè)、高校與科研領(lǐng)域得到了廣泛應(yīng)用[1-2]。與NTFS、EXT等目的不同,分布式存儲具有良好擴(kuò)展性,能極大地提高數(shù)據(jù)可用性和完整性。同時分布式存儲的性能和容量能同時拓展,系統(tǒng)規(guī)模具有很強(qiáng)伸縮性;將OpenStack與Ceph分布式存儲相結(jié)合,在多種分布式存儲方案中具有松耦合、高彈性、可伸縮、高擴(kuò)展、高性能等優(yōu)點[3-6]。同時由于OpenStack和Ceph都是開源項目,具有極度清晰功能模塊和豐富的API接口功能,可對企業(yè)二次開發(fā)。
OpenStack和多數(shù)分布式系統(tǒng)相似,由控制、計算兩大節(jié)點組成??刂乒?jié)點不提供nova-compute的計算服務(wù)。組件與服務(wù)分布于各個節(jié)點,在安裝了基本服務(wù)后可根據(jù)需求部署更多組件。計算節(jié)點主要運行nova-compute,由于nova-Scheduler的調(diào)度特性,使得虛擬實例可以在幾個計算節(jié)點間切換,或者使用備份機(jī)制實現(xiàn)故障轉(zhuǎn)移。由此,解決控制節(jié)點的高可用性成為了整個系統(tǒng)高可用的基礎(chǔ)??刂乒?jié)點所提供的基礎(chǔ)服務(wù)在系統(tǒng)出錯后,所面臨的管理和控制故障,稱之為單點故障(SPoF)[7]。對于單點故障,可以采用設(shè)備的冗余、熱備,維護(hù)和升級相關(guān)節(jié)點,甚至?xí)和9?jié)點等方式來解決,因此必須有高可用架構(gòu)來支撐這些技術(shù)方案,并且多數(shù)需要的是自動運行的方案。 高可用性(high-availability,HA)是針對大規(guī)模集群系統(tǒng)、分布式系統(tǒng)、云平臺等項目提出的技術(shù)手段,盡量減少因維護(hù)、故障、高并發(fā)等引起的服務(wù)暫?;虮罎ⅲ蕴岣呦到y(tǒng)的穩(wěn)定性和可用性,是目前企業(yè)、數(shù)據(jù)中心、高校實驗室防止單點故障,意外停止服務(wù)的有效手段[8]。
目前各大主流公司的高可用部署模式有:網(wǎng)易的OpenStack云的HA方案、Mirantis的Active-active雙主動模式、Hp Helion的Active-active雙主動模式、Oracel的Active-passive主備模式等等。
為了實現(xiàn)OpenStack和Ceph結(jié)合的高可用分布式存儲方案,在比較了多家公司具有可行性的高可用方案[9-10],結(jié)合Mirantis提出的Keepalived+HAProxy的雙活A(yù)ctive+actice模式和Oracle提出的Active+passive主備模式的各自優(yōu)點,并且規(guī)避了如可靠性不足、容易產(chǎn)生集群腦裂等問題之后[11],提出以三控制節(jié)點為核心,多計算/網(wǎng)絡(luò)/存儲節(jié)點為擴(kuò)展,在部署過程中采用Keepalived+HAProxy的雙活模式以實現(xiàn)負(fù)載均衡和IP漂移,為OpenStack各個組件提供高可用;利用RabbitMQ Clustering實現(xiàn)消息隊列的集群;利用MariaDB Galera實現(xiàn)數(shù)據(jù)庫集群;利用vrrp實現(xiàn)路由冗余的高可用[12];利用Cinder和Ceph結(jié)合的方式實現(xiàn)存儲和虛擬機(jī)實例的高可用。整個平臺將Active-active的雙活模式、Active+passive的主備模式、分布式集群技術(shù)等高可用技術(shù)加以融合,通過軟硬件的冗余、IP漂移、故障轉(zhuǎn)移、熱備份、熱遷移等方式實現(xiàn)了在OpenStack平臺上的高效、高可用分布式存儲,實現(xiàn)了高性能計算模式下性能與穩(wěn)定的一種平衡。
該方案采用三控制節(jié)點+多計算/網(wǎng)絡(luò)/存儲節(jié)點的形式,如圖1所示。
將HAProxy+Keepalived形成的雙活模式部署在三個控制節(jié)點,形成三主動模式,實現(xiàn)以下高可用:
(1)外部高并發(fā)連接時,實現(xiàn)有效的負(fù)載均衡;
(2)在三個主動節(jié)點之一意外宕機(jī),訪問可由另兩個主動節(jié)點瞬間接管;
(3)利用Neutron高可用實現(xiàn)主備式的虛擬路由器冗余;
圖1 模型架構(gòu)
(4)利用Ceph+Cinder實施虛擬機(jī)的熱備份、熱遷移。
將Mariadb和RabbitMQ部署于三個控制節(jié)點,利用Galera實現(xiàn)Mariadb集群,提供較小延遲、讀寫到任意節(jié)點、自動節(jié)點加入、同步復(fù)制、自動成員控制等;RabbitMQ提供了OpenStack的消息隊列,由RabbitMQ Clustering、RabbitMQ Mirrored Queue實現(xiàn)高可用,同步集群內(nèi)由任意節(jié)點產(chǎn)生的消息,并且利用同步節(jié)點隨時接管由于源節(jié)點故障而產(chǎn)生的消息同步任務(wù)。
Memcached默認(rèn)支持雙活高可用模式,將所有節(jié)點的名稱加入OpenStack配置即可。
Keystone、Glance部署于三個控制節(jié)點,采用HAProxy+Keepalived形成三主的HA模式。
Ceph部署是基于RADOS的Ceph對象存儲集群,本模型使用一個監(jiān)視器+五個OSD。Ceph文件系統(tǒng)、Ceph對象存儲和Ceph塊設(shè)備從Ceph存儲集群讀出和寫入數(shù)據(jù)以實現(xiàn)高可用。
模型采用三網(wǎng)絡(luò)管理,將192.168.2.0網(wǎng)段用于OpenStack六個節(jié)點的外部訪問,如遠(yuǎn)程登錄和虛擬機(jī)的外部訪問等;將10.0.0.0網(wǎng)段用于節(jié)點間信息管理,如數(shù)據(jù)庫,控制信息,另外Ceph流量也會走10.0.0.0網(wǎng)絡(luò);將10.0.1.0用于數(shù)據(jù)通信,包括neutron的服務(wù)和vxlan的數(shù)據(jù)等。實踐結(jié)果表明,三個獨立且分工的網(wǎng)絡(luò)是實現(xiàn)整個模型高可用必不可少的條件。
整個模型架構(gòu)基于OpenStack+Ceph的高可用平臺,具體的方案規(guī)劃如圖2所示。
實現(xiàn)方案所使用的硬件如表1所示。
所有節(jié)點使用DELL PowerEdge R710服務(wù)器,是DELL雙路2U機(jī)架式服務(wù)器,使得控制節(jié)點和計算節(jié)點都擁有雙路8核心CPU、12 G內(nèi)存、548 GB硬盤、4個千兆網(wǎng)卡。優(yōu)點是CPU和內(nèi)存性能佳,在高可用環(huán)境下,為虛擬機(jī)高負(fù)載時提供不錯的計算能力;缺點是硬盤空間小,分布式存儲使用范圍受限,同時網(wǎng)絡(luò)帶寬只有千兆,僅能初步滿足Ceph對于網(wǎng)絡(luò)性能的要求。
圖2 可用方案
名稱數(shù)量機(jī)型指標(biāo)用途Manager1Dell R7102U機(jī)架式管理節(jié)點Controller2Dell R7102U機(jī)架式控制節(jié)點Compute3Dell R7102U機(jī)架式計算節(jié)點Network3Dell R7102U機(jī)架式網(wǎng)絡(luò)節(jié)點Ceph5Dell R7102U機(jī)架式存儲節(jié)點Vlan3Cisco-C3560機(jī)架式隔離網(wǎng)段
驗證環(huán)境為了盡可能發(fā)揮高可用的優(yōu)勢,采用了三網(wǎng)段策略,利用Cisco 3560交換機(jī)將三個網(wǎng)段使用VLAN隔離。其中,端口F0/1~6、24屬于VLAN 2,連接OpenStack外部網(wǎng)絡(luò)適配器,24號端口連接NAT網(wǎng)關(guān)所提供的外部網(wǎng)絡(luò);F0/7~12屬于VLAN 3,連接OpenStack管理網(wǎng)絡(luò)適配器;F0/13~18屬于VLAN 4,連接OpenStack隧道網(wǎng)絡(luò)適配器。由于使用的是本地的YUM源,不需要設(shè)置10.0.0.0和10.0.1.0網(wǎng)段網(wǎng)關(guān),只需指定各個網(wǎng)卡IP即可,網(wǎng)絡(luò)安裝如圖3所示。
圖3 網(wǎng)絡(luò)安裝方案
要把Ceph塊設(shè)備用于OpenStack,必須先安裝QEMU、libvirt和OpenStack。其中物理主機(jī)安裝OpenStack最少需要8 GB內(nèi)存和4核CPU。
OpenStack里有三個地方可以和Ceph塊設(shè)備結(jié)合形成分布式存儲:images、Volumes和Guest Disks。
驗證方案使用Cinder(Volumes)和Ceph結(jié)合的方式,具體的OpenStack/Ceph技術(shù)棧如圖4所示。
下面從三個方面來闡述整個OpenStack+Ceph平臺的高可用性的實現(xiàn)。
(1)控制節(jié)點的高可用性,表現(xiàn)在一些基礎(chǔ)服務(wù)(如MariaDB、RabbitMQ、Memcached等)的高可用性;
(2)計算節(jié)點的高可用性,主要是虛擬機(jī)和存儲的高可用性;
圖4 OpenStack/Ceph技術(shù)棧
(3)網(wǎng)絡(luò)節(jié)點的高可用性,最重要的是L3-Agent和DHCP-Agent的高可用性。
控制節(jié)點主要利用了HAProxy+Keepalived形成三控制節(jié)點的三主模式集群,其中HAProxy自身實現(xiàn)為Active-passive模式的高可用,在任何時刻只有一個HAProxy處于Active狀態(tài)并提供服務(wù);Keepalived通過請求一個VIP來請求真實IP地址,而VIP能夠在一個控制節(jié)點發(fā)生故障時,自動漂移到另外一個控制節(jié)點上,從而實現(xiàn)高可用。
HAProxy可以為OpenStack Service API(如httpd,neutron-server,glance-registry,nova-novncproxy,keystone等)和MariaDB-Galera服務(wù)提供負(fù)載均衡,將請求按照一定的算法轉(zhuǎn)到某個節(jié)點上,由Keepalived為此服務(wù)提供VIP。因此,OpenStack控制節(jié)點集群可配置為HAProxy的后端,實現(xiàn)雙活模式。
MariaD Galera數(shù)據(jù)庫的同步多主(Multi-Master)集群,Galera使用底層并行機(jī)制對數(shù)據(jù)庫集群進(jìn)行讀寫,實現(xiàn)同步復(fù)制。OpenStack支持多節(jié)點寫入Galera節(jié)點,Galera內(nèi)部支持主/主拓?fù)浣Y(jié)構(gòu)和寫入到任何集群節(jié)點。在這樣的配置中,只有一個節(jié)點是活動的,其余節(jié)點是standby狀態(tài)。Galera使用同步復(fù)制并確保每個集群節(jié)點是相同的。
利用RabbitMQ Clustering實現(xiàn)消息隊列的集群,同時RabbitMQ支持Mirrored Queue高可用技術(shù),集群內(nèi)任意一個節(jié)點出現(xiàn)故障時消息由同步節(jié)點接管。將RabbitMQ主機(jī)列表配置給OpenStack相關(guān)服務(wù)組件。
Memcached默認(rèn)支持雙活高可用模式,將所有節(jié)點的名稱加入OpenStack配置即可。
圖5列出了整個控制節(jié)點實現(xiàn)高可用性的思想。
圖5 控制節(jié)點高可用
計算節(jié)點,主要涉及到虛擬機(jī)的高可用和存儲的高可用,而上層應(yīng)用會直接決定虛擬機(jī)的高可用性(虛擬機(jī)絕對的高可用涉及到多方面,如存儲、CPU、內(nèi)存等),同時生產(chǎn)環(huán)境中的容錯設(shè)計也極大地降低了上層應(yīng)用加入高可用的必要性。
方案設(shè)計通過使用Ceph結(jié)合Cinder的分布式存儲方案來實現(xiàn)OpenStack實例的熱遷移與熱備份,實現(xiàn)計算節(jié)點在簡單場景下的高可用性。Ceph-Monitor安裝配置在控制節(jié)點,Ceph-Client安裝配置在計算節(jié)點。
Cinder提供的存儲服務(wù)是作為一個存儲管理器而非硬盤,真正的硬盤是下層的LVM、Ceph、GlusterFS等,所以,OpenStack的存儲高可用,幾乎完全由Cinder決定,同時加入Ceph以完成數(shù)據(jù)存儲的高可用性。
OpenStack中,網(wǎng)絡(luò)的高可用由L3-Agent、DHCP-Agent、DHCP-server、Virtual-Router等服務(wù)決定,而L2-Agent只在所在的網(wǎng)絡(luò)或者計算節(jié)點上提供服務(wù),不需要高可用支持。Neutron的高可用采用OpenStack原生自帶的高可用模式,對不同服務(wù)采用不同的高可用實現(xiàn)方式。
由于DHCP協(xié)議自身對多個DHCP服務(wù)器的支持,因此利用在所有網(wǎng)絡(luò)節(jié)點上部署Agent來實現(xiàn)多Server運行,從而實現(xiàn)DHCP-Agent服務(wù)的高可用。在私有網(wǎng)絡(luò)中DHCP分布式地提供IP服務(wù)。
為了同時兼容高可用性、擴(kuò)展性,使用VRRP的Active-active高可用性方案來實現(xiàn)L3-Agent服務(wù)的高可用。作為一種容錯協(xié)議,VRRP可以在下一跳路由失效時,由備用路由器繼續(xù)工作,保障網(wǎng)絡(luò)的可靠、通暢。VRRP利用BFD、NQA等協(xié)議快速檢測、監(jiān)視敏感的上行鏈路,從而Master路由器可以檢測到故障,并快速切換為Backup路由器代替。方案實現(xiàn)使用了BFD技術(shù)監(jiān)視Master的狀態(tài)。
方案從模型的設(shè)計建立到環(huán)境安裝再到實現(xiàn),完成了OpenStack+Ceph環(huán)境下的高可用性。在一定的壓力測試下,能夠有效地規(guī)避單點故障。體現(xiàn)為,在任一控制節(jié)點的斷開下不會影響整個負(fù)載均衡系統(tǒng)的穩(wěn)定運行;在三主動的雙活模式下,三個控制節(jié)點任一的宕機(jī)不會影響MariaDB、RabbitMQ、Memcache等基礎(chǔ)服務(wù);在單一或少量存儲節(jié)點斷開的情況下,Ceph會提出警告,但不會停止集群服務(wù),并能快速修復(fù)錯誤,重新連接丟失的存儲節(jié)點加入集群服務(wù);在一定頻率的熱備份和熱遷移的基礎(chǔ)上,能提供持續(xù)有效的計算服務(wù)。即使發(fā)生虛擬機(jī)故障,也能快速恢復(fù),沒有嚴(yán)重故障表現(xiàn)。
當(dāng)然,方案在大規(guī)模分布式系統(tǒng)的高可用技術(shù)上,還有一定的發(fā)展空間,能進(jìn)一步提升高可用的量化指標(biāo)、進(jìn)一步降低服務(wù)失效時間、減少服務(wù)和配置工作量和復(fù)雜度。