Ceph的基本概念介紹和入門知識(shí)儲(chǔ)備。
1、ceph簡介
Ceph是一個(gè)開源項(xiàng)目,它提供軟件定義的、統(tǒng)一的存儲(chǔ)解決方案。Ceph是一個(gè)可大規(guī)模擴(kuò)展、高性能并且無單點(diǎn)故障的分布式存儲(chǔ)系統(tǒng)。從一開始它就運(yùn)行在通用商用硬件上,具有高度可伸縮性,容量可擴(kuò)展至EB級(jí)別,甚至更大。
Ceph的架構(gòu)在設(shè)計(jì)之初就包含下列特性:
- 所有的組件必須可擴(kuò)展
- 不能存在單點(diǎn)故障
- 解決方案必須是軟件定義的、開源的并且可適配
- Ceph軟件應(yīng)該運(yùn)行在通用商用硬件之上
- 所有組件必須盡可能自我管理
Ceph存儲(chǔ)系統(tǒng)在同一個(gè)底層架構(gòu)上提供了塊、文件和對象存儲(chǔ),使得用戶可以自主選擇他們需要的存儲(chǔ)方式。對象是Ceph的基礎(chǔ),也就是它的基本存儲(chǔ)單元。任何格式的數(shù)據(jù),不管是塊、對象還是文件,都以對象的形式保存在Ceph集群的歸置組(Placement Group,Pg)
中。使用對象存儲(chǔ),我們可以將平臺(tái)和硬件獨(dú)立開來。在Ceph中,由于對象沒有物理存儲(chǔ)路徑綁定,使得對象非常靈活并且與位置無關(guān)。這也使得Ceph的規(guī)模能夠近線性地從PB級(jí)別擴(kuò)展到EB級(jí)別。
Ceph是圣克魯茲加利福尼亞大學(xué)的Sage Weil在2003年開發(fā)的,也是他的博士學(xué)位項(xiàng)目的一部分。初始的項(xiàng)目原型是大約40000行C++代碼的Ceph文件系統(tǒng),并于2006年作為參考實(shí)現(xiàn)和研究平臺(tái)遵循LGPL協(xié)議(Lesser GUN Public License)開源。美國勞倫斯利物莫國家實(shí)驗(yàn)室(Lawrence Livermore National Laboratory)資助了Sage的初始研究工作。2003~2007年是Ceph的研究開發(fā)時(shí)期。在這期間,它的核心組件逐步形成,并且社區(qū)對項(xiàng)目的貢獻(xiàn)也已經(jīng)開始逐漸變大。Ceph沒有采用雙重許可模式,也就不存在只針對企業(yè)版的特性。
Inktank是Ceph背后的公司,它的主要目的是給他們的企業(yè)客戶提供專業(yè)知識(shí)、處理流程、工具和支撐,使他們能夠有效地采用和管理Ceph存儲(chǔ)系統(tǒng)。Sage是Inktank的CTO和創(chuàng)始人。
Ceph這個(gè)詞是寵物章魚的一個(gè)常見綽號(hào)。Ceph可以看作Cephalopod的縮寫,它屬于海洋軟體類動(dòng)物家族。Ceph以章魚作為自己的吉祥物,表達(dá)了Ceph跟章魚一樣的并行行為。
Inktank這個(gè)詞與章魚有一定關(guān)系。漁民有時(shí)候也把章魚稱為墨魚,因?yàn)樗鼈兛梢試娚淠?。這就解釋了為什么章魚(Ceph)跟墨魚(Inktank)有一定關(guān)系。同樣,Ceph和Inktank有很多共同點(diǎn)。你可以認(rèn)為Inktank就是Ceph的智庫。
開源Linux社區(qū)2008年就預(yù)見到Ceph的潛力,并將其加入Linux內(nèi)核主線。這已經(jīng)成為Ceph的里程碑事件。
2、Ceph與云
云環(huán)境要求其存儲(chǔ)能夠以低成本縱向和橫向擴(kuò)展,而且能夠容易與云框架中其他組件集成。
OpenStack項(xiàng)目大力推動(dòng)了公有云和私有云的發(fā)展。它已經(jīng)證明了自己是一個(gè)端到端云解決方案。它自己的內(nèi)部核心存儲(chǔ)組件Swift提供基于對象的存儲(chǔ)和Nova-Volume(也稱為Cinder),而Cinder則為VM提供塊存儲(chǔ)。
與Swift(它僅提供對象存儲(chǔ))不同,Ceph是一個(gè)包含塊存儲(chǔ)、文件存儲(chǔ)和對象存儲(chǔ)的統(tǒng)一存儲(chǔ)解決方案,這樣可以通過單一存儲(chǔ)集群為OpenStack提供多種存儲(chǔ)類型。因此,你可以輕松而高效地為OpenStack云管理存儲(chǔ)。OpenStack和Ceph社區(qū)已經(jīng)一起合作了許多年,致力于為OpenStack云開發(fā)一個(gè)完全支持的Ceph存儲(chǔ)后端。從Folsom(OpenStack第6個(gè)主要版本)開始,Ceph已經(jīng)完全與OpenStack集成。Ceph開發(fā)人員確保Ceph能夠適用于OpenStack的最新版,同時(shí)貢獻(xiàn)新特性以及修正bug。OpenStack通過它的cinder和glance組件使用Ceph最苛刻的特性RADOS塊設(shè)備(RBD)。Ceph RBD通過提供精簡配置的快照復(fù)制(snapshotted-cloned)卷幫助OpenStack快速配置數(shù)百個(gè)VM實(shí)例,這種方式既減少空間需求,又非常快速。
3、Ceph與軟件定義存儲(chǔ)(SDS)
Ceph是一個(gè)真正的SDS解決方案,它是開源軟件,運(yùn)行在商用硬件上,因此不存在廠商鎖定,并且能提供低成本存儲(chǔ)。SDS方案提供了客戶急需的硬件選擇的靈活性??蛻艨梢愿鶕?jù)自身的需要選擇任意制造商的商用硬件,并自由地設(shè)計(jì)異構(gòu)的硬件解決方案。在此硬件解決方案之上的Ceph的軟件定義存儲(chǔ)可以很好地工作。它可以從軟件層面正確提供所有的企業(yè)級(jí)存儲(chǔ)特性。低成本、可靠性、可擴(kuò)展性是Ceph的主要特點(diǎn)。
從存儲(chǔ)廠商的角度來看,統(tǒng)一存儲(chǔ)的定義就是在單一的平臺(tái)上同時(shí)提供基于文件和基于塊的訪問。
Ceph底層中并不存在塊和文件的管理,而是管理對象并且在對象之上支持基于塊和文件的存儲(chǔ)。在傳統(tǒng)基于文件的存儲(chǔ)系統(tǒng)中,文件是通過文件目錄進(jìn)行尋址的。類似地,Ceph中的對象通過唯一的標(biāo)識(shí)符進(jìn)行尋址,并存儲(chǔ)在一個(gè)扁平的尋址空間中。剔除了元數(shù)據(jù)操作之后,對象提供了無限的規(guī)模擴(kuò)展和性能提升。Ceph通過一個(gè)算法來動(dòng)態(tài)計(jì)算存儲(chǔ)和獲取某個(gè)對象的位置。
傳統(tǒng)的存儲(chǔ)系統(tǒng)并不具備更智能地管理元數(shù)據(jù)的方法。元數(shù)據(jù)是關(guān)于數(shù)據(jù)的信息,它決定了數(shù)據(jù)將往哪里存儲(chǔ),從哪里讀取。傳統(tǒng)的存儲(chǔ)系統(tǒng)通過維護(hù)一張集中的查找表來跟蹤它們的元數(shù)據(jù)。也就是說,客戶端每次發(fā)出讀寫操作請求時(shí),存儲(chǔ)系統(tǒng)首先要查找這個(gè)巨大的元數(shù)據(jù)表,得到結(jié)果之后它才能執(zhí)行客戶端請求的操作。對于一個(gè)小的存儲(chǔ)系統(tǒng)而言,你或許不會(huì)感覺到性能問題,但對于一個(gè)大的存儲(chǔ)集群來說,你將會(huì)受制于這種方法的性能限制。它也會(huì)限制系統(tǒng)的擴(kuò)展性。
4、Ceph中的數(shù)據(jù)副本
Ceph沒有采用傳統(tǒng)的存儲(chǔ)架構(gòu),而是用下一代架構(gòu)完全重塑了它。Ceph引入了一個(gè)叫CRUSH的新算法,而不是保存和操縱元數(shù)據(jù)。CRUSH是Controlled Replication Under Scalable Hashing的縮寫。
CRUSH算法在后臺(tái)計(jì)算數(shù)據(jù)存儲(chǔ)和讀取的位置,而不是為每個(gè)客戶端請求執(zhí)行元數(shù)據(jù)表的查找。通過動(dòng)態(tài)計(jì)算元數(shù)據(jù),Ceph也就不需要管理一個(gè)集中式的元數(shù)據(jù)表?,F(xiàn)代計(jì)算機(jī)計(jì)算速度極快,能夠非??斓赝瓿蒀RUSH查找。另外,利用分布式存儲(chǔ)的功能可以將一個(gè)小的計(jì)算負(fù)載分布到集群中的多個(gè)節(jié)點(diǎn)。CRUSH清晰的元數(shù)據(jù)管理方法比傳統(tǒng)存儲(chǔ)系統(tǒng)的更好。
CRUSH會(huì)以多副本的方式保存數(shù)據(jù),以保證在故障區(qū)域中有些組件故障的情況下數(shù)據(jù)依舊可用。用戶在Ceph的CRUSH map中可以自由地為他們的基礎(chǔ)設(shè)施定義故障區(qū)域。這也就使得Ceph管理員能夠在自己的環(huán)境中高效地管理他們的數(shù)據(jù)。CRUSH使得Ceph能夠自我管理和自我療愈。當(dāng)故障區(qū)域中的組件故障時(shí),CRUSH能夠感知哪個(gè)組件故障了,并確定其對集群的影響。無須管理員的任何干預(yù),CRUSH就會(huì)進(jìn)行自我管理和自我療愈,為因故障而丟失的據(jù)數(shù)執(zhí)行恢復(fù)操作。CRUSH根據(jù)集群中維護(hù)的其他副本來重新生成丟失的數(shù)據(jù)。在任何時(shí)候,集群數(shù)據(jù)都會(huì)有多個(gè)副本分布在集群中。
使用RAID技術(shù)修復(fù)多個(gè)大硬盤是一個(gè)很繁瑣的過程。另外,RAID需要很多整塊的磁盤來充當(dāng)備用盤。這也會(huì)影響到TCO,如果你不配置備用盤,將會(huì)將會(huì)遇到麻煩。RAID機(jī)制要求在同一個(gè)RAID組中的磁盤必須完全相同。如果你改動(dòng)了磁盤容量、轉(zhuǎn)速和磁盤類型,則你可能要面臨懲罰。這樣做將會(huì)對于存儲(chǔ)系統(tǒng)的容量和性能產(chǎn)生不利影響。
TCO (Total Cost of Ownership ),即總擁有成本,包括產(chǎn)品采購到后期使用、維護(hù)的成本。這是一種公司經(jīng)常采用的技術(shù)評(píng)價(jià)標(biāo)準(zhǔn)。由于常見的RAID5、6、10等陣列方式需要使用磁盤作為鏡像盤或者熱備盤,因此如果你買了10塊10T的硬盤共計(jì)100T空間,使用陣列后會(huì)導(dǎo)致最后可以使用的硬盤容量小于100T。當(dāng)然你也可以使用諸如RAID0之類的不損失空間的陣列方式,但是這樣會(huì)導(dǎo)致數(shù)據(jù)的安全性大大地降低。
基于RAID的企業(yè)級(jí)存儲(chǔ)系統(tǒng)通常都需要昂貴的硬件RAID卡,這也增加了系統(tǒng)總成本。
RAID系統(tǒng)最大的限制因素是它只能防止磁盤故障,而不能為網(wǎng)絡(luò)、服務(wù)器硬件、OS、交換設(shè)備的故障或者區(qū)域?yàn)?zāi)害提供保護(hù)措施。
RAID最多能為你提供防止兩個(gè)磁盤故障的措施。在任何情況下你無法容忍超過兩個(gè)的磁盤故障。
Cpeh是一個(gè)軟件定義的存儲(chǔ),因此它不需要任何特殊硬件來提供數(shù)據(jù)副本功能。另外,數(shù)據(jù)副本級(jí)別可以通過命令高度定制化。這也就意味著Ceph存儲(chǔ)管理員能夠輕松地根據(jù)自身需要和底層基礎(chǔ)設(shè)施特點(diǎn)來管理副本策略。
這樣的恢復(fù)操作不需要任何熱備磁盤;數(shù)據(jù)只是簡單地復(fù)制到Ceph集群中其他的磁盤上。
除了數(shù)據(jù)副本方法外,Ceph還支持其他用于保證數(shù)據(jù)可靠性的方法,比如糾刪碼技術(shù)。糾刪碼方式下,毀損的數(shù)據(jù)借助糾刪碼計(jì)算通過算法進(jìn)行恢復(fù)或再次生成。
5、Ceph的存儲(chǔ)兼容性
Ceph是一個(gè)完備的企業(yè)級(jí)存儲(chǔ)系統(tǒng),它支持多種協(xié)議以及訪問方式,主要可以分為塊、文件和對象存儲(chǔ)三大類。
5.1 Ceph塊存儲(chǔ)
塊存儲(chǔ)是存儲(chǔ)區(qū)域網(wǎng)絡(luò)中使用的一個(gè)數(shù)據(jù)存儲(chǔ)類別。在這種類型中,數(shù)據(jù)以塊的形式存儲(chǔ)在卷里,卷會(huì)掛接到節(jié)點(diǎn)上。它可以為應(yīng)用程序提供更大的存儲(chǔ)容量,并且可靠性和性能都更高。這些塊形成的卷會(huì)映射到操作系統(tǒng)中,并被文件系統(tǒng)層控制。
Ceph引入了一個(gè)新的RBD協(xié)議,也就是Ceph塊設(shè)備(Ceph Block Device)。
RBD塊呈帶狀分布在多個(gè)Ceph對象之上,而這些對象本身又分布在整個(gè)Ceph存儲(chǔ)集群中,因此能夠保證數(shù)據(jù)的可靠性以及性能。
幾乎所有的Linux操作系統(tǒng)發(fā)行版都支持RBD。除了可靠性和性能之外,RBD也支持其他的企業(yè)級(jí)特性,例如完整和增量式快照,精簡的配置,寫時(shí)復(fù)制(copy-on-write)式克隆,以及其他特性。RBD還支持全內(nèi)存式緩存,這可以大大提高它的性能。Ceph RBD支持的最大鏡像為16EB。在OpenStack中,可以通過cinder(塊)和glance(image)組件來使用Ceph塊設(shè)備。這樣做可以讓你利用Ceph塊存儲(chǔ)的copy-on-write特性在很短的時(shí)間內(nèi)創(chuàng)建上千個(gè)VM。
5.2 Ceph文件存儲(chǔ)
Ceph文件系統(tǒng)(也就是CephFS)是一個(gè)兼容POSIX的文件系統(tǒng),它利用Ceph存儲(chǔ)集群來保存用戶數(shù)據(jù)。CephFS將數(shù)據(jù)和元數(shù)據(jù)分開存儲(chǔ),為上層的應(yīng)用程序提供較高的性能以及可靠性。
Linux內(nèi)核驅(qū)動(dòng)程序支持CephFS,這也使得CephFS高度適用于各大Linux操作系統(tǒng)發(fā)行版。
在Cpeh集群內(nèi)部,Ceph文件系統(tǒng)庫(libcephfs)運(yùn)行在RADOS庫(librados)之上,后者是Ceph存儲(chǔ)集群協(xié)議,由文件、塊和對象存儲(chǔ)共用。要使用CephFS,你的集群節(jié)點(diǎn)上最少要配置一個(gè)Ceph元數(shù)據(jù)服務(wù)器(MDS)。然而,需要注意的是,單一的MDS服務(wù)器將成為Ceph文件系統(tǒng)的單點(diǎn)故障。MDS配置后,客戶端可以采用多種方式使用CephFS。如果要把Ceph掛載成文件系統(tǒng),客戶端可以使用本地Linux內(nèi)核的功能或者使用Ceph社區(qū)提供的ceph-fuse(用戶空間文件系統(tǒng))驅(qū)動(dòng)。除此之外,客戶端可以使用第三方開源程序,例如NFS的Ganesha和SMB/CIFS的Samba。
5.3 Ceph對象存儲(chǔ)
對象存儲(chǔ)是一種以對象形式而不是傳統(tǒng)文件和塊形式存儲(chǔ)數(shù)據(jù)的方法。
Ceph是一個(gè)分布式對象存儲(chǔ)系統(tǒng),通過它的對象網(wǎng)關(guān)(object gateway),也就是RADOS網(wǎng)關(guān)(radosgw)提供對象存儲(chǔ)接口。RADOS網(wǎng)關(guān)利用librgw(RADOS網(wǎng)關(guān)庫)和librados這些庫,允許應(yīng)用程序跟Ceph對象存儲(chǔ)建立連接。
RADOS網(wǎng)關(guān)提供RESTful接口讓用戶的應(yīng)用程序?qū)?shù)據(jù)存儲(chǔ)到Ceph集群中。RADOS網(wǎng)關(guān)接口滿足以下特點(diǎn)。
- 兼容Swift:這是為OpenStack Swift API提供的對象存儲(chǔ)功能。
- 兼容S3:這是為Amazon S3 API提供的對象存儲(chǔ)功能。
- Admin API:這也稱為管理API或者原生API,應(yīng)用程序可以直接使用它來獲取訪問存儲(chǔ)系統(tǒng)的權(quán)限以管理存儲(chǔ)系統(tǒng)。
要訪問Ceph的對象存儲(chǔ)系統(tǒng),也可以繞開RADOS網(wǎng)關(guān)層,這樣更靈活并且速度更快。librados軟件庫允許用戶的應(yīng)用程序通過C、C++、Java、Python和PHP直接訪問Ceph對象存儲(chǔ)。Ceph對象存儲(chǔ)具備多站點(diǎn)(multisite)的能力,也就是說它能為災(zāi)難恢復(fù)提供解決方案。通過RADOS或者聯(lián)合網(wǎng)關(guān)可以配置多站點(diǎn)的對象存儲(chǔ)。
6、其他存儲(chǔ)方案
6.1 GPFS/通用并行文件系統(tǒng)
GPFS(General Parallel File System,通用并行文件系統(tǒng))是一個(gè)分布式文件系統(tǒng),由IBM開發(fā)及擁有。這是一個(gè)專有、閉源的存儲(chǔ)系統(tǒng),這使得它缺少吸引力并且難以適應(yīng)。存儲(chǔ)硬件加上授權(quán)以及支持成本使得它非常昂貴。另外,它提供的存儲(chǔ)訪問接口非常有限;它既不能提供塊存儲(chǔ),也不能提供RESTful接口來訪問存儲(chǔ)系統(tǒng),因此這是一個(gè)限制非常嚴(yán)格的系統(tǒng)。甚至最大的數(shù)據(jù)副本數(shù)都限制只有3個(gè),這在多個(gè)組件同時(shí)故障的情形下降低了系統(tǒng)的可靠性。
6.2 iRDOS
iRDOS是面向規(guī)則的數(shù)據(jù)系統(tǒng)的代表,它是依據(jù)第三條款(3-clause)BSD協(xié)議發(fā)布的開源數(shù)據(jù)管理軟件。iRDOS不是一個(gè)高度可靠的存儲(chǔ)系統(tǒng),因?yàn)樗膇CAT元數(shù)據(jù)服務(wù)器是單點(diǎn)(single point of failure,SPOF),并且它不提供真正的HA。另外,它提供的存儲(chǔ)訪問接口很有限;既不能提供塊存儲(chǔ),也不能提供RESTful接口來訪問存儲(chǔ)系統(tǒng),因此這是一個(gè)限制非常嚴(yán)格的系統(tǒng)。它更適合于存儲(chǔ)少量大文件,而不是同時(shí)存儲(chǔ)小文件和大文件。iRdos采用傳統(tǒng)的工作方式,維護(hù)一個(gè)關(guān)于物理位置(與文件名相關(guān)聯(lián))的索引。由于多個(gè)客戶端都需要從元數(shù)據(jù)服務(wù)器請求文件位置,使得元數(shù)據(jù)服務(wù)器需要承受更多的計(jì)算負(fù)載,從而導(dǎo)致單點(diǎn)故障以及性能瓶頸。
6.3 HDFS
HDFS是一個(gè)用Java寫的并且為Hadoop框架而生的分布式可擴(kuò)展文件系統(tǒng)。HDFS不是一個(gè)完全兼容POSIX的文件系統(tǒng),并且不支持塊存儲(chǔ),這使得它的適用范圍不如Ceph。HDFS的可靠性不需要討論,因?yàn)樗皇且粋€(gè)高度可用的文件系統(tǒng)。HDFS中的單點(diǎn)故障以及性能瓶頸主要源于它單一的NameNode節(jié)點(diǎn)。它更適合于存儲(chǔ)少量大文件,而不是同時(shí)存儲(chǔ)小文件和大文件。
6.4 Lustre
Lustre是一個(gè)由開源社區(qū)推動(dòng)的并行分布式文件系統(tǒng),依據(jù)GNU(General Public License,通用公共許可證)發(fā)布。在Lustre中,由單獨(dú)一個(gè)服務(wù)器負(fù)責(zé)存儲(chǔ)和管理元數(shù)據(jù)。因此,從客戶端來的所有I/O請求都完全依賴于這個(gè)服務(wù)器的計(jì)算能力,但對企業(yè)級(jí)計(jì)算來說通常這個(gè)服務(wù)器的計(jì)算能力都比較低。與iRDOS和HDFS類似,Lustre適合于存儲(chǔ)少量大文件,而不是同時(shí)存儲(chǔ)小文件和大文件。與iRDOS類似,Lustre管理一個(gè)用于映射物理位置和文件名的索引文件,這就決定了它是一個(gè)傳統(tǒng)的架構(gòu),而且容易出現(xiàn)性能瓶頸。Lustre不具備任何節(jié)點(diǎn)故障檢測和糾正機(jī)制。在節(jié)點(diǎn)出現(xiàn)故障時(shí),客戶端只能自行連接其他節(jié)點(diǎn)。
6.5 Gluster
GlusterFS最初由Gluster公司開發(fā),該公司2011年被Red Hat收購。GlusterFS是一個(gè)橫向擴(kuò)展的網(wǎng)絡(luò)附加(network-attached)文件系統(tǒng)。在Gluster中,管理員必須明確使用哪種安置策略來將數(shù)據(jù)副本存儲(chǔ)到不同地域的機(jī)架上。Gluster本身不內(nèi)置塊訪問、文件系統(tǒng)和遠(yuǎn)程副本,而是以擴(kuò)展(add-ons)的方式支持。