Ceph分布式存儲(chǔ)

Ceph

Ceph是一個(gè)可靠恼五、自動(dòng)重均衡空执、自動(dòng)恢復(fù)的分布式存儲(chǔ)系統(tǒng),根據(jù)場(chǎng)景劃分可以將Ceph分為三大塊叹侄,分別是對(duì)象存儲(chǔ)吁恍、塊設(shè)備和文件系統(tǒng)服務(wù)。塊設(shè)備存儲(chǔ)是Ceph的強(qiáng)項(xiàng)播演。

Ceph的主要優(yōu)點(diǎn)是分布式存儲(chǔ)冀瓦,在存儲(chǔ)每一個(gè)數(shù)據(jù)時(shí),都會(huì)通過(guò)計(jì)算得出該數(shù)據(jù)存儲(chǔ)的位置写烤,盡量將數(shù)據(jù)分布均衡翼闽,不存在傳統(tǒng)的單點(diǎn)故障的問(wèn)題,可以水平擴(kuò)展洲炊。

Ceph架構(gòu)

Ceph架構(gòu)

RADOS自身是一個(gè)完整的分布式對(duì)象存儲(chǔ)系統(tǒng)感局,它具有可靠、智能暂衡、分布式等特性询微,Ceph的高可靠、高可拓展狂巢、高性能撑毛、高自動(dòng)化都是由這一層來(lái)提供的,用戶數(shù)據(jù)的存儲(chǔ)最終也都是通過(guò)這一層來(lái)進(jìn)行存儲(chǔ)的唧领,RADOS可以說(shuō)就是Ceph的核心組件藻雌。

RADOS系統(tǒng)主要由兩部分組成雌续,分別是OSD和Monitor。

基于RADOS層的上一層是LIBRADOS胯杭,LIBRADOS是一個(gè)庫(kù)驯杜,它允許應(yīng)用程序通過(guò)訪問(wèn)該庫(kù)來(lái)與RADOS系統(tǒng)進(jìn)行交互,支持多種編程語(yǔ)言做个,比如C鸽心、C++、Python等叁温。

基于LIBRADOS層開發(fā)的又可以看到有三層再悼,分別是RADOSGW、RBD和CEPH FS膝但。

RADOSGW:RADOSGW是一套基于當(dāng)前流行的RESTFUL協(xié)議的網(wǎng)關(guān)冲九,并且兼容S3和Swift。
RBD:RBD通過(guò)Linux內(nèi)核客戶端和QEMU/KVM驅(qū)動(dòng)來(lái)提供一個(gè)分布式的塊設(shè)備跟束。
CEPH FS:CEPH FS通過(guò)Linux內(nèi)核客戶端和FUSE來(lái)提供一個(gè)兼容POSIX的文件系統(tǒng)莺奸。

Ceph核心組件RADOS

RADOS系統(tǒng)主要由兩部分組成,分別是OSD和Monitor冀宴。

Ceph OSD:OSD的英文全稱是Object Storage Device灭贷,它的主要功能是存儲(chǔ)數(shù)據(jù)、復(fù)制數(shù)據(jù)略贮、平衡數(shù)據(jù)甚疟、恢復(fù)數(shù)據(jù)等,與其它OSD間進(jìn)行心跳檢查等逃延,并將一些變化情況上報(bào)給Ceph Monitor览妖。一般情況下一塊硬盤對(duì)應(yīng)一個(gè)OSD,由OSD來(lái)對(duì)硬盤存儲(chǔ)進(jìn)行管理揽祥,當(dāng)然一個(gè)分區(qū)也可以成為一個(gè)OSD讽膏。

Ceph Monitor:由該英文名字我們可以知道它是一個(gè)監(jiān)視器,負(fù)責(zé)監(jiān)視Ceph集群拄丰,維護(hù)Ceph集群的健康狀態(tài)府树,同時(shí)維護(hù)著Ceph集群中的各種Map圖,比如OSD Map料按、Monitor Map奄侠、PG Map和CRUSH Map,這些Map統(tǒng)稱為Cluster Map站绪,Cluster Map是RADOS的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)遭铺,管理集群中的所有成員、關(guān)系、屬性等信息以及數(shù)據(jù)的分發(fā)魂挂,比如當(dāng)用戶需要存儲(chǔ)數(shù)據(jù)到Ceph集群時(shí)甫题,OSD需要先通過(guò)Monitor獲取最新的Map圖,然后根據(jù)Map圖和object id等計(jì)算出數(shù)據(jù)最終存儲(chǔ)的位置涂召。

