在轉(zhuǎn)向大規(guī)模網(wǎng)絡(luò)運(yùn)算中,關(guān)鍵技術(shù)如虛擬化,向x86系統(tǒng)遷移和采用快速的DevOps方法已經(jīng)改變了IT的生態(tài)系統(tǒng)。隨著存儲(chǔ)卷在IT系統(tǒng)中的部署量不斷增加,下一個(gè)挑戰(zhàn)將會(huì)是使用最有效的方式來規(guī)劃和管理計(jì)算、存儲(chǔ)和網(wǎng)絡(luò)資源以及向眾所周知的私有云提供服務(wù)。OPENSTACK內(nèi)部
OpenStack是一個(gè)開源的云平臺(tái)項(xiàng)目,是由NASA發(fā)起,Rackspace在2010作為一個(gè)項(xiàng)目進(jìn)行主導(dǎo)。源代碼是由OpenStack基金會(huì)管理并在準(zhǔn)許Apache許可下發(fā)布,Apache許可允許自由分發(fā)和修改,但需要保留原有的版權(quán)聲明。OpenStack作為一個(gè)大規(guī)模部署應(yīng)用平臺(tái)而深受歡迎;它被許多服務(wù)商用來發(fā)布公有云平臺(tái),一些大型組織用它來搭建私有云基礎(chǔ)設(shè)施。需要明確的是,OpenStack適用于大規(guī)模部署的應(yīng)用,而對(duì)于像微軟Exchange和oracle數(shù)據(jù)庫等傳統(tǒng)的單一應(yīng)用程序則是不太適用的。 OpenStack軟件包含許多不同的模塊,對(duì)應(yīng)云環(huán)境的各個(gè)方面: Swift:對(duì)象存儲(chǔ) Cinder:塊存儲(chǔ) Nova:虛擬機(jī)(VMs)/計(jì)算 Neutron:網(wǎng)絡(luò) Horizon:儀表盤 Keystone:身份識(shí)別服務(wù) Glance:鏡像服務(wù) Ceilometer:遙感偵測(cè) Heat:業(yè)務(wù)流程 Trove:數(shù)據(jù)庫即服務(wù)(DBaaS) 每個(gè)OpenStack的代碼發(fā)布(目前是第九個(gè)版本,冰室(Icehouse)),新項(xiàng)目被創(chuàng)建或者來自現(xiàn)有的項(xiàng)目或作為新項(xiàng)目啟動(dòng),包括針對(duì)裸設(shè)備供應(yīng)的Ironic和針對(duì)彈性的MapReduce的Sahara,都是基于OpenStack的Juno發(fā)布。 數(shù)據(jù)服務(wù)有其中五個(gè)組件來提供。Swift是OpenStack基礎(chǔ)設(shè)施發(fā)布的對(duì)象存儲(chǔ)的子項(xiàng)目。塊存儲(chǔ)由Cinder提供,它是基于標(biāo)準(zhǔn)的IP存儲(chǔ)協(xié)議,例如iSCSI和NFS。Glance提供VM鏡像的存儲(chǔ)庫,它使用基于文件系統(tǒng)的底層存儲(chǔ)或者Swift。Trove提供數(shù)據(jù)庫即服務(wù)(DBaaS)的能力,而Sahara提供彈性的MapReduce能力,也被稱為Hadoop集群存儲(chǔ)。在本文中,我們將重點(diǎn)放在Cinder和Swift這兩個(gè)主要的存儲(chǔ)平臺(tái)。 塊存儲(chǔ)CINDER 塊存儲(chǔ)是虛擬化基礎(chǔ)架構(gòu)的重要組成部分,是存儲(chǔ)虛擬機(jī)映像和使用的虛擬機(jī)數(shù)據(jù)的基礎(chǔ)。Cinder在2012 Folsom版本的OpenStack發(fā)布中被介紹,而在Cinder出現(xiàn)之前,虛擬機(jī)是短暫存在的,它們的存儲(chǔ)只在虛擬機(jī)生命周期內(nèi)存在。Cinder提供塊存儲(chǔ)管理的支持。這是到了計(jì)算(Nova)層使用iSCSI,光纖通道或NFS協(xié)議,以及一些提供后端連接的專有協(xié)議。 Cinder接口提供了一些標(biāo)準(zhǔn)功能,允許創(chuàng)建和連接塊設(shè)備到虛擬機(jī),例如創(chuàng)建卷、刪除卷和附加卷。更多高級(jí)的功能支持卷擴(kuò)展,快照和虛擬機(jī)鏡像克隆。 許多廠商在他們現(xiàn)有硬件平臺(tái)上提供Cinder塊存儲(chǔ)的支持,它是通過使用Cinder的驅(qū)動(dòng)將Cinder的API轉(zhuǎn)換成廠商特定硬件的命令實(shí)現(xiàn)的。提供Cinder支持的廠商包括EMC(VMAX和VNX),惠普(3PAR StoreServ和StoreVirthul),HDS,IBM(所有存儲(chǔ)平臺(tái)),NetApp,Pure Storage和SolidFire。也有一些軟件定義的方案提供支持,像EMC的ScaleIO和Nexenta。 此外,許多軟件存儲(chǔ)平臺(tái),包括開源平臺(tái),也能用來提供Cinder支持;這其中包括RedHat的Ceph和GlusterFS。Ceph已經(jīng)集成到Linux內(nèi)核中,使它成為OpenStack部署塊存儲(chǔ)最便捷的方式。 在2013發(fā)布的第七個(gè)OpenStack版本(Grizzly)支持NFS,雖然“實(shí)驗(yàn)”版本在Folsom這一代中就已經(jīng)支持。通過NFS,虛擬機(jī)的卷被看做是一個(gè)獨(dú)立的文件,這類似于VMware ESXi和微軟Hyper-V的VHDs的實(shí)現(xiàn)方式。封裝的虛擬機(jī)卷作為文件允許諸如快照和克隆的高級(jí)功能。 存儲(chǔ)特性隨著新版本的發(fā)布被引入到Cinder中,隨后得到了各個(gè)存儲(chǔ)廠商的支持。一個(gè)全面的廠商平臺(tái)和功能列表能夠在維基百科的OpenStack塊存儲(chǔ)驅(qū)動(dòng)頁中被發(fā)現(xiàn)。
SWIFT支持對(duì)象存儲(chǔ)
OpenStack內(nèi)部的對(duì)象存儲(chǔ)是通過Swift來交付的,它實(shí)現(xiàn)了通過分布在OpenStack集群節(jié)點(diǎn)來實(shí)現(xiàn)橫向擴(kuò)展的對(duì)象存儲(chǔ)。對(duì)象存儲(chǔ)的數(shù)據(jù)存儲(chǔ)為二進(jìn)制對(duì)象,沒有具體的參考格式。對(duì)象從Swift中存儲(chǔ)和取出,會(huì)使用簡(jiǎn)單的命令如PUT或GET,這些命令是基于HTTP(Web)協(xié)議,也稱之為RESTful API。 Swift架構(gòu)分為多個(gè)邏輯服務(wù),包括對(duì)象服務(wù)器,代理服務(wù)器,容器服務(wù)器和客戶服務(wù)器,放在一起歸類為一個(gè)環(huán)。數(shù)據(jù)存儲(chǔ)在對(duì)象服務(wù)器上,其他的組件用來存儲(chǔ)元數(shù)據(jù),元數(shù)據(jù)用來跟蹤每個(gè)存儲(chǔ)對(duì)象和管理數(shù)據(jù)的訪問。 Swift中的數(shù)據(jù)彈性的管理是使用分區(qū)(zone)的概念。一個(gè)分區(qū)代表環(huán)的一個(gè)子組件,它用來提供數(shù)據(jù)的一份拷貝,多分區(qū)用來存儲(chǔ)冗余數(shù)據(jù)拷貝(默認(rèn)至少三個(gè))。Swift可以使用一塊磁盤或一臺(tái)服務(wù)器來代表一個(gè)分區(qū),也可以包括分散不同地理位置數(shù)據(jù)中心之間的數(shù)據(jù)。 同許多對(duì)象存儲(chǔ)一樣,Swift使用最終一致性的想法來實(shí)現(xiàn)數(shù)據(jù)的恢復(fù)。這意味著在一個(gè)OpenStack集群內(nèi),數(shù)據(jù)復(fù)制不是以同步模式來實(shí)現(xiàn)的,而使用塊存儲(chǔ)則可以實(shí)現(xiàn)。相反,數(shù)據(jù)復(fù)制是在分區(qū)之間以后臺(tái)進(jìn)程來實(shí)現(xiàn)的,所以如果系統(tǒng)在高負(fù)荷情況下,它可能被暫停或失敗。 相比于塊存儲(chǔ)使用同步復(fù)制作為一種用來提供高水平的可用性特征,最終一致性看起來似乎是更危險(xiǎn)的。然而,在可擴(kuò)展性,性能和彈性方面需要有一個(gè)權(quán)衡。最終一致性允許一個(gè)檔案系統(tǒng)在對(duì)比使用塊存儲(chǔ)時(shí)擴(kuò)展更加容易;在使用Swift情況下,代理服務(wù)器要保證獲取當(dāng)前數(shù)據(jù)的最新副本,即使在集群中一些服務(wù)器無法被訪問。 如同所有的OpenStack項(xiàng)目,Swift隨著每個(gè)版本的發(fā)布,會(huì)陸續(xù)發(fā)布新功能和增強(qiáng)功能。Grizzly版本的OpenStack介紹了更加精細(xì)的復(fù)制控制,使環(huán)具有可調(diào)節(jié)的副本數(shù)。通過基于時(shí)間的對(duì)象服務(wù)器的排序方式,對(duì)象讀取性能同時(shí)得到了改善。這允許將數(shù)據(jù)能夠從最快的響應(yīng)對(duì)象服務(wù)器中取出,在通過廣域網(wǎng)絡(luò)進(jìn)行擴(kuò)展的情況下這是十分重要的。 由于SWIFT使用HTTP協(xié)議,在OpenStack對(duì)象存儲(chǔ)中使用第三方的存儲(chǔ)解決方案將是非常實(shí)用的,這些產(chǎn)品包括來自cleversafe,scality或公共云,例如亞馬遜的Web服務(wù)——簡(jiǎn)單存儲(chǔ)服務(wù)(S3)。
SWIFT或者CINDER?做正確的選擇
很顯然,Swift和Cinder提供不同類型的數(shù)據(jù)服務(wù)。對(duì)象存儲(chǔ)(Swift提供)設(shè)計(jì)用來存放有高擴(kuò)展性需求的對(duì)象數(shù)據(jù),例如媒資、影像和文件。這些系統(tǒng)關(guān)注的焦點(diǎn)是他們海量數(shù)據(jù)的擴(kuò)展能力,這些能力不同于傳統(tǒng)存儲(chǔ)的特性,例如RAID。然而,他們的最終一致性特性意味著Swift不適用于存儲(chǔ)類似虛擬機(jī)應(yīng)用的數(shù)據(jù)。 雖然Swift使用元數(shù)據(jù)來追蹤對(duì)象和它們的版本,對(duì)象存儲(chǔ)仍然需求額外的邏輯關(guān)系來追蹤被存儲(chǔ)的對(duì)象的用戶元數(shù)據(jù)。這就需要用戶將它內(nèi)置于應(yīng)用程序中。 Cinder提供塊存儲(chǔ)組件,用來存儲(chǔ)持久對(duì)象,例如虛擬機(jī)和需要定期更新的數(shù)據(jù)如數(shù)據(jù)庫。塊存儲(chǔ)功能可以通過OpenStack集群內(nèi)置的功能組件來實(shí)現(xiàn),如邏輯卷管理器(LVM)或NFS來提供存儲(chǔ)資源。另外,開源解決方案,如Ceph和GlusterFS提供OpenStack代碼主體內(nèi)的一攬子OpenStack存儲(chǔ)交付能力,同時(shí)還能保持開源軟件的靈活性。 Cinder得到廣泛的支持,現(xiàn)有的傳統(tǒng)存儲(chǔ)解決方案可用來為OpenStack部署提供存儲(chǔ)服務(wù)。對(duì)于已經(jīng)具備傳統(tǒng)IT技能和硬件的平臺(tái)來說,這可能是最合適的。現(xiàn)有存儲(chǔ)平臺(tái)已經(jīng)經(jīng)歷了很好的發(fā)展,并且支持存儲(chǔ)可選的高級(jí)特性,如自動(dòng)精簡(jiǎn)配置,重復(fù)數(shù)據(jù)刪除和壓縮。許多現(xiàn)在提供的服務(wù)質(zhì)量(例如惠普3PAR的StoreServ和SolidFire),使它們適合用于混合工作負(fù)載而不是單純的專注于OpenStack的部署。作為一個(gè)結(jié)果,還有一個(gè)顯著的好處是將繁重的任務(wù)卸載到外部存儲(chǔ)陣列中。 在決定使用一個(gè)特定的平臺(tái)時(shí),系統(tǒng)架構(gòu)師需要權(quán)衡使用OpenStack“免費(fèi)”方案(仍然需要硬件)或受益于專用硬件提供的功能的風(fēng)險(xiǎn)和成本。
備份OPENSTACK存儲(chǔ)
最后需要思考的是,我們應(yīng)該考慮備份OpenStack數(shù)據(jù)的必要性。備份OpenStack環(huán)境關(guān)鍵配置組件的細(xì)節(jié)都有詳細(xì)的文檔;然而,一個(gè)OpenStack集群內(nèi)的數(shù)據(jù)備份被視作用戶的責(zé)任。通過使用外置存儲(chǔ),備份很容易被實(shí)現(xiàn)。例如,SolidFire提供備份完整集群到亞馬遜S3或Swift對(duì)象存儲(chǔ)中的能力。另外,用戶需要看現(xiàn)有的支持OpenStack應(yīng)用的備份產(chǎn)品。 Raksha是一個(gè)新的項(xiàng)目建議,它會(huì)把備份即服務(wù)(BaaS)功能集成到OpenStack框架中。這將包括完整和增量備份虛擬機(jī)到Swift“終點(diǎn)”,提供應(yīng)用一致性的能力。Raksha是一個(gè)單獨(dú)的項(xiàng)目,它并不是OpenStack核心部分。它需要將一些有意義的工作集成到普通虛擬平臺(tái),如vSphere和Hyper-V,但是可以集成更多的解決方案為OpenStack環(huán)境提供數(shù)據(jù)保護(hù)。