分布式文件系統(tǒng)ceph知識整理

1簡介

? Ceph是加州大學(xué)Santa Cruz分校的Sage Weil( DreamHost的聯(lián)合創(chuàng)始人) 專為博士論文設(shè)計的新一代自由軟件分布式文件系統(tǒng)叮阅。
2004年醉拓, Ceph項目開始业岁, 提交了第一行代碼。
2006年邮偎, OSDI學(xué)術(shù)會議上肌似, Sage發(fā)表了介紹Ceph的論文, 并在該篇論文的末尾提供了Ceph項目的下載鏈接垮兑。
2010年冷尉, Linus Torvalds將CephClient合并到內(nèi)核2.6.34中, 使Linux與Ceph磨合度更高系枪。
2012年雀哨, 擁抱OpenStack, 進(jìn)入Cinder項目, 成為重要的存儲驅(qū)動雾棺。
2014年膊夹, Ceph正趕上OpenStack大熱, 吸引來自不同廠商越來越多的開發(fā)者加入捌浩, Intel割疾、 SanDisk等公司都參與其中, 同時Inktank公司被Red Hat公司1.75億美元收購嘉栓。
2015年宏榕, Red Hat宣布成立Ceph顧問委員會, 成員包括Canonical侵佃、 CERN麻昼、 Cisco、 Fujitsu馋辈、Intel抚芦、 SanDisk和SUSE。 Ceph顧問委員會將負(fù)責(zé)Ceph軟件定義存儲項目的廣泛議題迈螟, 目標(biāo)是使Ceph成為云存儲系統(tǒng)叉抡。
2016年, OpenStack社區(qū)調(diào)查報告公布答毫, Ceph仍為存儲首選褥民, 這已經(jīng)是Ceph第5次位居調(diào)查的首位了。

1.png

目前洗搂,ceph FS 可以作為Hadoop后端數(shù)據(jù)存儲池消返,可代替HDFS的存儲方案。
Ceph與KVM虛擬化結(jié)合耘拇,ceph塊存儲RBD可作為KVM虛擬化的后端存儲撵颊。
ceph塊存儲RBD可作為openstack的后端存儲。
Ceph的RGW與OwnCloud搭配惫叛,搭建本地網(wǎng)盤倡勇。

特別說明:Ceph支持三種調(diào)用接口:對象存儲,塊存儲嘉涌,文件系統(tǒng)掛載妻熊。
后面主要講解對象存儲模塊相關(guān)。

2ceph架構(gòu)圖

Ceph基本組成結(jié)構(gòu):

3.png

更詳細(xì)的架構(gòu)圖如下:

2.png

Ceph 分上下兩層洛心, 下面為ceph RADOS Cluster 集群固耘。上面為對外提供的應(yīng)用層。
RADOS Cluster是分布式文件存儲词身。
LIBRADOS 是調(diào)用庫厅目,允許應(yīng)用程序訪問RADOS Cluster。
RGW 是一套基于當(dāng)前流行的RESTful協(xié)議網(wǎng)關(guān),兼容S3和SWIFT损敷。
RBD 通過Linux內(nèi)核(Kernel)客戶端和QEMU/KVM驅(qū)動葫笼,提供一個完全分布式的塊存儲。
CEPH FS 通過Linux內(nèi)核(Kernel)客戶端結(jié)合FUSE拗馒,來提供一個兼容POSIX的文件系統(tǒng)路星。

3 Rados Cluster

首先介紹ceph的后端存儲:Rados Cluste。Rados Cluster屬于存儲層級诱桂, 沒有REST洋丐、用戶、桶的概念挥等。

3.1 Rados Cluster基本組件

4.png