副本

為保證高可用性坠非, Ceph 存儲(chǔ)集群應(yīng)該保存兩份以上的對(duì)象副本。Ceph OSD 守護(hù)進(jìn)程自動(dòng)在其它 Ceph 節(jié)點(diǎn)上創(chuàng)建對(duì)象副本來(lái)確保數(shù)據(jù)安全和高可用性果正。

Ceph 監(jiān)視器維護(hù)著集群運(yùn)行圖的主副本炎码。為保證高可用性,監(jiān)視器也實(shí)現(xiàn)了集群化秋泳。一個(gè)監(jiān)視器集群確保了當(dāng)某個(gè)監(jiān)視器失效時(shí)的高可用性潦闲。

Ceph數(shù)據(jù)分布算法

Ceph是為大規(guī)模分布式存儲(chǔ)而設(shè)計(jì)的,數(shù)據(jù)分布算法必須能夠滿足在大規(guī)模的集群下數(shù)據(jù)依然能夠快速的準(zhǔn)確的計(jì)算存放位置迫皱,同時(shí)能夠在硬件故障或擴(kuò)展硬件設(shè)備時(shí)做到盡可能小的數(shù)據(jù)遷移歉闰,Ceph的CRUSH算法就是精心為這些特性設(shè)計(jì)的。

在說(shuō)明CRUSH算法的基本原理之前卓起,先介紹幾個(gè)概念和它們之間的關(guān)系和敬。

Object: 當(dāng)用戶要將數(shù)據(jù)存儲(chǔ)到Ceph集群時(shí),存儲(chǔ)數(shù)據(jù)都會(huì)被分割成多個(gè)Object戏阅,每個(gè)Object都有一個(gè)object id昼弟,每個(gè)Object的大小是可以設(shè)置的,默認(rèn)是4MB奕筐,Object可以看成是Ceph存儲(chǔ)的最小存儲(chǔ)單元舱痘。

Object

PG:由于Object的數(shù)量很多,所以Ceph引入了PG的概念用于管理Object离赫,每個(gè)Object最后都會(huì)通過(guò)CRUSH計(jì)算映射到某個(gè)PG中衰粹,一個(gè)PG可以包含多個(gè)Object。

