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