一個ceph集群組件必有:MON友绝、OSD組件, 可選MDS(供ceph FS使用)肝劲。
Osd :用于集群中所有數(shù)據(jù)與對象的存儲迁客。處理集群數(shù)據(jù)的復(fù)制、恢復(fù)辞槐、回填掷漱、再均衡。并向其他osd守護(hù)進(jìn)程發(fā)送心跳榄檬,然后向Mon提供一些監(jiān)控信息卜范。當(dāng)Ceph存儲集群設(shè)定數(shù)據(jù)有兩個副本時(一共存兩份),則至少需要兩個OSD守護(hù)進(jìn)程即兩個OSD節(jié)點丙号,集群才能達(dá)到active+clean狀態(tài)先朦。
Monitor :監(jiān)控整個集群的狀態(tài),維護(hù)集群的cluster MAP二進(jìn)制表犬缨,保證集群數(shù)據(jù)的一致性。Monitor map包含以下map:OSD MAP棉浸、PG MAP怀薛、MDS MAP和CRUSH MAP等。
MON :服務(wù)利用Paxos實例迷郑,把每個映射圖存儲為一個文件枝恋, MON高可用集群實現(xiàn)一般為3臺。
MDS(可選) :為Ceph文件系統(tǒng)提供元數(shù)據(jù)計算嗡害、緩存與同步。在ceph中霸妹,元數(shù)據(jù)也是存儲在osd節(jié)點中的,mds類似于元數(shù)據(jù)的代理緩存服務(wù)器。MDS進(jìn)程并不是必須的進(jìn)程鹃骂,只有需要使用CEPHFS時,才需要配置MDS節(jié)點畏线。

3.2 Rados Cluster I/O流

數(shù)據(jù)分布是分布式存儲系統(tǒng)的一個重要部分静盅。
數(shù)據(jù)分布算法目前主流有兩種:一致性HASH和ceph的CRUSH算法。 在Aamzon的Dyanmo鍵值系統(tǒng)中采用一致性HASH算法寝殴,openstack的swift也使用一致性HASH算法,在ceph中使用CRUSH算法蚣常。

3.2.1 crush算法簡介

CRUSH(controlled replication under scalable hashing)是一種基于偽隨機(jī)控制數(shù)據(jù)分布、復(fù)制算法史隆。它是一種偽隨機(jī)的算法魂务,在相同的環(huán)境下,相似的輸入得到的結(jié)果之間沒有相關(guān)性泌射,相同的輸入得到的結(jié)果是確定的。它只需要一個集群的描述地圖和一些規(guī)則就可以根據(jù)一個整型的輸入得到存放數(shù)據(jù)的一個設(shè)備列表熔酷。
Crush同時支持多種數(shù)據(jù)備份策略,典型如鏡像拒秘、RAID及其衍生的糾錯碼等,并受控地將數(shù)據(jù)的多個備份映射到集群不同物理區(qū)域中的底層存儲設(shè)備之上躺酒,從而保證數(shù)據(jù)可靠性。

3.2.2 CEPH I/O流

Rados Cluster中羹应,monitor組件存儲了以下map: OSD MAP、 pg map园匹、mds map雳刺、crush map裸违、mds map、以及monitoer map供汛。

?
5.png

(1) 將文件切割為按照一個特定的size(ceph系統(tǒng)默認(rèn)是4M)被切分成若干個對象涌穆。(這里的對象時RADOS層的對象, 不是RGW中的對象)蒲犬。
(2) 通過對Oid進(jìn)行Hash, 可以得到對應(yīng)PG_ID原叮,(poolid, hash(oid) & mask)
(3) 通過CRUSH算法得到一個OSD列表(OSD1,OSD2奋隶,OSD3),Crush(pgid)->(osd1,osd2…)
(4) 獲取到osd后唯欣,應(yīng)用層客戶端直接向OSD(primary osd)發(fā)起I/O請求。
所以一句話說明CRUSH的作用就是境氢,根據(jù)pgid得到一個OSD列表。

3.3 Rados Cluster 部署實例

下圖為雅虎利用ceph構(gòu)建存儲的服務(wù)器部署圖:


6.png

4 CEPH-RGW

對象存儲是一種新型的存儲形態(tài)萍聊,通常情況提供HTTP訪問接口悦析。從狹義上講寿桨,對象存儲即云存儲强戴。

4.1 RGW架構(gòu)

Ceph的核心模塊RADOS是一個基于對象的分布式存儲系統(tǒng)(注意:這里的對象時指RADOS內(nèi)部的一種數(shù)據(jù)存儲單元亭螟,與對象存儲中的對象概念有區(qū)別)骑歹,通常情況下應(yīng)用通過RADOS抽象庫librados提供的接口訪問RADOS集群,但是librados只提供私有接口陵刹,并不提供HTTP協(xié)議訪問,Ceph為了支持通用的HTTP接口設(shè)計了RGW(RADOS GateWay衰琐,即對象存儲網(wǎng)關(guān))炼蹦。

