怎樣用好Eucalyptus?
來自O(shè)penNebula項目的Ignacio M. LIorente最近發(fā)表了一篇題為 EUCALYPTUS, CLOUDSTACK, OPENSTACK AND OPENNEBULA: A TALE OF TWO CLOUD MODELS的博客文章,從應(yīng)用場景的角度分析了Eucalyptus、CloudStack、OpenStack和OpenNebula這四個云管理平臺的不同點。Ignacio認(rèn)為VMWare vCloud和AWS分別代表了數(shù)據(jù)中心虛擬化和按需獲取計算資源的兩種典型的應(yīng)用場景,如上所述四個開源云管理平臺基本上都是以VMWare vCloud或者AWS為參考原型但是在實現(xiàn)細(xì)節(jié)上又與參考原型有所差別。Ignacio將開源云平臺與其參考原型之間的差異之處稱為靈活性(Flexibility),并以數(shù)據(jù)中心虛擬化、按需獲取計算資源、低靈活性、高靈活性為四象限將如上所述四個開源云管理平臺放到不同的位置(如下圖所示)。Ignacio進一步指出這個圖例并不是為了說明某個開源云平臺優(yōu)于其他開源云平臺,而是為了說明不同的開源云管理平臺適用于不同的客戶需求以及不同的應(yīng)用場景。以目前的狀況而言,私有云市場規(guī)模很大,客戶需求以及應(yīng)用場景之間的差別很大,并不存在一個能夠通吃所有應(yīng)用場景的云管理平臺。未來Eucalyptus、CloudStack、OpenStack和OpenNebula這四個云管理平臺之間既有競爭也會有合作,并在這種競爭與合作并存的關(guān)系中找準(zhǔn)適合自己的市場和客戶。

