彭麗蘋,呂曉丹,蔣朝惠
貴州大學 計算機科學與技術學院,貴陽 550025
近年來,各種各樣的云平臺層出不窮,基于云平臺的應用也在急劇增長,云計算給社會和國家帶來的利益更是不言而喻。隨著云計算的廣泛應用,數據中心的規模也在不斷擴大[1],亞馬遜、谷歌、阿里巴巴、HP等巨頭公司都擁有自己的云平臺,這些云平臺擁有的數據中心節點少則上萬臺,多則上百萬臺。據資料顯示,亞馬遜構建了全球最大的云計算平臺,數據中心的節點已經多達200萬臺,并在持續擴大。然而,隨著數據中心規模的擴大,數據中心集群能耗也在急劇增長。事實上,在實際生產中,能耗成本占數據中心總體擁有成本(Total Cost of Ownership,TCO)的很大一部分。據統計,2015年全球數據中心的用電量占世界總用電量的1.1%~1.5%,而我國數據中心耗電量約為1.0×103TWh,相當于三峽水電站一年的發電量。在過去的十年里,雖然使用了虛擬化技術,數據中心服務器的使用率卻一直持續穩定在12%~18%之間,浪費了絕大部分電量。
針對上述問題,研究者們做了大量研究。Leverich等人在文獻[2]中首次提出了關閉部分節點以節約集群能耗的思想。他們對Hadoop集群中節點的狀態進行統計分析,發現大量節點在很多時候都處于非活躍狀態,節點的CPU利用率非常低,于是通過關閉部分節點來節約集群能耗,但他們并沒有考慮集群性能問題。Kaushik等人在文獻[3]中提出了一種能耗感知的異構集群數據放置方法,第一次將HDFS集群分為熱區和冷區兩個部分。熱區用大量高性能的服務器存放訪問率高的熱點數據,冷區用少量大容量服務器存放訪問率低的數據,并通過將冷區服務器設置成非活躍的低能耗模式來節約數據中心的能耗,但熱區消耗的電量遠超過冷區,他們并沒有提出針對熱區服務器的能耗管理策略。
基于云計算虛擬化環境的虛擬機動態整合技術是一種節約數據中心能耗的重要技術。該技術通過將輕負載的虛擬機有效整合到少量物理服務器上運行,并關閉空閑的物理服務器來節約集群能耗。李俊濤等人在文獻[4]中提出了一種基于布朗指數法的虛擬機動態整合方法。文中采用布朗指數平滑法建立預測模型,并通過主機的歷史負載數據來預測CPU的使用率,進而確定需要遷移的虛擬機和其目的主機,以此來合理配置數據中心資源和節約能耗。但文中并沒有考慮虛擬機過度整合問題,資源的有效整合并不是往最少數量的服務器上裝滿負載或保證每個服務器的資源得到100%的利用,這樣有可能達不到節能的效果。
建立能耗模型對數據中心能耗進行評估預測是很多能耗感知資源調度方法的研究基礎,對數據中心能耗管理具有重大意義。宋杰等人在文獻[5]中分別針對單機環境和云環境中的CPU密集型、I/O密集型、交互型運算提出了相應的能效計算方法和優化方法,并指出云系統能效利用率有很大提升空間,而研究任務的調度和執行算法是最有效的方法,為接下來的能效優化研究提供了借鑒。
能耗感知資源調度是目前數據中心常用的節能方法。黃慶佳在文獻[6]中提出了一種能耗成本感知的云數據中心資源調度機制,從大規模并行化任務處理能耗、虛擬機動態整合能耗和跨地域多數據中心能耗成本三方面解決數據中心能耗最小化問題。此外,改進的蟻群算法、神經網絡算法、遺傳算法等也被廣泛地用來解決該類問題。
以上總結的方法具有交叉性,可以多種方法結合使用以達到節能的目的。例如房丙午等人將虛擬機遷移技術和能耗感知資源調度技術相結合,提出了一種基于二階段迭代啟發式算法的能耗和性能感知的調度算法以節約數據中心能耗[7]。
Ceph[8]是一個分布式文件系統。Sage等人針對Ceph集群提出了CRUSH算法,CRUSH算法是一種偽隨機Hash值散列算法[9],通過計算來確定要存儲數據的OSD位置,進而決定數據的存儲位置。與傳統的元數據機制相比,CRUSH算法消除了中心式的服務器/網關需求。沈良好等人在文獻[10]中對Ceph集群數據布局在節能方面的不足進行了分析,提出了一種Ceph集群的多級能耗管理策略。他們將集群節點分為多個功耗組,通過關閉部分功耗組來節約集群能耗,但功耗組的劃分粒度很大,很難達到最大限度節能的目的。
本文針對Ceph集群能耗問題,提出了一種能耗管理策略。建立了一個系統能耗優化模型,并在該優化模型的基礎上提出了一種Ceph集群的數據副本放置策略,使得云平臺在滿足用戶SLA需求和保證服務質量(Quality of Service,QOS)的前提下,達到盡可能節約數據中心能耗的目的。最后,在真實的Ceph集群環境中驗證了該方法的有效性。
Ceph是由Sage等人提出的一個分布式文件存儲系統,因具有統一存儲(塊存儲、對象存儲、文件存儲)的特性及高擴展性、高性能、高可靠性,而得到工業界的廣泛青睞。Ceph集群主要由監視器MON、對象存儲設備OSD、可靠自治分布式對象存儲(Reliable Autonomic Distributed Object Store,RADOS)、Librados庫、塊設備(RBD)、RADOS網關接口(RGW)、元數據服務器(MDS)、CephFS組成。MON監視整個集群的健康狀態,Ceph集群中的所有數據都是以對象的形式存儲的,RADOS負責保存這些對象,它是Ceph集群存儲的基礎。Librados是訪問RADOS 的庫,支持PHP、Java、Ruby、Pathon等多種語言。而RGW僅用于對象存儲,MDS和CephFS僅用于文件存儲。因本文重點解決Ceph集群數據副本存儲帶來的能耗問題,所以下面詳細介紹了Ceph集群數據存儲過程。
當Ceph客戶端有寫請求時,客戶端首先向MON提出創建新用戶和認證請求,認證通過之后,MON會將集群狀態圖Cluster Map發送給Ceph客戶端,客戶端經DATA STRIPING過程將數據分成很多碎片strinpings,這些碎片會按照一定的方式組成一個或多個64 MB(若不足64 MB,就用字符0填充)的object對象,并用Object ID唯一標識。然后生成一個RBD并指定一個Pool ID,接著利用CRUSH算法將Object映射到PG中,然后根據PG Name、PG、Rule規則和CRUSH算法將PG映射到集群的OSD中,最后將要存儲的PG存儲在主OSD中,主OSD負責將剩下的數據副本寫到次OSD中。當該PG的最后一個副本成功存儲到OSD中時,OSD會向Ceph客戶端發送一個存儲完成報告。一個主OSD和多個次OSD組成該PG的活動集(Active Set),當活動集中的主OSD出錯時,一個次OSD會被設置成主OSD。活動集中各個OSD之間可以相互通信,當其中一個OSD出錯時,會有一個Peering過程來重新平衡數據,而該過程是由主OSD負責的。整個數據存儲流程如圖1所示。由于CRUSH算法是一種偽隨機Hash算法,且Ceph有自動平衡數據的機制,所以當集群穩定時數據總是盡可能均勻地存放在集群中。