7.png

4.2 數(shù)據(jù)組織和存儲

通常情況羡宙,一個對象存儲(RGW)的實體包含用戶掐隐、存儲桶和對象狗热,三者之間是一種層級關(guān)系。

8.png

(1) 用戶管理
用戶管理設(shè)計包含以下:用戶認(rèn)證信息匿刮、訪問控制權(quán)限信息和配額信息。
S3用戶認(rèn)證流程請參考《對象存儲概述》文檔熟丸。
RGW將用戶信息保存在RADOS對象的數(shù)據(jù)部分,一個用戶對應(yīng)一個RADOS對象光羞。該對象用用戶ID命名。
(2) 存儲桶信息
一個存儲桶對應(yīng)一個RADOS對象纱兑。一個存儲桶包含的信息分兩類,一類是對RGW網(wǎng)關(guān)透明的信息潜慎,例如:用戶自定義的元數(shù)據(jù) type:音頻文件;一類是RGW網(wǎng)關(guān)關(guān)注的信息铐炫,這類信息包含存儲桶中對象的存儲策略、存儲桶中索引對象的數(shù)目以及應(yīng)用與索引對象的映射關(guān)系驳遵、存儲桶配額等,此類信息由RGWBucketInfo管理堤结。
(3 )對象
應(yīng)用上傳的對象包含數(shù)據(jù)和元數(shù)據(jù)兩部分,數(shù)據(jù)部分保存在一個活多個RADOS對象的數(shù)據(jù)部分竞穷,元數(shù)據(jù)保存在其中一個RADOS對象的擴(kuò)展屬性中。RGW對單個對象提供了兩種上傳接口: 整體上傳和分段上傳瘾带。這里不詳細(xì)介紹。

4.3 功能實現(xiàn)

RGW近幾年一直在不停對齊S3 API
基本功能包含用戶看政、存儲桶、對象的增刪改查允蚣。
引申的功能有存儲桶和對象的訪問控制功能,用戶認(rèn)證功能嚷兔,桶配額功能等森渐。
訪問控制策略如下:

9.jpg

5CEPH-RBD

? RBD是CEPH對外三大存儲服務(wù)組件之一,也是當(dāng)前CEPH最穩(wěn)定竟块、應(yīng)用最廣泛的存儲接口。上傳應(yīng)用訪問RBD塊存儲有兩種途徑:librdb和krdb浪秘。其中l(wèi)ibrdb是一個基于librados的用戶態(tài)接口庫,而krbd是集成在GNU/LINUX內(nèi)核中的一個內(nèi)核模塊秫逝,通過用戶態(tài)的rbd命令行工具,可以將RBD塊存儲映射為本地的一個塊設(shè)備文件违帆。

5.1 RBD架構(gòu)

? RBD架構(gòu):

10.png

6 CEPH-FS

? Ceph FS是為了接管傳統(tǒng)存儲系統(tǒng)產(chǎn)生的。
Ceph FS的MDS是基于動態(tài)子樹分區(qū)法實現(xiàn)刷后,這種算法是一種高效的元數(shù)據(jù)組織和索引方式。
MDS的基于動態(tài)子樹分區(qū)法和CRUSH算法并稱Ceph的兩大核心尝胆。

6.1 Ceph FS架構(gòu)

112.png

(1) CephFs kernel object
為內(nèi)核態(tài)接口护桦,3.10以后的內(nèi)核版本默認(rèn)支持沿后,它通過mount –t ceph將cephFs掛載到操作系統(tǒng)指定目錄下。
(2) CephFs FUSE
指基于FUSE(Filesystem in Userspace, 即用戶空間文件系統(tǒng)廉邑。Linux 在2.6.14內(nèi)核增加FUSE模塊)的用戶態(tài)接口傅寡,通過 ceph-fuse命令將CephFs掛載到操作系統(tǒng)指定目錄廊敌。
(3) User Space Client
為直接通過客戶端應(yīng)用程序調(diào)用CephFs提供的文件系統(tǒng)接口因妙,比如Hadoop調(diào)用CephFs提供的java文件系統(tǒng)接口實現(xiàn)文件存儲痰憎。

7 Ceph與K8s