我基本上認(rèn)同Ignacio M. LIorente的觀點,就是不同的云管理平臺適用于不同的客戶需求以及不同的應(yīng)用場景,并不存在一個能夠通吃所有應(yīng)用場景的云管理平臺。出于同樣的道理,Eucalyptus也有自己所擅長的應(yīng)用場景,以及自己所不擅長的應(yīng)用場景。作為Eucalyptus的員工,我自然希望各行各業(yè)的用戶都使用Eucalyptus來搭建他們的私有云。但是為了能夠充分發(fā)揮Eucalyptus的潛力,我建議所有潛在的客戶首先了解一下Eucalyptus是什么(或者不是什么),Eucalyptus能做什么(或者不能做什么),以及應(yīng)該如何規(guī)劃、實施、使用基于Eucalyptus的私有云。
Eucalyptus是(不是)什么?
Eucalyptus是一個開放源代碼的、與AWS高度兼容的云管理平臺。以AWS為參考原型的各種云管理平臺(例如OpenStack)都在某種程度上兼容AWS API,但是只有Eucalyptus將忠誠地兼容AWS API上升到企業(yè)戰(zhàn)略與核心競爭力的層面。忠誠地兼容AWS API意味著客戶能夠在私有云環(huán)境中繼續(xù)使用各種現(xiàn)有的與AWS API相兼容的工具、腳本和映像(AMI),能夠在基于Eucalyptus的私有云和AWS公有云之間遷移負(fù)載和數(shù)據(jù),或者是將基于Eucalyptus的私有云作為開發(fā)測試環(huán)境但是將AWS公有云作為生產(chǎn)環(huán)境。
根據(jù)Ignacio M. LIorente的云管理平臺四象限圖,VMWare vCloud和AWS分別代表了數(shù)據(jù)中心虛擬化和按需獲取計算資源的兩種典型的應(yīng)用場景。以數(shù)據(jù)中心虛擬化為應(yīng)用場景的云管理平臺通常采取自下而上的架構(gòu)設(shè)計,旨在解決數(shù)據(jù)中心的復(fù)雜度問題;以按需獲取計算資源為應(yīng)用場景的云管理平臺通常采取自上而下的架構(gòu)設(shè)計,旨在通過簡單高效的接口提供計算資源。設(shè)計理念上的差異,決定了一個云管理平臺很難同時具備VMWare vCloud和AWS的種種特性。Eucalyptus與AWS的高度兼容性決定了Eucalyptus不是VMWare vCloud或者VMWare vCenter的替代品。Eucalyptus和VMWare試圖解決的是不同的問題,適用于不同的應(yīng)用場景,因此具有不同的功能和特性。常常有用戶將Eucalyptus和VMWare vCloud或者是VMWare vCenter進行功能或者特性對比。他們沒有意識到Eucalyptus和VMWare vCloud或者是VMWare vCenter完全不是同一類型的軟件,是沒有辦法直接進行功能或者特性對比的。
值得一提的是,Eucalyptus是一個開放源代碼的產(chǎn)品,但是桉樹公司并不為特定客戶提供提供軟件定制化服務(wù)。經(jīng)常有一些潛在的客戶問我們是否可以為其提供定制的版本。的確,作為一個開源項目的主要開發(fā)者,桉樹公司具備為特定客戶提供特定版本的能力,但是桉樹公司通常不會這么做。為特定客戶提供定制化版本意味著要對產(chǎn)品進行修改,也意味著使用定制版本的用戶在升級到Eucalyptus后續(xù)版本時可能會遇到不可預(yù)知的風(fēng)險。盡管在短期內(nèi)定制化版本可能為客戶解決了某些問題,但是從長期來看它所帶來的問題要大于它所解決的問題。(Eucalyptus是一個開源項目,如果客戶愿意并且具備相應(yīng)的開發(fā)能力的話,當(dāng)然也可以自己對Eucalyptus進行定制化。但是,用戶自己對Eucalyptus進行定制化同樣也會遇到升級的問題。)#p#
Eucalyptus能(不能)做什么?
目前Eucalyptus的最新發(fā)行版本是3.2.1,它能夠很好地用作開發(fā)測試環(huán)境,或者是用來支撐各種可擴展的Web服務(wù)。這兩個應(yīng)用場景的共同特點是大量地使用非持久性虛擬機實例(Ephemeral Instance),以及使用彈性塊存儲(EBS)來保存持久性數(shù)據(jù)。盡管Eucalyptus也支持從彈性塊存儲啟動(Boot from EBS, BfEBS)的持久性虛擬機實例,但是由于架構(gòu)設(shè)計方面的原因,在一個集群中存在大量BfEBS實例時整個集群的性能會有所下降。一個集群中BfEBS實例的數(shù)量越大,集群的性能惡化就越嚴(yán)重。因此,我們不建議客戶在Eucalyptus上運行大量BfEBS實例。
Eucalyptus也不能很好地支持各種磁盤IO密集型應(yīng)用,例如需要高速讀寫磁盤的數(shù)據(jù)庫應(yīng)用。嚴(yán)格地說,這不是Eucalyptus自身的問題,而是底層虛擬化技術(shù)的問題。目前各種虛擬化技術(shù) - 例如VMWare ESX、Xen、KVM等等 - 已經(jīng)較好地解決了CPU和內(nèi)存的性能損失問題,但是在磁盤IO方面還是存在一定的性能損失。因此,我們不建議客戶在虛擬機上運行各種磁盤IO密集型應(yīng)用,包括負(fù)載較重的數(shù)據(jù)庫應(yīng)用。
在VMWare vCenter里面,系統(tǒng)管理員可以根據(jù)應(yīng)用特征為應(yīng)用定制網(wǎng)絡(luò)參數(shù)。在Eucalyptus里面,如果系統(tǒng)管理員希望具備同樣的能力,恐怕他很快就要失望了。為了以簡單高效的途徑提供計算資源,Eucalyptus盡可能自動化地管理整個私有云的網(wǎng)絡(luò)配置,留給系統(tǒng)管理員自由發(fā)揮的空間不大。
Eucalyptus的硬件拓?fù)?/strong>
接下來我們介紹幾個典型的硬件拓?fù)浣Y(jié)構(gòu),以幫助各位讀者深入了解適合Eucalyptus的應(yīng)用場景。在這些拓?fù)浣Y(jié)構(gòu)圖中有一些縮寫,含義如下:
CLC - 云控制器(Cloud Controller),Eucalyptus中的前端組件
Walrus - Eucalyptus中類似于Amazon S3的對象存儲服務(wù)
CC - 集群控制器(Cluster Controller),管理一個Eucalyptus集群
SC - 存儲控制器(Storage Controller),為一個Eucalyptus提供彈性塊存儲(EBS)服務(wù)
NC - 計算節(jié)點(Node Controller)
GE - 千兆網(wǎng)
10 GE - 萬兆網(wǎng)
FC - 光纖通道
SAN - SAN存儲

