張華 李勁
摘要:隨著信息技術(shù)的高速發(fā)展及公眾服務(wù)系統(tǒng)的逐漸普及,傳統(tǒng)計算資源利用率低下。該文以O(shè)penstack云平臺為基礎(chǔ),設(shè)計并實現(xiàn)了一個具有彈性伸縮、負(fù)載均衡的彈性計算平臺。
關(guān)鍵詞:云計算;Openstack云平臺;彈性伸縮;負(fù)載均衡
中圖分類號:TP315 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2018)23-0126-03
Abstract: With the rapid development of information technology and the gradual popularization of public service systems, the utilization rate of traditional computing resources is low. Based on the Openstack cloud platform, this paper designs and implements an elastic computing platform with elastic scaling and load balancing.
Key words: cloud computing; Openstack Platform; elastic scaling;load balancing
1 背景
隨著信息技術(shù)的高速發(fā)展,各行各業(yè)都提供了大量面向公眾的Web系統(tǒng),居民健康服務(wù)系統(tǒng)作為健康業(yè)公共服務(wù)系統(tǒng),旨在為居民提供健康檔案查詢、信息發(fā)布、專家遠(yuǎn)程診斷等服務(wù),除了每年體檢期間出現(xiàn)訪問高峰,大多數(shù)時間都趨于平緩,傳統(tǒng)的數(shù)據(jù)中心只能依據(jù)最大流量進(jìn)行配置,因而實際中它的平均利用率只有15-20%[1]。云計算的本質(zhì)特征是按需提供計算服務(wù),而不是預(yù)先分配好資源,它的計算能力可以根據(jù)需求進(jìn)行動態(tài)伸縮[2]。
該文基于著名開源云計算平臺OpenStack設(shè)計了一套具有彈性伸縮、負(fù)載均衡能力的彈性計算平臺,將居民健康服務(wù)系統(tǒng)以虛擬機(jī)鏡像方式置于其中,當(dāng)訪問量大時,云平臺自動擴(kuò)展虛擬機(jī)數(shù)量,并利用負(fù)載均衡引導(dǎo)流量,平均分配到各個虛擬機(jī),緩解訪問壓力;當(dāng)訪問量少時,平臺自動縮減虛擬機(jī),減少計算資源,達(dá)到節(jié)能目的。
2 彈性計算平臺關(guān)鍵技術(shù)
2.1 OpenStack
OpenStack是一個開源項目同時也是一個社區(qū),提供開源代碼,可部署建立公有云、私有云和混合云[3]。它提供共享虛擬資源的主要用途是來構(gòu)建和管理云環(huán)境服務(wù),其中三個最為核心和成熟的云計算服務(wù)分別為計算、網(wǎng)絡(luò)、存儲服務(wù),它們構(gòu)成一個虛擬化管理平臺。整個OpenStack環(huán)境架構(gòu)可多主機(jī)節(jié)點組成,其中控制節(jié)點負(fù)責(zé)對其他節(jié)點的調(diào)度管理,包括虛擬主機(jī)的創(chuàng)建、租戶的網(wǎng)絡(luò)分配等,計算節(jié)點主要負(fù)責(zé)管理和調(diào)度虛擬主機(jī)運(yùn)行,網(wǎng)絡(luò)節(jié)點管理分配公有網(wǎng)絡(luò)與私有網(wǎng)絡(luò)之間的數(shù)據(jù)交換。
2.2彈性伸縮
彈性伸縮可分為橫向伸縮和縱向伸縮。彈性伸縮一般具有以下特點:程序自動化、配置計劃性、系統(tǒng)容錯性、資源高效率,根據(jù)現(xiàn)有業(yè)務(wù)需求的變化動態(tài)配置資源,實現(xiàn)高度的彈性和伸縮性,用戶不需要參與特定的操作過程,只關(guān)注結(jié)果。云計算的彈性伸縮本質(zhì)上是共享經(jīng)濟(jì),是計算資源的共享。由于行業(yè)業(yè)務(wù)的影響,當(dāng)企業(yè)業(yè)務(wù)的高峰期需要大量的計算能力和帶寬需求時,就需要更多的物理主機(jī)服務(wù)器參與系統(tǒng)的負(fù)載工作,但業(yè)務(wù)高峰期之后,造成大量的主機(jī)資源不能夠有效的利用。彈性伸縮的出現(xiàn)就是來解決這類問題,它的宗旨是按需分配,資源自動回收[4]。
2.3 負(fù)載均衡
隨著互聯(lián)網(wǎng)的快速發(fā)展,軟件系統(tǒng)的并發(fā)訪問量成倍增加,通常會導(dǎo)致系統(tǒng)響應(yīng)緩慢甚至崩潰,為了解決這類問題,衍生出了負(fù)載均衡技術(shù)。負(fù)載均衡是指采用一定的負(fù)載共享技術(shù),通過特定的請求分發(fā)算法,將外部訪問服務(wù)器的網(wǎng)絡(luò)請求流量均勻轉(zhuǎn)發(fā)到均衡池中的服務(wù)器上,從而解決大量高并發(fā)訪問問題,實現(xiàn)服務(wù)器高性能的橫向擴(kuò)展服務(wù)[5]。從具體實現(xiàn)來看,負(fù)載均衡服務(wù)的底層原理是通過配置服務(wù)器集群的虛擬化訪問地址,將屬于同一個集群中的服務(wù)器主機(jī)資源虛擬化成高伸縮、高可用和高穩(wěn)定的系統(tǒng)程序服務(wù)均衡池,當(dāng)負(fù)載均衡器接收到客戶網(wǎng)絡(luò)請求時,以應(yīng)用程序指定的某種負(fù)載均衡分發(fā)算法轉(zhuǎn)發(fā)到云服務(wù)器池中。
3 彈性計算平臺需求分析
以O(shè)penStack云環(huán)境為基礎(chǔ)設(shè)施服務(wù),在控制節(jié)點和計算節(jié)點上設(shè)計部署彈性計算、負(fù)載均衡模塊。
彈性伸縮模塊應(yīng)具備以下幾個功能:
1)對服務(wù)對象云主機(jī)進(jìn)行CPU、內(nèi)存等性能指標(biāo)的實時監(jiān)控。
2)當(dāng)服務(wù)對象云主機(jī)所在的計算資源負(fù)荷過大時,能夠自動添加裝有服務(wù)對象系統(tǒng)的虛擬機(jī)鏡像主機(jī)。
3)當(dāng)服務(wù)對象所在的計算資源負(fù)荷過小時,能夠自動回收虛擬云主機(jī),節(jié)約計算資源。
4)增加或移除的虛機(jī)云主機(jī)要自動關(guān)聯(lián)到負(fù)載均衡池,并能協(xié)調(diào)工作。
負(fù)載均衡模塊應(yīng)具備以下幾個功能:
1)高可用性:將服務(wù)時間減少到最小甚至不中斷的服務(wù)。
2)可擴(kuò)展性:隨著訪問的增加,系統(tǒng)具有良好的可伸縮性。
3)實時監(jiān)控負(fù)載均衡池中的后端云主機(jī),當(dāng)檢測到某個云主機(jī)不可用時,移除流量分發(fā)隊列,相反的,檢測到某個云主機(jī)可用時自動加入到流量分發(fā)隊列。
4)根據(jù)不同負(fù)載均衡的算法,可實現(xiàn)平均的將網(wǎng)絡(luò)流量分發(fā)到多個后端健康服務(wù)云主機(jī);從某一個特定IP發(fā)來的網(wǎng)絡(luò)請求,總是轉(zhuǎn)發(fā)到特定的后端健康服務(wù)云主機(jī);將收到的網(wǎng)絡(luò)請求,轉(zhuǎn)發(fā)給當(dāng)前負(fù)載池集群中連接數(shù)最少的健康服務(wù)云主機(jī)。
4 系統(tǒng)設(shè)計
基于以上需求,彈性伸縮、負(fù)載均衡兩部分設(shè)計如下。
4.1 彈性伸縮
該次所設(shè)計的彈性伸縮子模塊系統(tǒng)利用Openstack組件完成,分層模型如下圖1所示,整個模塊系統(tǒng)分為三個層次:Ceilometer監(jiān)控層、Heat決策層和Nova執(zhí)行層。
1)監(jiān)控層通過Ceilometer Collector負(fù)責(zé)完成對云計算平臺中的虛擬機(jī)的CPU、內(nèi)存、硬盤等指標(biāo)進(jìn)行監(jiān)控,監(jiān)控模塊負(fù)責(zé)維護(hù)一組監(jiān)控列表,對于列表中的監(jiān)控主機(jī),監(jiān)控模塊按照一定的心跳周期獲取最新的監(jiān)控值。監(jiān)控模塊采用C/S結(jié)構(gòu),客戶端負(fù)責(zé)收集其所在主機(jī)的性能數(shù)據(jù),服務(wù)端負(fù)責(zé)將客戶端報告的數(shù)據(jù)進(jìn)行統(tǒng)一處理,如數(shù)據(jù)的可視化、持久化等。
2)決策層通過Heat引擎模板完成增刪虛擬機(jī)的決策,是整個負(fù)載均衡的調(diào)度負(fù)責(zé)人。主要涉及三方面工作:一是根據(jù)監(jiān)控指標(biāo)如CPU、內(nèi)存等判斷是否觸發(fā)告警行為;二是根據(jù)行為提供增加還是刪除的具體決策;三是提供虛擬機(jī)的資源配置,如鏡像、IP分配等創(chuàng)建虛擬機(jī)必需的配置信息。
3)執(zhí)行層通過各組件API接口負(fù)責(zé)完成具體的增刪虛擬機(jī)工作。通過告警行為調(diào)用各組件REST API,根據(jù)決策層提供的虛擬機(jī)配置信息如鏡像、IP分配等信息進(jìn)行虛擬機(jī)的實際創(chuàng)建或根據(jù)參數(shù)定位到虛擬機(jī)進(jìn)行回收工作。
4.2 負(fù)載均衡
負(fù)載均衡模塊同樣基于Openstack Neutron LBaaS服務(wù)中各組件完成,體系結(jié)構(gòu)設(shè)計如圖2所示,包含四個部分:VIP、Pool、Member、Health Monitor。
1)VIP:它是負(fù)載均衡外部服務(wù)的地址。VIP有自己的IP地址,通??梢酝ㄟ^公共網(wǎng)絡(luò)訪問。在Neutron中,VIP對應(yīng)于兩層虛擬設(shè)備的brint上的一個端口。當(dāng)在負(fù)載平衡池中至少有一個成員時,VIP才是有意義的,因為至少有一個實際的OpenStack實例正在處理網(wǎng)絡(luò)請求。VIP負(fù)責(zé)將網(wǎng)絡(luò)流量分配給各會員。在Neutron LBaaS中,支持以下三種網(wǎng)絡(luò)流量的分發(fā)算法:
① Round robin輪詢:將訪問的網(wǎng)絡(luò)應(yīng)用流量平均的分發(fā)到后端服務(wù)器上。
② Source IP: 從同一個特定IP發(fā)來的網(wǎng)絡(luò)請求,則轉(zhuǎn)發(fā)到特定的云主機(jī)后端來處理。
③ Least connections:將客戶端訪問的網(wǎng)絡(luò)請求流量,轉(zhuǎn)發(fā)給當(dāng)前負(fù)載均衡池中連接數(shù)最少的后端云主機(jī)。如果當(dāng)前的負(fù)載均衡池中所有的member云主機(jī)后端的連接數(shù)一樣,則遵循Round robin分發(fā)算法。
考慮到要對集群中的健康服務(wù)系統(tǒng)的資源求平均值,所以最終采用的分發(fā)算法是Round robin輪詢,以增加集群的平衡負(fù)載率和健康服務(wù)系統(tǒng)的穩(wěn)定性。
2)Pool:它是LBaaS V1的root 資源,所有其他資源都是基于Pool池創(chuàng)建的,默認(rèn)情況下,Neutron LBaaS由HAProxy作為驅(qū)動程序?qū)崿F(xiàn)。一般情況下一個負(fù)載均衡池對應(yīng)一個單獨(dú)的HAProxy進(jìn)程和一個單獨(dú)的名稱空間。目前,一個Pool池只能有一個VIP,但在LBaaS V2中,可以允許一個池對應(yīng)多個VIP。
3)Member:對應(yīng)的是在Pool池中處理網(wǎng)絡(luò)請求的OpenStack實虛擬主機(jī),在本系統(tǒng)中則對應(yīng)著每個健康服務(wù)系統(tǒng)云主機(jī)。在OpenStack Neutron中,member是一個邏輯關(guān)系,表示實例與Pool池之間的對應(yīng)關(guān)系。也可以理解為,一個OpenStack實虛擬主機(jī)可以對應(yīng)不同的池,在Neutron的LBaaS中創(chuàng)建多個member虛擬主機(jī),創(chuàng)建member虛擬主機(jī)時所選擇的實例必須與Pool池在同一個子網(wǎng)中,否則將不起作用。
4)Health Monitor:是Pool池的健康監(jiān)控中心,只有在關(guān)聯(lián)pool池時才有意義,它用于監(jiān)視Pool池中member后端主機(jī)的狀態(tài)并以輪詢的方式查詢每個member后端主機(jī),如果member后端主機(jī)未作出響應(yīng),它將更新member后端主機(jī)的狀態(tài),使其變成INACTIVE,這樣就不會在VIP分發(fā)網(wǎng)絡(luò)請求中被考慮進(jìn)來。如果member后端主機(jī)恢復(fù)響應(yīng),Health monitor會將更新member后端主機(jī)的狀態(tài)至ACTIVE,此時的后端云主機(jī)就會重新出現(xiàn)在分發(fā)列表中。Health monitor在Neutron的負(fù)載均衡中不是必需的,但如果沒有Health monitor健康監(jiān)控中心,負(fù)載均衡池就會一直認(rèn)為所有的member云主機(jī)后端都是ACTIVE狀態(tài),從而導(dǎo)致有異常的云主機(jī)后端也會出現(xiàn)在負(fù)載均衡列表中,而此時的異常云主機(jī)實例是不能進(jìn)行網(wǎng)絡(luò)負(fù)載工作的,會造成系統(tǒng)的負(fù)載均衡響應(yīng)異常,影響系統(tǒng)的穩(wěn)定性和高效率性能,因此,為了滿足穩(wěn)定性,需要將Health Monitor作為負(fù)載均衡模塊。
5 彈性計算平臺測試
對彈性伸縮集群中的健康服務(wù)系統(tǒng)云主機(jī)進(jìn)行壓力測試,如圖3所示,當(dāng)CPU使用率平均值超過65%時,會增加一臺健康服務(wù)系統(tǒng)云主機(jī)到集群中;相反的,當(dāng)CPU使用率低于20%時,會從集群中移除一臺健康服務(wù)系統(tǒng)云主機(jī)。
類似對系統(tǒng)進(jìn)行負(fù)載均衡測試,如圖4所示,在控制節(jié)點中分別兩次使用SSH訪問負(fù)載均衡池的公網(wǎng)浮動IP,此時的用戶訪問的網(wǎng)絡(luò)流量是以輪詢的方式分發(fā)到兩個健康服務(wù)系統(tǒng)中,其中,第一次訪問的是IP地址為10.0.1.153的健康服務(wù)系統(tǒng)服務(wù)器,第二次訪問的是IP地址為10.0.1.125的健康服務(wù)系統(tǒng)服務(wù)器。
6 結(jié)束語
該文首先闡述了居民健康服務(wù)彈性計算平臺的三大關(guān)鍵技術(shù),接著根據(jù)業(yè)務(wù)需求給出了彈性伸縮、負(fù)載均衡模塊的設(shè)計,最后完成了兩個模塊的測試。該平臺上線后運(yùn)轉(zhuǎn)效果良好,節(jié)約了計算資源。
參考文獻(xiàn):
[1] 梁宇, 楊海波, 李鴻彬. 基于OpenStack資源監(jiān)控系統(tǒng)[J]. 計算機(jī)系統(tǒng)應(yīng)用, 2014, 23(4): 44-47, 16.
[2] 李小寧, 李磊, 金連文, 等. 基于OpenStack構(gòu)建私有云計算平臺[J]. 電信科學(xué), 2012, 28(9): 1-8.
[3] 李知杰, 趙健飛. OpenStack開源云計算平臺[J]. 軟件導(dǎo)刊, 2012, 11(12): 10-12.
[4] DeviD S, Thilagavathy K, Vaghula Krishnan S, et al. Integrating OTP Authentication Service in OpenStack[J]. Advanced Materials Research, 2014, 3269(984).
[5] Solano Antonio, Dormido Raquel, Duro Natividad, et al. A Self-Provisioning Mechanism in OpenStack for IoT Devices[J]. Sensors (Basel, Switzerland), 2016, 16(8).
【通聯(lián)編輯:謝媛媛】