Kubernetes支持Ceph的塊存儲(Ceph RDB)和文件存儲(CephFS)作為Kubernetes的持久存儲后端。
k8s提供了非常豐富的組件:volume攀涵,Persistent Volumes,Dynamic Volume Provisioning以故。對于volume涡拘,如果K8s pod掛掉据德,對應(yīng)的volume也就消失了鳄乏,所有后面主要介紹Persistent Volumes和Dynamic Volume Provisioning利用ceph創(chuàng)建。

7.1 RBD與K8S

參考資料:https://zhangchenchen.github.io/2017/11/17/kubernetes-integrate-with-ceph/
Persistent Volumes
(1) 在ceph中創(chuàng)建一個2G的image橱野。
創(chuàng)建image過程中有個坑:在jewel版本下默認(rèn)format是2,開啟了rbd的一些屬性善玫,而這些屬性有的內(nèi)核版本是不支持的,會導(dǎo)致map不到device的情況茅郎,可以在創(chuàng)建時指定feature(我們就是這樣做的),也可以在ceph配置文件中關(guān)閉這些新屬性:rbd_default_features = 2蜗元。參考rbd無法map(rbd feature disable)系冗。
需要指定feature:rbd create test-image -s 2G --image-feature layering
(2) k8s在image上創(chuàng)建pv和pvc奕扣,并創(chuàng)建pod使用Pvc。

Dynamic Volume Provisioning
(1) 創(chuàng)建一個storageclass
(2) 創(chuàng)建一個PVC掌敬,指定storageclass
(3) 創(chuàng)建 rbd-provisioner
(注意:如果直接創(chuàng)建pod掛載的話會報錯如下:
Error creating rbd image: executable file not found in $PATH
原因:這是因為我們的k8s集群是使用kubeadm創(chuàng)建的,k8s的幾個服務(wù)也是跑在集群靜態(tài)pod中奔害,而kube-controller-manager組件會調(diào)用rbd的api楷兽,但是因為它的pod中沒有安裝rbd华临,所以會報錯芯杀,如果是直接安裝在物理機(jī)中,因為我們已經(jīng)安裝了ceph-common揭厚,所以不會出現(xiàn)這個問題。)
(4) 就可以創(chuàng)建pod使用pvc了寻馏。

7.2 cephFs與K8s

參考資料:https://tonybai.com/2017/05/08/mount-cephfs-acrossing-nodes-in-kubernetes-cluster/
CephRBD的問題:在不同node上多個Pod是無法以ReadWriteMany模式掛載同一個CephRBD的,在一個node上多個Pod是可以以ReadWriteMany模式掛載同一個CephRBD的诚欠。
CephFs: 不同節(jié)點可以掛載同一CephFS顽染。

CephFs掛載方式:
在K8s中,至少可以通過兩種方式掛載CephFS粉寞,一種是通過Pod直接掛載;另外一種則是通過pv和pvc掛載左腔,此方法與掛載RBD類似唧垦。

資料:《ceph分布式存儲實戰(zhàn)》 《ceph設(shè)計原理和實現(xiàn)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末液样,一起剝皮案震驚了整個濱河市振亮,隨后出現(xiàn)的幾起案子巧还,更是在濱河造成了極大的恐慌坊秸,老刑警劉巖麸祷,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褒搔,死亡現(xiàn)場離奇詭異阶牍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)走孽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來磕瓷,“玉大人,你說我怎么就攤上這事生宛。” “怎么了陷舅?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長莱睁。 經(jīng)常有香客問我,道長仰剿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任南吮,我火速辦了婚禮,結(jié)果婚禮上誊酌,老公的妹妹穿的比我還像新娘。我一直安慰自己碧浊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布箱锐。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浩聋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天赡勘,我揣著相機(jī)與錄音,去河邊找鬼闸与。 笑死,一個胖子當(dāng)著我的面吹牛岸售,可吹牛的內(nèi)容都是我干的践樱。 我是一名探鬼主播凸丸,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼屎慢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起腻惠,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎集灌,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欣喧,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年唆阿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驯鳖。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖臼隔,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摔握,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站泊愧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏删咱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一痰滋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧敲街,春花似錦、人聲如沸多艇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姆涩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間阵面,已是汗流浹背轻局。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工样刷, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人置鼻。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像箕母,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嘶是,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容