圖1 Ceph客戶端數據存儲過程

圖2 運行區機架邏輯部署圖
Sage等人在提出Ceph分布式文件系統時,特別注重系統的性能和吞吐量,對于集群能耗問題并沒有作太多的考慮。數據中心服務器的利用率非常低,而CRUSH算法是一種偽隨機算法,加之Ceph集群的自我平衡機制,Ceph總是盡可能地將數據均勻存放在集群的物理節點中,這就必然導致了很多服務器的負載都非常低,因此集群中的許多資源都處于空閑狀態。Ceph作為云平臺的存儲系統,如何合理有效地利用Ceph集群的資源以達到節能的目的,正是節約數據中心能耗需要做的重點工作。
服務等級協議SLA是數據中心供應商和客戶簽訂的一項重要協議,其中包含了機房環境、業務正常運行時間、系統響應時間、網絡帶寬等重要指標,本文在以降低數據中心能耗為目標的同時,綜合考慮這些重要指標,將TSLA表示為用戶要求的應用完成限制時間。
大量研究表明[11-14],CPU的使用率與數據中心的能耗成正相關關系。磁盤作為文件系統的存儲媒介,所產生的存儲能耗占到整體能耗的65%[15],很多研究者都建立了磁盤能耗模型來預測數據中心的能耗問題,為精確的能耗管理技術奠定了基礎[16]。本文通過監控集群中節點的CPU和磁盤的使用率來調節整個Ceph集群的狀態,并且以用戶應用程序所要求的完成時間TSLA作為參數,建立能耗模型,然后基于該模型提出了一種數據副本放置策略,使得Ceph集群在滿足用戶SLA需求和保證用戶QoS的前提下,有效降低Ceph集群的能耗。
假設Ceph集群分為運行區和待機區。兩個區的服務器分別位于不同的機架上,待機區的Ceph節點用來應對應用高峰期的極端情況,所以待機區的節點大多數時間都處于待機狀態。運行區有a個機架,機架Racki用 Ai(1≤i≤a)編碼;待機區有b個機架,機架Racki用Bi(1≤i≤b)編碼。每個機架中有m個集群節點,將運行區中的機架進行分組,k個機架為一組,若最后一組不足k個機架,則用(k-a%k)個虛擬機架(虛擬機架中節點的計算能力為0)補足,則整個運行區中的機架被分組。運行區機架的邏輯部署如圖2所示,最后一臺橙色的機架表示虛擬機架。用aij(0≤i≤k,0≤j≤L)表示對應機架At(t=L×(i-1)+j)中一臺服務器的計算能力參數,該數據可從集群的監控平臺讀取。虛擬機架中的服務器計算能力參數設為0,即圖2中aLk=0。假設系統有n個應用程序需要執行,每個應用程序對應的里的 K 是一個常數系數,可以根據TSLA的大小來調整,而TSLA指用戶應用完成限制時間。令:

優化模型的基本形式如下:

其中X為決策變量、Pmin為目標函數、s.t.為約束條件。A為節點的計算能力參數矩陣,B為用戶的TSLA矩陣,W為TSLA調整參數,Pmin指Ceph集群的最小能耗,為集群狀態矩陣,為的元素,φn表示的附加節點,η為啟用待機區服務器產生的能耗。具體的參數含義和求解過程將在3.2節中介紹。
集群中CPU和磁盤的使用率與系統能耗問題始終是一個很難平衡的問題。如果關閉的節點太多,雖然能大大減少系統能耗,但也會使得集群的吞吐量嚴重下降;如果關閉的節點太少,雖然保證了系統的吞吐量,但卻達不到大量節能的目的。因此,集群能耗最小化問題是NP-hard難題,又由于集群中各個節點的計算性能不同,因此集群最小化能耗問題屬于NP-hard問題中的線性組合優化問題。該類問題的求解是上個世紀的難題,到目前為止研究者們已經提出了許多算法能很好地求得該類問題的解,如背包算法、模擬退火算法、遺傳算法等[17],但不同的算法有不同的優勢,應用中可根據自己的實際情況選擇合適的算法求得能耗模型中決策變量X。
得到方程組AX+W=B的解X,將X與矩陣A的每個行向量作相與運算,便可得到放置用戶數據后的集群狀態矩陣A*,由于引入了TSLA調整參數W(-1<W<0)且取值盡可能的小,故得到的 X為不等式AX≥B的最優解。即在滿足用戶SLA需求的情況下,要開啟的最小節點數為果只開啟Tmin個節點,相當于在不做任何處理的基礎上,關閉了大量的節點,那么在大規模并行處理時集群的吞吐量和數據可用性會嚴重下降,為了保證Ceph集群的服務質量,下文提出了一種數據副本放置策略。
數據副本放置策略是影響數據中心能耗的重要因素,良好的數據副本放置策略能夠有效地降低數據中心的能耗[17]。本文基于第3章提出的集群能耗模型,提出了一種數據副本放置策略。Tmin已經解決了用戶的SLA問題,因此在此基礎上的副本放置問題主要考慮Ceph集群數據的完整性和容錯性。
Ceph集群有replicated和erasure兩種類型的存儲池pool,前一種是基于純數據的,后一種是基于糾刪碼的。本文提出的是基于純數據的PG副本放置策略。假設一個應用程序有R≥3個PG副本需要存放,hostm為該PG的主OSD所在節點,Ai(1≤i≤a)為hostm所在機架。將其中一個PG副本存放在與hostm相鄰的節點中,然后以Ai為中心,將另一個PG副本存儲在與其左右相鄰的s個機架中,假設該機架為。主機架 Ai(PG的主OSD所在機架)的數據恢復域(Data Recovery Field,DRF)為 ?i(t)={At|i-s≤t≤i+s,t≠i} ,它總是關于主機架對稱,以此來保證數據恢復過程中的數據傳輸時間,而又體現了數據存儲的隨機性。極端情況下,為了應對高峰期,數據的PG副本數R可能大于3,那么將剩下的R-3個PG副本隨機存放在待機區節點的OSD中。集群副本放置策略如圖3所示,其中Region1為運行區,Region2為待機區。
賓夕法尼亞州立大學的Shekhar Srikantaiah教授針對數據中心的資源利用率和能源消耗問題做了實驗,他指出當磁盤利用率超過50%,CPU利用率超過70%時,計算機消耗的能量將隨著磁盤使用率的增大而急劇上升[18],這就會導致磁盤的單位I/O能耗值(單位I/O能耗值=加,使得集群能效下降。考慮集群能效問題,實驗基于3.2節中的最小開啟節點數目Tmin以及上章提出的數據副本放置策略,只將服務器的一半磁盤用作OSD,將節點的CPU平均使用率控制在70%左右。當在Ceph Calamari中監控到節點參數超出這個范圍時,就把該服務器的計算能力置為0,那么由3.1節的能耗模型可知,將不會有新的數據存儲到該節點上。另外,由于Ceph集群有自我平衡的特性,將會嚴重影響該實驗的進行,所以在該實驗中,通過修改Ceph集群的配置文件,關閉了Ceph集群的自動平衡功能。

圖3 集群副本放置策略
為了驗證和評估該策略的有效性,在Ceph集群環境中進行了實驗測試。實驗中使用了13臺戴爾R710服務器。服務器的部署環境如下:運行區包括a=12臺物理服務器;待機區包括b=1臺物理服務器;運行區和待機區的服務器分別放在不同的機柜中,以便從IDC室的UPS中讀取耗電量。為了更真實地模擬異構集群環境,在服務器上運行了占用不同服務器計算資源的虛擬機,并在集群中添加了3臺交換機(S3352P-SI 48口),將運行區的服務器分開放在6個機架,則k=2,L=6;每個機架中放置了m=2臺服務器。服務器采用Centos7 64位操作系統,所使用的Ceph版本為Jewel(10.2.5),數據副本數為3。用FIO測試軟件測試集群的吞吐量,用Ceph Calamari監控Ceph集群狀態,包括集群CPU使用情況、節點平均負載和集群IOPS等。整個Ceph集群的邏輯部署如圖4所示。

圖4 Ceph集群部署邏輯圖
OSD是Ceph集群中的主要能耗組件。針對運行區,假定服務器的平均功耗為Q,由A和X可得集群副本放置狀態圖第4章提出的數據副本策略需開啟的集群節點數目為表示恢復域中的另一個附加節點。在沒有啟動待機區服務器的情況下,當前狀態下的集群的總能耗為:

其中n(0≤n≤N且n為整數)表示用戶SLA請求批次。
算法步驟如下:
步驟1輸入TSLA,即用戶應用完成限制時間,得到B=1 000/TSLA,其中 K=1 000 。
步驟2從calamari中讀取CPU的使用率,并計算節點的CPU平均使用率,得到A。
步驟3由能耗模型計算出W和X,將A的行向量與向量X相與,得到集群狀態圖A*。
步驟4根據新得到的集群狀態圖修改crushmap的內容,并將新的crushmap應用于Ceph集群中。
步驟5計算出當前集群總能耗p。
步驟6用FIO壓力測試工具,模擬不同的負載,進行集群性能測試。
當有新的用戶應用需求時,重復步驟1~6。
本文的具體實驗過程如下:對運行區的服務器進行測試,向Ceph集群中存入40 GB數據,數據的pg副本數為3,開始時,可設,其中 Rack7和Rack8是虛擬機架,假定第一個用戶的應用完成時間TSLA=500 s,則 B1=(2 ,0)T,此時由能耗模型中的式(2)可解得:X1=(0 ,0,1,1)T,W1=0,由 A1和 X1可得 A*1=,根據該計算結果,僅將Rack3和Rack4中的所有服務器和機架Rack2中的1臺服務器切換到運行狀態,并將隔離域設置成host,其他機架中的服務器仍然處于待機狀態,由于此時運行區的大多數節點都處于待機狀態,所以待機區的節點不需進行狀態切換。可將crushmap的內容做如下修改:
gRoot setA1{
id-1
alg straw
hash 0
item osd.0 weight 0.000
…… ……
item osd.7 weight 0.000
item osd.8 weight 0.010
…… ……
item osd.11 weight 0.010
item osd.12 weight 0.000
…… ……
item osd.15 weight 0.000
item osd.16 weight 0.010
…… ……
item osd.31 weight 0.010
item osd.32 weight 0.000
…… ……
item osd.52 weight 0.000
}
然后將此rule規則應用到Ceph集群,分別將數據存放在第3個和第4個機架中的兩個節點和第2個機架的第1個節點中,其中2號機架為附加機架,可以計算出此時的集群能耗為4 400 W 。以此類推,當有新的應用請求時,重復以上操作便可得到對應的集群能耗。限于篇幅,現給出不同TSLA請求時,各個機架中節點的平均CPU的使用率統計情況,如圖5所示。將不同TSLA請求下模型中的各參數值列于表1中。

圖5 各機架中節點的CPU平均使用率
經一個月的數據統計,服務器忙時的平均功耗大約為500 W,空閑時的平均功耗為200 W,可以計算出兩種情況下對應OSD的平均能耗大致為125 W和50 W。在優化前和優化后,分別從Ceph集群中存儲40 GB數據,數據的恢復域S=2,在用戶不同TSLA請求的情況下,監控集群的運行情況。圖6是處于運行狀態的OSD個數對比圖。

圖6 集群中運行的OSD對比圖
圖7為采用第3章的能耗優化模型計算的集群能耗和采用該數據副本放置策略前后的實際集群能耗對比圖。從圖7中可以看到,當集群穩定時,用優化模型計算的能耗值與采用優化數據副本策略所產生的實際能耗值基本保持一致,且誤差率100%)維持在6%左右,因此,使用該能耗優化模型,能很好地預測集群能耗的走向,進而方便對集群能耗的控制和管理。