上面這個拓?fù)鋱D展示的是一個只有一個計算集群的小型Euclayptus私有云。在這個私有云中,所有服務(wù)器都連接到一臺千兆網(wǎng)交換機上,其中CLC和Walrus共同部署在同一臺物理服務(wù)器上,CC和SC共同部署在同一臺物理服務(wù)器上,SAN存儲通過光纖通道連接到Walrus和SC服務(wù)器。如果為了進一步降低成本,SAN存儲設(shè)備也可以替換成DAS存儲設(shè)備。
在這樣一種拓?fù)浣Y(jié)構(gòu)下,Eucalyptus使用開源的iSCSI TGT驅(qū)動提供EBS服務(wù)。大量的實踐表明,開源的iSCSI TGT驅(qū)動存在穩(wěn)定性問題,在存儲壓力比較大的情況下會莫名其妙的崩潰掉。(這個問題不僅僅在Eucalyptus中存在,在所有使用開源的iSCSI TGT驅(qū)動的應(yīng)用中都會發(fā)生。)EBS服務(wù)存在穩(wěn)定性問題,意味著處于運行狀態(tài)的虛擬機可能會突然訪問不到掛載的彈性塊存儲設(shè)備,也意味著從彈性塊存儲啟動的BfEBS實例會突然崩潰。這樣的拓?fù)浣Y(jié)構(gòu)部署在對數(shù)據(jù)持久性要求不高的開發(fā)測試環(huán)境中的問題不是很大,但是我們不建議客戶在對數(shù)據(jù)持久性要求較高的生產(chǎn)環(huán)境中使用。
除了EBS的穩(wěn)定性問題之外,這個拓?fù)浣Y(jié)構(gòu)的瓶頸在于SC與整個計算集群之間的連接是一個千兆網(wǎng)。整個計算集群訪問EBS服務(wù)的吞吐量受到千兆網(wǎng)帶寬的限制,有效吞吐量大概在100 MB/s左右。假設(shè)每個EBS實例所造成的平均壓力為2 MB/s,一個計算集群能夠同時支持40到50個EBS實例。假設(shè)每個EBS實例所造成的平均壓力為4 MB/s,一個計算集群只能夠同時支持20到25個EBS實例。需要指出的是,4 MB/s相當(dāng)于一個質(zhì)量中等的U盤(USB 2.0)的吞吐能力,其性能遠(yuǎn)遠(yuǎn)不及老式筆記本電腦中常用的7200轉(zhuǎn)SATA硬盤,而2 MB/s更是一個性能非常低下的極端情況了。如果客戶希望在這樣一種拓?fù)浣Y(jié)構(gòu)下大量使用EBS服務(wù),建議將SC通過萬兆網(wǎng)連接到交換機。(現(xiàn)在很多接入交換機都帶2~4個萬兆接口了,這樣的改造成本不大。)經(jīng)過這個簡單改造之后,EBS服務(wù)的有效吞吐量一下子增長了10倍,基本可以消除由于帶寬限制所帶來的性能瓶頸。