PG與OSD的關(guān)系:PG也需要通過(guò)CRUSH計(jì)算映射到OSD中去存儲(chǔ)笆怠,如果是二副本的,則每個(gè)PG都會(huì)映射到二個(gè)OSD誊爹,比如[OSD#1,OSD#2]蹬刷,那么OSD#1是存放該P(yáng)G的主副本,OSD#2是存放該P(yáng)G的從副本频丘,保證了數(shù)據(jù)的冗余办成。

把對(duì)象映射到歸置組在 OSD 和客戶端間創(chuàng)建了一個(gè)間接層。由于 Ceph 集群必須能增大或縮小搂漠、并動(dòng)態(tài)地重均衡迂卢。如果讓客戶端“知道”哪個(gè) OSD 有哪個(gè)對(duì)象,就會(huì)導(dǎo)致客戶端和 OSD 緊耦合;相反而克, CRUSH 算法把對(duì)象映射到歸置組靶壮、然后再把各歸置組映射到一或多個(gè) OSD ,這一間接層可以讓 Ceph 在 OSD 守護(hù)進(jìn)程和底層設(shè)備上線時(shí)動(dòng)態(tài)地重均衡员萍。下列圖表描述了 CRUSH 如何將對(duì)象映射到歸置組腾降、再把歸置組映射到 OSD 。

PG 映射到 OSD

PG和PGP的關(guān)系:pg是用來(lái)存放object的碎绎,pgp相當(dāng)于是pg存放osd的一種排列組合螃壤,我舉個(gè)例子,比如有3個(gè)osd筋帖,osd.1奸晴、osd.2和osd.3,副本數(shù)是2日麸,如果pgp的數(shù)目為1寄啼,那么pg存放的osd組合就只有一種,可能是[osd.1,osd.2]赘淮,那么所有的pg主從副本分別存放到osd.1和osd.2辕录,如果pgp設(shè)為2,那么其osd組合可以兩種梢卸,可能是[osd.1,osd.2]和[osd.1,osd.3]走诞,是不是很像我們高中數(shù)學(xué)學(xué)過(guò)的排列組合,pgp就是代表這個(gè)意思蛤高。一般來(lái)說(shuō)應(yīng)該將pg和pgp的數(shù)量設(shè)置為相等蚣旱。

object、pg戴陡、pool塞绿、osd、存儲(chǔ)磁盤的關(guān)系

本質(zhì)上CRUSH算法是根據(jù)存儲(chǔ)設(shè)備的權(quán)重來(lái)計(jì)算數(shù)據(jù)對(duì)象的分布的恤批,權(quán)重的設(shè)計(jì)可以根據(jù)該磁盤的容量和讀寫速度來(lái)設(shè)置异吻,比如根據(jù)容量大小可以將1T的硬盤設(shè)備權(quán)重設(shè)為1,2T的就設(shè)為2喜庞,在計(jì)算過(guò)程中诀浪,CRUSH是根據(jù)Cluster Map、數(shù)據(jù)分布策略和一個(gè)隨機(jī)數(shù)共同決定數(shù)組最終的存儲(chǔ)位置的延都。

Cluster Map里的內(nèi)容信息包括存儲(chǔ)集群中可用的存儲(chǔ)資源及其相互之間的空間層次關(guān)系雷猪,比如集群中有多少個(gè)支架,每個(gè)支架中有多少個(gè)服務(wù)器晰房,每個(gè)服務(wù)器有多少塊磁盤用以O(shè)SD等求摇。

數(shù)據(jù)分布策略是指可以通過(guò)Ceph管理者通過(guò)配置信息指定數(shù)據(jù)分布的一些特點(diǎn)射沟,比如管理者配置的故障域是Host,也就意味著當(dāng)有一臺(tái)Host起不來(lái)時(shí)与境,數(shù)據(jù)能夠不丟失验夯,CRUSH可以通過(guò)將每個(gè)pg的主從副本分別存放在不同Host的OSD上即可達(dá)到,不單單可以指定Host嚷辅,還可以指定機(jī)架等故障域簿姨,除了故障域,還有選擇數(shù)據(jù)冗余的方式簸搞,比如副本數(shù)或糾刪碼扁位。

層級(jí)化的Cluster Map

下面這個(gè)式子簡(jiǎn)單的表明CRUSH的計(jì)算表達(dá)式:

CRUSH(X)  -> (osd.1,osd.2.....osd.n)

式子中的X就是一個(gè)隨機(jī)數(shù)。

下面通過(guò)一個(gè)計(jì)算PG ID的示例來(lái)看CRUSH的一個(gè)計(jì)算過(guò)程:

(1)Client輸入Pool ID和對(duì)象ID趁俊;

(2)CRUSH獲得對(duì)象ID并對(duì)其進(jìn)行Hash運(yùn)算域仇;

(3)CRUSH計(jì)算OSD的個(gè)數(shù),Hash取模獲得PG的ID寺擂,比如0x48暇务;

(4)CRUSH取得該P(yáng)ool的ID,比如是1怔软;

(5)CRUSH預(yù)先考慮到Pool ID相同的PG ID垦细,比如1.48。

一個(gè)栗子

先創(chuàng)建一個(gè)名為testpool包含6個(gè)PG和6個(gè)PGP的存儲(chǔ)池挡逼。

ceph osd pool create testpool 6 6

通過(guò)寫數(shù)據(jù)后我們查看下pg的分布情況:

ceph pg dump pgs | grep ^1 | awk '{print $1,$2,$15}'

dumped pgs in format plain
1.1 75 [3,6,0]
1.0 83 [7,0,6]
1.3 144 [4,1,2]
1.2 146 [7,4,1]
1.5 86 [4,6,3]
1.4 80 [3,0,4]

第1列為pg的id括改,第2列為該pg所存儲(chǔ)的對(duì)象數(shù)目,第3列為該pg所在的osd

我們擴(kuò)大PG再看看:

ceph osd pool set testpool pg_num 12

再次用上面的命令查詢分布情況:

ceph pg dump pgs | grep ^1 | awk '{print $1,$2,$15}'

dumped pgs in format plain
1.1 37 [3,6,0]
1.9 38 [3,6,0]
1.0 41 [7,0,6]
1.8 42 [7,0,6]
1.3 48 [4,1,2]
1.b 48 [4,1,2]
1.7 48 [4,1,2]
1.2 48 [7,4,1]
1.6 49 [7,4,1]
1.a 49 [7,4,1]
1.5 86 [4,6,3]
1.4 80 [3,0,4]

我們可以看到pg的數(shù)量增加到12個(gè)了家坎,pg1.1的對(duì)象數(shù)量本來(lái)是75的嘱能,現(xiàn)在是37個(gè),可以看到它把對(duì)象數(shù)分給新增的pg1.9了虱疏,剛好是38惹骂,加起來(lái)是75,而且可以看到pg1.1和pg1.9的osd盤是一樣的做瞪。而且可以看到osd盤的組合還是那6種对粪。

我們?cè)黾觩gp的數(shù)量來(lái)看下,使用命令:

ceph osd pool set testpool pgp_num 12

再看下:

ceph pg dump pgs | grep ^1 | awk '{print $1,$2,$15}'

dumped pgs in format plain
1.a 49 [1,2,6]
1.b 48 [1,6,2]
1.1 37 [3,6,0]
1.0 41 [7,0,6]
1.3 48 [4,1,2]
1.2 48 [7,4,1]
1.5 86 [4,6,3]
1.4 80 [3,0,4]
1.7 48 [1,6,0]
1.6 49 [3,6,7]
1.9 38 [1,4,2]
1.8 42 [1,2,3]

再看pg1.1和pg1.9装蓬,可以看到pg1.9不在[3,6,0]上衩侥,而在[1,4,2]上了,該組合是新加的矛物,可以知道增加pgp_num其實(shí)是增加了osd盤的組合。

通過(guò)實(shí)驗(yàn)總結(jié):
(1)PG是指定存儲(chǔ)池存儲(chǔ)對(duì)象的目錄有多少個(gè)跪但,PGP是存儲(chǔ)池PG的OSD分布組合個(gè)數(shù)
(2)PG的增加會(huì)引起PG內(nèi)的數(shù)據(jù)進(jìn)行分裂履羞,分裂相同的OSD上新生成的PG當(dāng)中
(3)PGP的增加會(huì)引起部分PG的分布進(jìn)行變化峦萎,但是不會(huì)引起PG內(nèi)對(duì)象的變動(dòng)

Reference

Ceph基礎(chǔ)知識(shí)和基礎(chǔ)架構(gòu)認(rèn)識(shí)
Ceph體系結(jié)構(gòu)
Ceph介紹及原理架構(gòu)分享

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市忆首,隨后出現(xiàn)的幾起案子爱榔,更是在濱河造成了極大的恐慌,老刑警劉巖糙及,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件详幽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浸锨,警方通過(guò)查閱死者的電腦和手機(jī)唇聘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柱搜,“玉大人迟郎,你說(shuō)我怎么就攤上這事〈险海” “怎么了宪肖?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)健爬。 經(jīng)常有香客問(wèn)我控乾,道長(zhǎng),這世上最難降的妖魔是什么娜遵? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任蜕衡,我火速辦了婚禮,結(jié)果婚禮上魔熏,老公的妹妹穿的比我還像新娘衷咽。我一直安慰自己,他們只是感情好蒜绽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布镶骗。 她就那樣靜靜地躺著,像睡著了一般躲雅。 火紅的嫁衣襯著肌膚如雪鼎姊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天相赁,我揣著相機(jī)與錄音相寇,去河邊找鬼。 笑死钮科,一個(gè)胖子當(dāng)著我的面吹牛唤衫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播绵脯,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼佳励,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼休里!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赃承,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤妙黍,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后瞧剖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體拭嫁,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年抓于,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了做粤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毡咏,死狀恐怖驮宴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呕缭,我是刑警寧澤堵泽,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站恢总,受9級(jí)特大地震影響迎罗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜片仿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一纹安、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧砂豌,春花似錦厢岂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至筐摘,卻和暖如春卒茬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咖熟。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工圃酵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人馍管。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓郭赐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親确沸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捌锭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353