表1 能耗模型各個參數

圖7 集群能耗對比圖
圖7中,隨著TSLA值的增大,節約的能耗由少變多再變少。這是因為,TSLA=500 s時,集群的負載太小,優化前和優化后集群中的節點產生的能耗都很少,所以節約電量的效果并不明顯。此外,計算時采用了節點能耗的最大值來計算,難免存在誤差。而當1 000 s<TSLA<2 500 s時,集群的負載適中,節點可調節的空間很大,所以優化前和優化后耗電量的差值增大,能耗節約效果明顯。而當TSLA=2 500 s時,集群的負載臨近上限,所以當又有TSLA=3 000 s的用戶請求時,集群的能耗幾乎不再增加。從圖6中也可以看出,當TSLA=2 500 s時,集群中運行區的所有節點都已經處于運行狀態,這就說明集群可調整的空間特別小,所以節約的能耗值偏低。從以上的分析中可得出一個結論:當集群穩定且TSLA值適中時,采用該優化數據副本放置策略的效果較好,節約的耗電量可達到14.3%,而當服務器節點本身的能耗越大時,節約的耗電量會高于這個值。
響應時間是一個衡量集群服務質量和性能的重要指標,它是滿足用戶SLA需求的前提條件。若響應時間太長,必定會增加應用的完成時間,用戶的SLA需求就得不到保證。但由于關閉了集群中的部分節點,集群的性能和服務質量必將受到影響,因此要控制集群的響應時間,以保證集群的服務質量,這也是不能關閉太多服務器的原因。本文采用FIO壓力測試軟件對集群進行了模擬測試。圖8為采用該數據副本策略前后的集群響應時間對比圖。包括順序讀和隨機讀,實驗數據大小均為40 MB。