在生產(chǎn)環(huán)境中,我們建議客戶使用基于IP SAN的存儲設(shè)備來提供EBS服務(wù)。上面這個拓?fù)鋱D展示的是一個可用于生產(chǎn)環(huán)境的Euclayptus私有云。在這個私有云中,所有Eucalyptus前端組件(CLC、Walrus、CC、SC)都部署到獨立的物理服務(wù)器上,所有可能有大流量的組件(IP SAN、Walrus、CC、SC)都通過萬兆網(wǎng)連接到私有云。目前Eucalyptus支持EMC、EqualLogic、NetApp等多個廠商的IP SAN設(shè)備,在這種拓?fù)浣Y(jié)構(gòu)下Eucalyptus使用官方支持的iSCSI驅(qū)動EBS服務(wù),其穩(wěn)定性和可靠性與開源的iSCSI TGT相比都有大幅度的提高。
即使如此,我們依然不建議客戶在Eucalyptus上運行大量從彈性塊存儲啟動的BfEBS實例。Eucalyptus的設(shè)計初衷是鼓勵用戶盡可能多地使用非持久性虛擬機實例,在這種情況下虛擬機磁盤映像被存儲在計算節(jié)點上,虛擬機內(nèi)部的磁盤IO不會對私有云的網(wǎng)絡(luò)造成壓力,運行在不同計算節(jié)點上的虛擬機基本上不會互相影響。由于從彈性塊存儲啟動的虛擬機實例是持久性實例,需要頻繁地與存儲設(shè)備進行交互,對網(wǎng)絡(luò)帶寬的壓力是很大的。因此,我們對客戶的一般性建議是:(1)盡可能使用非持久性虛擬機實例;(2)在必須使用BfEBS實例的情況下,盡可能將操作系統(tǒng)盤做得比較小,例如10 GB;(3)將操作系統(tǒng)盤與數(shù)據(jù)存儲盤分離,也就是首先啟動一個尺寸較小的BfEBS實例,然后掛載一個尺寸較大的EBS卷用于存儲持久性數(shù)據(jù)。

上面這個拓?fù)浣Y(jié)構(gòu)可以進一步加以改造,將存儲網(wǎng)與業(yè)務(wù)網(wǎng)分離。這樣存儲流量就不會對業(yè)務(wù)流量造成影響,對私有云各個組件的健康監(jiān)控也可以在存儲網(wǎng)上進行。

當(dāng)一個計算集群的容量達(dá)到極限的時候,可以往私有云中增加新的計算集群進行擴容,就形成了上面這個拓?fù)浣Y(jié)構(gòu)。#p#
Eucalyptus的使用建議
前面我們已經(jīng)說過,不同的云管理平臺有不同的設(shè)計理念,適用于不同的應(yīng)用場景。有些潛在的客戶認(rèn)為只要投資買了X硬件按照Y拓?fù)浒惭b好Z軟件就可以應(yīng)付一切類型的應(yīng)用,這種期望基本上是不切實際的。類似于AWS的云計算更多地是一種新的管理和分配計算資源的理念,而不是一種新的技術(shù)。使用類似于AWS的云計算服務(wù)要求用戶了解一些基本的概念,并且通常需要對應(yīng)用做一些修改才能夠達(dá)到最佳的效果。我們給Eucalyptus客戶提供的一般性建議包括:
(1)盡可能使用非持久性虛擬機實例;
(2)當(dāng)必須使用BfEBS實例時,盡可能縮小磁盤映像的尺寸;
(3)使用EBS卷保存持久性數(shù)據(jù),并且將操作系統(tǒng)盤和數(shù)據(jù)存儲盤分離;
(4)不要在虛擬機上運行磁盤IO密集型應(yīng)用;
(5)不要對虛擬機進行縱向擴展,要通過橫向擴展提高應(yīng)用的處理能力;
(6)通過負(fù)載均衡實現(xiàn)應(yīng)用的高可用性;
(7)避免虛擬機級別的在線遷移,當(dāng)物理服務(wù)器需要進行維護時,使用Eucalyptus的維護模式。

如上圖所示,我們建議用戶將同一個應(yīng)用部署到多個計算集群上。

