■ 公安部第一研究所 呂始勝
關(guān)鍵字:OpenStack 高可用 集群 部署
高可用性(High Availability,HA)是指系統(tǒng)在某個軟硬件模塊出現(xiàn)計劃內(nèi)停止運行或非計劃內(nèi)故障(這種故障是隨機的,可能是業(yè)務(wù)流程、物理設(shè)施或者IT軟/硬件的故障)的情況下,仍能繼續(xù)提供服務(wù)的能力,它是確保企業(yè)重要業(yè)務(wù)系統(tǒng)持續(xù)性和非中斷性運行的關(guān)鍵。
在傳統(tǒng)IT領(lǐng)域,高可用設(shè)計主要包含硬件和軟件兩個層面的設(shè)計:在硬件層面,通常使用主備模式、雙活模式或集群模式等硬件冗余設(shè)計保證應(yīng)用基礎(chǔ)架構(gòu)和應(yīng)用數(shù)據(jù)的高可用;在軟件層面,通過監(jiān)控應(yīng)用程序棧的健康狀況,加速應(yīng)用程序的切換和恢復(fù)進行故障轉(zhuǎn)移,從而保證應(yīng)用運行狀態(tài)的高可用。但是傳統(tǒng)應(yīng)用級集群解決方案成本高昂,而且難于實施和管理。
云計算的核心是如何呈現(xiàn)和利用云服務(wù),云架構(gòu)被設(shè)計成資源抽象、多租戶、高可擴展的架構(gòu),這種架構(gòu)更趨向于采用一組橫向邏輯服務(wù)層,它們彼此交織,形成了構(gòu)成應(yīng)用程序的組建網(wǎng)。這些橫向?qū)硬⒉皇怯布O(shè)備的集合,而是由云基礎(chǔ)設(shè)施提供的服務(wù)區(qū)域,橫向?qū)涌梢允荱I層、API層、業(yè)務(wù)邏輯層等。這種橫向服務(wù)結(jié)構(gòu)為基于云的應(yīng)用程序提供了近乎無限的可伸縮性、按需服務(wù)、性能和成本效益。然而,它也極大地改變了應(yīng)用程序中發(fā)生的故障類型?;谠频募軜?gòu)中的故障通常涉及一個或多個橫向結(jié)構(gòu),而不是縱向硬件節(jié)點的故障。再多的硬件冗余設(shè)計也無法避免這種類型的故障,所以云架構(gòu)需要采用不同的方法來進行容錯設(shè)計。
OpenStack目前已經(jīng)成為了開源云計算的事實標(biāo)準(zhǔn),幾乎全部的IT廠商都在積極擁抱OpenStack,使用OpenStack的節(jié)點功能組件和服務(wù)功能組件可以設(shè)計出合理的高可用集群部署方案。
OpenStack高可用集群是由具有特定集的節(jié)點組成的集群,這些節(jié)點按照功能劃分為不同的節(jié)點子集群,每一個功能子集群可以是單一服務(wù)器節(jié)點,也可以是多個服務(wù)器節(jié)點。從更抽象的層次來描述OpenStack集群,可以將集群劃分為組成各個功能集的服務(wù)器節(jié)點和連接服務(wù)器節(jié)點以傳輸不同數(shù)據(jù)和指令的網(wǎng)絡(luò)。
控制器節(jié)點主要運行API服務(wù)、規(guī)劃調(diào)度(Scheduler)服務(wù)、數(shù)據(jù)庫服務(wù)、對象緩存服務(wù)、消息隊列服務(wù)等,負責(zé)管理集群組件之間的全部活動,并響應(yīng)用戶指令進行資源調(diào)度,是OpenStack集群的核心大腦。
計算節(jié)點是運行各種虛擬化管理軟件、真正提供計算能力的節(jié)點,負責(zé)為虛擬機實例(Instance)運行提供所需要的CPU、內(nèi)存、網(wǎng)絡(luò)等資源。
存儲節(jié)點是用來提供存儲服務(wù)的節(jié)點,OpenStack集群中提供存儲服務(wù)的主要是塊存儲組件Cinder、對象存儲組件Swift以及同時提供文件系統(tǒng)、塊存儲、對象存儲服務(wù)的Ceph集群。
網(wǎng)絡(luò)節(jié)點為租戶提供了基于用戶自定義的虛擬網(wǎng)絡(luò)服務(wù),這些服務(wù)包括虛擬網(wǎng)橋、虛擬交換機、DHCP服務(wù)器、L3虛擬路由等。
負載均衡器(LoadBalancer)是常見的應(yīng)用程序高可用組件,主要作用是對相關(guān)服務(wù)的訪問請求均衡到兩個或多個后端服務(wù)節(jié)點,從而使節(jié)點上相同服務(wù)組件彼此組成Active/Active或者Active/Passive高可用服務(wù)模式。
HAProxy是一個使用C語言編寫的自由及開放源代碼軟件,其提供高可用性、負載均衡,以及基于TCP和HTTP的應(yīng)用程序代理,并支持多種負載均衡模式。
Corosync用于高可用環(huán)境中提供通訊服務(wù),它位于高可用集群架構(gòu)中的底層(Message Layer),扮演著為各節(jié)點(node)之間提供心跳信息傳遞這樣的一個角色。
Pacemaker是一個集群資源管理器,它利用集群基礎(chǔ)構(gòu)件(OpenAIS 、heartbeat或corosync)提供的消息和成員管理能力來探測并從節(jié)點或資源級別的故障中恢復(fù),以實現(xiàn)群集服務(wù)(亦稱資源)的最大可用性。
Galera是一套在 MySQL InnoDB 存儲引擎上實現(xiàn)Multi-master及數(shù)據(jù)實時同步的系統(tǒng)架構(gòu)。
目前,Redhat和Mirantis均是OpenStack社區(qū)代碼貢獻最為強勁的兩家廠商,同時各自都有自己基于OpenStack的產(chǎn)品線,并且這些產(chǎn)品在OpenStack個人和企業(yè)部署市場上占有較大份額。他們所提供的高可用集群設(shè)計模式相差并不大,主要是基于以上技術(shù)形成的部署方案,具體設(shè)計如下:
在OpenStack高可用集群部署時,首先必須實現(xiàn)控制器節(jié)點的冗余來保證服務(wù)的高可用,同時由于通過Galera實現(xiàn)高可用的MySQL數(shù)據(jù)庫也運行在控制器節(jié)點上,因此控制器節(jié)點理論上需要至少3臺服務(wù)器組成集群(使用兩個控制器節(jié)點也是可行的,但是集群服務(wù)可用性會有所降低)。每個控制器節(jié)點上均運行HAProxy程序,HAProxy負責(zé)向外部客戶端提供單一高可用的服務(wù)訪問IP地址(VIP),并將客戶端對該IP地址的訪問以負載均衡的形式轉(zhuǎn)發(fā)到后端對應(yīng)的OpenStack API、數(shù)據(jù)庫、消息隊列等服務(wù)上進行最終的處理。
計算節(jié)點是基礎(chǔ)設(shè)施服務(wù)的基礎(chǔ),用戶的虛擬機和應(yīng)用最終都運行在計算節(jié)點上,計算節(jié)點在運行過程中也是通過訪問控制器節(jié)點上HAProxy對外提供的VIP實現(xiàn)對控制器節(jié)點服務(wù)的訪問。
存儲節(jié)點上可以部署使用Cinder、Swift或者Ceph來作為OpenStack集群的存儲服務(wù),從集群共享存儲和高可用角度考慮,建議部署Ceph服務(wù),但需要保證足夠的控制器節(jié)點數(shù)目以確保運行在控制器節(jié)點上的Ceph監(jiān)控服務(wù)程序能夠?qū)崿F(xiàn)Quorum機制,同時需要部署足夠的OSD節(jié)點以滿足Ceph數(shù)據(jù)的多份復(fù)制從而實現(xiàn)Ceph集群數(shù)據(jù)的冗余高可用。
該方案的多節(jié)點部署拓撲如圖1所示。
借鑒OpenStack高可用集群成熟設(shè)計方案,結(jié)合現(xiàn)有硬件設(shè)施及網(wǎng)絡(luò)資源,我們基于Pike版本部署完成了一套OpenStack高可用集群,采用架構(gòu)如圖2所示。
具體安裝部署過程參考OpenStack相關(guān)文檔,不再贅述。
圖1 高可用集群多節(jié)點部署拓撲
圖2 高可用集群架構(gòu)圖
圖3 虛擬機實例
部署完成后,在儀表盤(Dashboard)上,就可以進行管理計算、卷、網(wǎng)絡(luò)資源,并按照規(guī)劃進行虛擬機、虛擬硬盤、網(wǎng)絡(luò)設(shè)置,如圖3所示。
管理卷、備份、快照等存儲資源,如圖4所示。
網(wǎng)絡(luò)設(shè)置好后,可以使用網(wǎng)絡(luò)拓撲查看當(dāng)前虛擬機實例的網(wǎng)絡(luò)拓撲圖,如圖5所示。
圖4 卷管理
圖5 虛擬機網(wǎng)絡(luò)拓撲
OpenStack的高可用,主要是確保控制器節(jié)點和網(wǎng)絡(luò)節(jié)點的高可用。從功能服務(wù)的維度上,就是確?;A(chǔ)服務(wù)(數(shù)據(jù)庫和消息隊列)高可用,計算、存儲、網(wǎng)絡(luò)的接入與調(diào)度高可用以及虛擬網(wǎng)絡(luò)設(shè)施的高可用。
根據(jù)成熟方案部署完成的OpenStack高可用集群,不但可以滿足企業(yè)內(nèi)部開發(fā)、測試的需要,也能夠為業(yè)務(wù)遷移到云上提供良好基礎(chǔ)。