圖8 集群平均響應時間
從圖8可以看到,集群采用該策略后,順序讀取數據的響應時間增加了3.1%,而隨機讀數據的響應時間反而變少了。由此可以看出,該數據副本放置策略在對集群的服務質量影響不大的情況下,對集群能耗問題進行了優化,有效降低了數據中心能耗。
本文針對數據中心巨大的能耗問題,對系統進行建模,并在此基礎上提出了一種基于Ceph集群的數據副本放置策略,最后在Ceph集群環境中驗證了該策略的有效性。實驗表明,該能耗管理策略,能在對集群服務質量影響不大的前提下,有效減少集群能耗,達到了優化集群能耗的目的。而如何有效利用待機區節點,實現數據和應用的遷移,是將來要做的工作。
:
[1]周品.Hadoop云計算實戰[M].北京:清華大學出版社,2012:10-11.
[2]Leverich J,Kozyrakis C.On the energy (in) efficiency of Hadoop clusters[J].ACM Sigops Operating Systems Review,2010,44(1):61-65.
[3]Kaushik R T,Bhandarkar M.GreenHDFS:towards an energyconserving,storage-efficient,hybrid Hadoop compute cluster[C]//International Conference on Power Aware Computing and Systems,2010:1-9.
[4]李俊濤,吳小開.基于布朗指數法的虛擬機動態整合方法[J].計算機工程與應用,2016,52(7):56-61.
[5]宋杰,李甜甜,閆振興,等.一種云計算環境下的能效模型和度量方法[J].軟件學報,2012,23(2):200-214.
[6]黃慶佳.能耗成本感知的云數據中心資源調度機制研究[D].北京:北京郵電大學,2014.
[7]房丙午,黃志球.云計算中能耗和性能感知的虛擬機優化部署算法[J].計算機工程與科學,2016,38(12):2419-2424.
[8]Weil S A,Brandt S A,Miller E L,et al.Ceph:a scalable,high-performance distributed file system[C]//Proceedings of the 7th Symposium on Operating Systems Design and Implementation,2006:307-320.
[9]Weil S A,Brandt S A,Miller E L,et al.CRUSHR:controlled,scalable,decentralized placement of replicated data[C]//Proceedings of 2006 ACM/IEEE Conference on Supercomputing.Tampa,USA:ACM Press,2006:367-378.
[10]沈良好,吳慶波,楊沙洲.基于Ceph的分布式存儲節能技術研究[J].計算機工程,2015,41(8):13-17.
[11]Ren C,Wang D,Urgaonkar B,et al.Carbon-aware energy capacity planning for datacenters[C]//2012 IEEE 20th International Symposium on Modeling,Analysis&Simulation of Computer and Telecommunication Systems(MASCOTS),2012:391-400.
[12]Feller E,Morin C,Leprince D.State of the art of power saving in clusters and results from the EDF case study[D].Institut National de Recherche en Informatique et en Automatique(INRIA),2010.
[13]羅亮,吳文峻,張飛.面向云計算數據中心的能耗建模方法[J].軟件學報,2014(7):1371-1387.
[14]Kontorinis V,Zhang L E,Aksanli B,et al.Managing distributed UPS energy for effective power capping in data centers[C]//2012 39th Annual International Symposium on Computer Architecture(ISCA),2012:488-499.
[15]孫鑒,李戰懷,張曉,等.基于統計量的存儲系統磁盤功耗建模方法研究[J].計算機研究與發展,2016,53(7):1517-1531.
[16]Pinheiro E,Bianchini R.Energy conservation techniques for disk array-based servers[C]//ACM International Conference on Supercomputing,2014:369-379.
[17]邢文訓,謝金星.現代優化計算方法[M].2版.北京:清華大學出版社,2005:113-208.
[18]Srikantaiah S,Kansal A,Zhao F.Energy aware consolidation for cloud computing[C]//Proceedings of the 2008 Conference on Power Aware Computing and Systems,2008:1-5.