當(dāng)一個計算集群發(fā)生失效的時候,應(yīng)用依然是可用的,但是其處理能力降低了。

對于有計劃的系統(tǒng)維護,可以先將應(yīng)用的負(fù)載遷移到不需要進行維護的計算集群上,然后對處于空閑狀態(tài)的計算集群進行維護。這樣既保證了應(yīng)用的可用性,又保證了應(yīng)用的處理能力。
需要說明的是,上面我們所提到的“負(fù)載遷移”并不是指將一個處于運行狀態(tài)的虛擬機從一個計算集群動態(tài)遷移到另外一個計算集群,而是在另外一個計算集群中基于同樣的EMI創(chuàng)建一個新的虛擬機實例,并通過負(fù)載均衡設(shè)置將應(yīng)用的負(fù)載重定向到新的虛擬機實例。到目前為止,Eucalyptus并不提供VM級別的動態(tài)遷移(類似于VMWare vMotion)的功能。對于類似于AWS的云服務(wù)來說,最終用戶與底層的基礎(chǔ)設(shè)施是通過多個層次的抽象措施徹底隔離的。對于最終用戶來說,他所看到的計算資源只有自己的虛擬機。至于他的虛擬機運行在什么樣的物理服務(wù)器上以及該服務(wù)器上的負(fù)載情況,最終用戶應(yīng)該是一無所知的。因此,提供虛擬機級別的在線遷移功能,其實質(zhì)是違反了通過抽象措施將最終用戶與基礎(chǔ)設(shè)施進行隔離的原則。
在Eucalyptus 3.3中即將提供一個稱為維護模式的功能,允許系統(tǒng)管理員將某個計算集群中的特定物理服務(wù)器標(biāo)志為維護狀態(tài)。這時系統(tǒng)就會自動地將指定物理服務(wù)器上的所有虛擬機實例遷移到同一計算集群中的其他物理服務(wù)器上。這個功能允許系統(tǒng)管理員對計算集群中的特定物理服務(wù)器進行維護,同時又不必清空該計算集群中的所有負(fù)載。

當(dāng)應(yīng)用的負(fù)載上升時,通過橫向擴展提升應(yīng)用的處理能力。

在Eucalyptus 3.3中即將提供的實例監(jiān)控(Monitoring)、彈性負(fù)載均衡(Elastic Load Balancing,ELB)、自動擴展(Auto Scaling,AS)功能,會使得應(yīng)用的橫向擴展更加容易。簡單地說,實例監(jiān)控功能允許用戶對自己的虛擬機實例進行監(jiān)控,監(jiān)控對象包括虛擬機實例的CPU、內(nèi)存、磁盤IO、網(wǎng)絡(luò)IO等等;自動擴展功能允許用戶設(shè)定一些簡單的觸發(fā)參數(shù),并在監(jiān)控參數(shù)達(dá)到觸發(fā)參數(shù)要求的時候自動地創(chuàng)建或者是銷毀虛擬機實例;彈性負(fù)載均衡功能則負(fù)責(zé)修改與應(yīng)用相關(guān)的負(fù)載均衡策略,自動地添加新創(chuàng)建的虛擬機實例或者是移除舊的虛擬機實例。

