從OpenStack的角度看塊存儲的世界
塊存儲,簡單來說就是提供了塊設(shè)備存儲的接口。用戶需要把塊存儲卷附加到虛擬機(jī)或者裸機(jī)上以與其交互。這些卷都是持久的:它們可以從運(yùn)行實(shí)例上被解除或者重新附加而數(shù)據(jù)保持完整不變。
本文重點(diǎn)介紹塊存儲服務(wù)。我們對目前主流的塊存儲服務(wù)提供商和開源的塊存儲軟件做了一個簡要分析,希望能給從事塊存儲開發(fā)的工程師對于塊存儲一個全局的認(rèn)識。
下面會先介紹常見的單機(jī)塊設(shè)備工具,以建立對塊存儲的初步印象。
單機(jī)塊存儲
首先,一個硬盤是一個塊設(shè)備。內(nèi)核檢測到硬盤后,在/dev/下會看到/dev/sda/。為了用一個硬盤來得到不同的分區(qū)來做不同的事,我們使用fdisk工具得到/dev/sda1、/dev/sda2等。這種方式通過直接寫入分區(qū)表來規(guī)定和切分硬盤,是最死板的分區(qū)方式。
1. LVM & Device-mapper
LVM是一種邏輯卷管理器。通過LVM來對硬盤創(chuàng)建邏輯卷組和得到邏輯卷,要比fdisk方式更加彈性。如果你目前對LVM用途還不熟悉或者不大清楚,可參考以下鏈接:
通用線程:學(xué)習(xí) Linux LVM,第 1 部分
通用線程:學(xué)習(xí) Linux LVM,第 2 部分
LVM基于Device-mapper用戶程序?qū)崿F(xiàn)。Device-mapper是一種支持邏輯卷管理的通用設(shè)備映射機(jī)制,為存儲資源管理的塊設(shè)備驅(qū)動提供了一個高度模塊化的內(nèi)核架構(gòu)。以下鏈接對Device-mapper架構(gòu)進(jìn)行了極好的說明:
Linux 內(nèi)核中的 Device Mapper 機(jī)制
2. SAN & iSCSI
在接觸了單機(jī)下的邏輯卷管理后,你需要了解SAN,目前主流的企業(yè)級存儲方式。
大部分SAN使用SCSI協(xié)議在服務(wù)器和存儲設(shè)備之間傳輸和溝通,通過在SCSI之上建立不同鏡像層,可以實(shí)現(xiàn)存儲網(wǎng)絡(luò)的連接。常見的有iSCSI,F(xiàn)CP,Fibre Channel over Ethernet等。
SAN通常需要在專用存儲設(shè)備中建立,而iSCSI是基于TCP/IP的SCSI映射,通過iSCSI協(xié)議和Linux iSCSI項(xiàng)目,我們可以在常見的PC機(jī)上建立SAN存儲。
對于如何建立在PC機(jī)上的SAN,可以參考:iSCSI建立。不過,這篇文章提到的iSCSI target管理方式不太方便,通常我們會用targetcli管理target。targetcli可以直接建立和管理不同backstone類型的邏輯卷和不同的export方式,如建立ramdisk并且通過iSCSI export,非常方便。操作方式見targetcli screencast Part 2 of 3: ISCSI – YouTube。
以上都是我們經(jīng)常接觸的單機(jī)塊存儲。接下來是本文主要分享的內(nèi)容:公共云技術(shù)服務(wù)提供的塊存儲服務(wù),開源的塊存儲框架,以及OpenStack目前對塊存儲的定義和支持情況。
分布式塊存儲
在面對極具彈性的存儲需求和性能要求下,單機(jī)或者獨(dú)立的SAN越來越不能滿足企業(yè)的需要。如同數(shù)據(jù)庫系統(tǒng)一樣,塊存儲在scale up的瓶頸下也面臨著scale out的需要。我們可以用以下幾個特點(diǎn)來描述分布式塊存儲系統(tǒng)的概念:
- 分布式塊存儲可以為任何物理機(jī)或者虛擬機(jī)提供持久化的塊存儲設(shè)備
- 分布式塊存儲系統(tǒng)管理塊設(shè)備的創(chuàng)建、刪除和attach/detach
- 分布式塊存儲支持強(qiáng)大的快照功能,快照可以用來恢復(fù)或者創(chuàng)建新的塊設(shè)備
- 分布式存儲系統(tǒng)能夠提供不同IO性能要求的塊設(shè)備
3.1 Amazon EBS
Amazon作為領(lǐng)先的IaaS服務(wù)商,其API目前是IaaS的事實(shí)標(biāo)準(zhǔn)。Amazon EC2目前在大多數(shù)方面遠(yuǎn)超其他IaaS服務(wù)商。Amazon EC2的產(chǎn)品介紹是快速了解Amazon EC2的捷徑。
EBS是Amazon提供的塊存儲服務(wù)。通過EBS,用戶可以隨時增刪遷移volume和快照操作。
Amazon EC2實(shí)例可以將根設(shè)備數(shù)據(jù)存儲在Amazon EBS或者本地實(shí)例存儲上。使用Amazon EBS時,根設(shè)備中的數(shù)據(jù)將獨(dú)立于實(shí)例的生命周期保留下來,使得在停止實(shí)例后仍可以重新啟動使用,與筆記本電腦關(guān)機(jī)并在再次需要時重新啟動相似。另一方面,本地實(shí)例存儲僅在實(shí)例的生命周期內(nèi)保留。這是啟動實(shí)例的一種經(jīng)濟(jì)方式,因?yàn)閿?shù)據(jù)沒有存儲到根設(shè)備中。
Amazon EBS提供兩種類型的卷,即標(biāo)準(zhǔn)卷和預(yù)配置IOPS卷。它們的性能特點(diǎn)和價格不同,可以根據(jù)應(yīng)用程序的要求和預(yù)算定制所需的存儲性能。
標(biāo)準(zhǔn)卷可為要求有適度或突發(fā)式I/O的應(yīng)用程序提供存儲。這些卷平均可以提供大約100 IOPS,最多可突增至數(shù)百IOPS。標(biāo)準(zhǔn)卷也非常適合用作引導(dǎo)卷,其突發(fā)能力可提供快速的實(shí)例啟動時間(通常十幾秒)。
預(yù)配置IOPS卷旨在為數(shù)據(jù)庫等I/O密集型隨機(jī)讀寫工作負(fù)載提供可預(yù)計的高性能。創(chuàng)建一個卷時,利用預(yù)置IOPS為卷確定IOPS速率,隨之Amazon EBS在該卷的生命周期內(nèi)提供該速率。Amazon EBS目前支持每預(yù)配置IOPS卷最多4000 個IOPS。您可以將多個條帶式卷組合在一起,為應(yīng)用程序提供每個Amazon EC2數(shù)千IOPS的能力。
EBS可以在卷連接和使用期間實(shí)時拍攝快照。不過,快照只能捕獲已寫入Amazon EBS 卷的數(shù)據(jù),不包含應(yīng)用程序或操作系統(tǒng)已在本地緩存的數(shù)據(jù)。如果需要確保能為實(shí)例連接的卷獲得一致的快照,需要先徹底地斷開卷連接,再發(fā)出快照命令,然后重新連接卷。
EBS快照目前可以跨regions增量備份,意味著EBS快照時間會大大縮短,從另一面增加了EBS使用的安全性。
總的來說,Amazon EBS是目前IaaS服務(wù)商最引入注目的服務(wù)之一,目前的OpenStack、CloudStack等其他開源框架都無法提供Amazon EBS的彈性和強(qiáng)大的服務(wù)。了解和使用Amazon EBS是學(xué)習(xí)IaaS塊存儲的最好手段。
3.2 阿里云存儲
阿里云是國內(nèi)的公共云計算服務(wù)商。阿里云磁盤目前僅支持在創(chuàng)建云主機(jī)的時候綁定云磁盤或者在升級云主機(jī)的進(jìn)行云磁盤擴(kuò)容,這從根本上就是傳統(tǒng)的虛擬主機(jī)的特點(diǎn)而不是所謂的“云磁盤”。
從目前的阿里云磁盤的限制:
無法快速創(chuàng)建或刪除volume,在進(jìn)行擴(kuò)容時需要升級云主機(jī)才能達(dá)到,而升級云主機(jī)只有在下月云主機(jī)套餐到期時才能生效(中國移動套餐的模式)
一個云主機(jī)最多只能綁定3個云磁盤
從阿里云磁盤目前的使用分析,以下是我對阿里云磁盤實(shí)現(xiàn)的推測:
阿里云主機(jī)是跟磁盤綁定的,這意味著阿里云的云磁盤是local volume(因此性能還是挺可觀的)。用戶需要擴(kuò)容、減少都需要下個月更說明了這點(diǎn),整個主機(jī)在擴(kuò)容時去調(diào)度合適的有足夠存儲空間的host,然后進(jìn)行擴(kuò)容。
阿里云磁盤是分布式塊存儲系統(tǒng),但是由于其QoS無法保證和其他資源調(diào)度原因,無法提供足夠的塊存儲支持。
從演講回顧:阿里云存儲技術(shù)的演進(jìn),以及云服務(wù)用例最佳實(shí)踐中了解到阿里云是基于自家的“盤古”系統(tǒng),那么從實(shí)際使用來說,遠(yuǎn)沒達(dá)到一般的分布式塊存儲系統(tǒng)的要求。
4.1 Ceph
Ceph是開源實(shí)現(xiàn)的PB級分布式文件系統(tǒng),其分布式對象存儲機(jī)制為上層提供了文件接口、塊存儲接口和對象存儲接口。Inktank是Ceph的主要支持商,也是目前Ceph開源社區(qū)的主要力量。
Ceph目前是OpenStack的開源塊存儲實(shí)現(xiàn)系統(tǒng)(即Cinder項(xiàng)目的backend driver之一),其實(shí)現(xiàn)分為三個部分: OSD,Monitor,MDS。OSD是底層對象存儲系統(tǒng),Monitor是集群管理系統(tǒng),MDS是用來支持POSIX文件接口的Metadata Server。從Ceph的原始論文《Ceph: Reliable, Scalable, and High-Performance Distributed Storage》來看,Ceph專注于擴(kuò)展性,高可用性和容錯性。Ceph放棄了傳統(tǒng)的Metadata查表方式(HDFS)而改用算法(CRUSH)去定位具體的block。
利用Ceph提供的RULES可以彈性地制訂存儲策略和Pool選擇,Monitor作為集群管理系統(tǒng)掌握了全部的Cluster Map,Client在沒有Map的情況下需要先向Monitor請求得到,然后通過Object id計算相應(yīng)的OSD Server。
Ceph的文檔可以參考以下鏈接:
- Ceph:一個 Linux PB 級分布式文件系統(tǒng)
- 分布式文件系統(tǒng)Ceph調(diào)研1 – RADOS
- Ceph Architecture
- Ceph的現(xiàn)狀
- ceph的CRUSH數(shù)據(jù)分布算法介紹
- Ceph INTERNAL DEVELOPER DOCUMENTATION
Ceph支持傳統(tǒng)的POSIX文件接口,因此需要額外的MDS(Meatadata Server)支持文件元信息(Ceph的塊存儲和對象存儲支持不需要MDS服務(wù))。Ceph將Data和Metadata分離到兩個服務(wù)上,跟傳統(tǒng)的分布式系統(tǒng)如Lustre相比可以大大增強(qiáng)擴(kuò)展性。在小文件讀寫上,Ceph讀寫文件會有[RTT*2],在每次open時,會先去Metadata Server查詢一次,然后再去Object Server。除了Open操作外,Ceph在Delete上也有問題,它需要到Metadata Server擦除對應(yīng)的Metadata,是n(2)復(fù)雜度。Ceph在Metadata上并非只有壞處,通過Metadata Server,像目錄列表等目錄操作為非常快速,遠(yuǎn)超GlusterFS等其他分布式文件系統(tǒng)的目錄或文件元操作。
如果要用Ceph作為塊存儲項(xiàng)目,有幾個問題需要考慮:
- Ceph在讀寫上不太穩(wěn)定(有btrfs的原因)。目前Ceph官方推薦XFS作為底層文件系統(tǒng)
- Ceph的擴(kuò)展性較難,如果需要介入Ceph,需要較長時間
- Ceph的部署不夠簡易并且集群不夠穩(wěn)定
4.2 Sheepdog
Sheepdog是另一個分布式塊存儲系統(tǒng)實(shí)現(xiàn)。與Ceph相比,它的最大優(yōu)勢就是代碼短小好維護(hù),hack的成本很小。Sheepdog也有很多Ceph不支持的特性,比如說Multi-Disk, Cluster-wide Snapshot等。
Sheepdog主要有兩部分,一個是集群管理,另一個是存儲服務(wù)。集群管理目前使用Corosync或者Zookper來完成,其存儲服務(wù)的特點(diǎn)是在client和存儲host有Cache的實(shí)現(xiàn)可以大大減小數(shù)據(jù)流量。
目前Sheepdog只在QEMU端提供Drive,而缺少library支持,這是Sheepdog目前最主要的問題。但是社區(qū)已經(jīng)有相關(guān)的Blueprint在討論這個問題。
了解Sheepdog的一些相關(guān)資料:
- Sheepdog Overview
- Sheepdog 淘寶核心系統(tǒng)團(tuán)隊
- Sheepdog wiki:Sheepdog的一系列Wiki如同它的代碼一樣簡短出色
目前Taobao是Sheepdog主要用戶和社區(qū)貢獻(xiàn)者。
5. Cinder
OpenStack是目前流行的IaaS框架,提供了與AWS類似的服務(wù)并且兼容其API。OpenStack Nova是計算服務(wù),Swift是對象存儲服務(wù),Quantum是網(wǎng)絡(luò)服務(wù),Glance是鏡像服務(wù),Cinder是塊存儲服務(wù),Keystone是身份認(rèn)證服務(wù),Horizon是Dashboard,另外還有Heat、Oslo、Ceilometer、Ironic等等項(xiàng)目。
OpenStack的存儲主要分為三大類:
(1)對象存儲服務(wù),Swift
(2)塊設(shè)備存儲服務(wù),主要是提供給虛擬機(jī)作為“硬盤”的存儲。這里又分為兩塊:
- 本地塊存儲
- 分布式塊存儲,Cinder
(3)數(shù)據(jù)庫服務(wù),目前是一個正在孵化的項(xiàng)目Trove,前身是Rackspace開源出來的RedDwarf,對應(yīng)AWS里面的RDC。
Cinder是OpenStack中提供類似于EBS塊存儲服務(wù)的API框架。它并沒有實(shí)現(xiàn)對塊設(shè)備的管理和實(shí)際服務(wù),而是為后端不同的存儲結(jié)構(gòu)提供了統(tǒng)一的接口,不同的塊設(shè)備服務(wù)廠商在Cinder中實(shí)現(xiàn)其驅(qū)動支持以與OpenStack進(jìn)行整合。后端的存儲可以是DAS,NAS,SAN,對象存儲或者分布式文件系統(tǒng)。也就是說,Cinder的塊存儲數(shù)據(jù)完整性、可用性保障是由后端存儲提供的。在CinderSupportMatrix中可以看到眾多存儲廠商如NetAPP、IBM、SolidFire、EMC和眾多開源塊存儲系統(tǒng)對Cinder的支持。
從上圖我們也可以看到,Cinder只是提供了一層抽象,然后通過其后段支持的driver實(shí)現(xiàn)來發(fā)出命令來得到回應(yīng)。關(guān)于塊存儲的分配信息以及選項(xiàng)配置等會被保存到OpenStack統(tǒng)一的DB中。
總結(jié)
目前分布式塊存儲的實(shí)現(xiàn)仍然是由Amazon EBS領(lǐng)銜,其卓越穩(wěn)定的讀寫性能、強(qiáng)大的增量快照和跨區(qū)域塊設(shè)備遷移,以及令人驚嘆的QoS控制都是目前開源或者其他商業(yè)實(shí)現(xiàn)無法比擬的。
不過Amazon EBS始終不是公司私有存儲的一部分,作為企業(yè)IT成本的重要部分,塊存儲正在發(fā)生改變。EMC在一個月前發(fā)布了其ViPR平臺,并開放了其接口,試圖接納其他廠商和開源實(shí)現(xiàn)。Nexenta在顛覆傳統(tǒng)的的存儲專有硬件,在其上軟件實(shí)現(xiàn)原來只有專有SDN的能力,讓企業(yè)客戶完全擺脫存儲與廠商的綁定。Inktank極力融合OpenStack并推動Ceph在OpenStack社區(qū)的影響力。這些都說明了,無論是目前的存儲廠商還是開源社區(qū)都在極力推動整個分布式塊存儲的發(fā)展,存儲專有設(shè)備的局限性正在進(jìn)一步弱化了原有企業(yè)的存儲架構(gòu)。
在分布式塊存儲和OpenStack之間,我們可以打造更鞏固的紐帶,將塊存儲在企業(yè)私有云平臺上做更好的集成和運(yùn)維。
【作者簡介】王豪邁,UnitedStack工程師。本文根據(jù)作者的博客文章《塊存儲的世界(入門級)》修改而成。