綜上所述,可以得到我們向客戶所建議的一般性的應(yīng)用架構(gòu)設(shè)計??梢钥闯?,這個架構(gòu)設(shè)計與我們所熟悉的Web應(yīng)用架構(gòu)基本上是一致的。一個典型的Web應(yīng)用,可能僅僅需要進行少量的改動(如果應(yīng)用在設(shè)計之初就充分考慮到橫向擴展的話,甚至是完全不需要改動),就可以充分利用Eucalyptus私有云的種種特性。
除此之外,在彈性塊存儲EBS服務(wù)的使用方面,建議各位感興趣的用戶讀一讀Why EBS was a bad idea這篇文章。盡管我并非完全同意文章中的觀點,但是作者的許多觀察和思考是值得云管理員和應(yīng)用開發(fā)者深入思考的。
Eucalyptus的容量規(guī)劃
現(xiàn)在各位讀者已經(jīng)大致了解了Eucalyptus是(不是)什么,能(不能)做什么,以及應(yīng)該如何使用基于Eucalyptus的私有云。如果您覺得上面這些描述與您的應(yīng)用場景相符合,并希望使用Eucalyptus來搭建您的私有云的話,我們建議您在動手之前做一些簡單的容量規(guī)劃。容量規(guī)劃的基本方法,是將可預(yù)見的負(fù)載與物理資源進行映射,以確保私有云的容量能夠承載應(yīng)用和業(yè)務(wù)所帶來的壓力。一般來說,需要進行考察的參數(shù)包括CPU(物理核心數(shù)量)、內(nèi)存、網(wǎng)絡(luò)(吞吐量)、存儲(吞吐量和IOPS)。
對于CPU和內(nèi)存來說,可以通過標(biāo)準(zhǔn)化的VM產(chǎn)品類型(VM Types)進行簡單的換算,其結(jié)果可以表達(dá)為特定的硬件設(shè)備可以支撐多少個某個類型的虛擬機實例。
對于網(wǎng)絡(luò)來說,往往需要對即將運行在私有云上的應(yīng)用的網(wǎng)絡(luò)行為進行采樣,獲取其真實的流量特征,并在此基礎(chǔ)上與私有云的網(wǎng)絡(luò)配置進行對比。
對于存儲來說,一個集群的容量往往受限于IOPS而不是吞吐量。上個月Eucalyptus公司的聯(lián)合創(chuàng)始人之一Graziano Obertelli寫了一篇題為 Will My Internet Be Faster的博客文章,用較長的篇幅討論了如何基于IOPS進行容量規(guī)劃的問題。我將Graziano Obertelli的博客文章翻譯為《 我的網(wǎng)絡(luò)會變得更快嗎?》,可供參考。
服務(wù)等級協(xié)議
經(jīng)常有客戶問我們:“用了Eucalyptus之后,是不是就可以保證我的云主機不會宕機了呢?”坦率地說,不僅Eucalyptus不能,其他的云管理平臺也不能。
宕機時間,或者說不宕機時間,是數(shù)據(jù)中心領(lǐng)域的一個奇妙參數(shù),通常被稱為服務(wù)等級協(xié)議(Service Level Agreement,SLA)。服務(wù)等級協(xié)議是服務(wù)合同的一部分,通常用年度不宕機時間百分比(Annual Uptime Percentage)來表示。很顯然,根據(jù)年度不宕機時間百分比,可以計算出一年內(nèi)允許宕機的總時間。常見的SLA條款包括99%(一年可以宕機3.65天,也就是87.6小時),99.9%(一年可以宕機8.8小時),99.99%(一年可以宕機53分鐘)。Linode的SLA條款為99.9%(一年可以宕機8.8小時),AWS的SLA條款為99.95%(一年可以宕機4.4小時),阿里云的SLA條款為99.9%(一年可以宕機8.8小時),而盛大云則沒有任何關(guān)于SLA的承諾。通常來說,更高的SLA條款意味這更高的硬件、軟件和人力資源投入。到目前為止,尚未出現(xiàn)能夠保障100% SLA條款的產(chǎn)品和技術(shù)。
其他
成功地運用云計算,需要硬件與拓?fù)?、軟件架?gòu)、應(yīng)用場景、容量規(guī)劃、服務(wù)等級協(xié)議等等多個方面的準(zhǔn)備。我們在前面已經(jīng)說過,類似于AWS的云計算更多地是一種新的管理和分配計算資源的理念,而不是一種新的技術(shù)。使用類似于AWS的云計算服務(wù)要求用戶了解一些基本的概念,并且通常需要對應(yīng)用做一些修改才能夠達(dá)到最佳的效果。成功的云計算要求服務(wù)提供商和服務(wù)使用者都要為云計算做好準(zhǔn)備。如果你只是想延用老的方式來使用云計算,基本上很難獲得成功。