Ceph IO流程及數(shù)據(jù)分布

1. Ceph IO流程及數(shù)據(jù)分布

rados_io_1.png

1.1 正常IO流程圖

ceph_io_2.png

步驟:

  1. client 創(chuàng)建cluster handler。
  2. client 讀取配置文件执虹。
  3. client 連接上monitor羡滑,獲取集群map信息菇爪。
  4. client 讀寫(xiě)io 根據(jù)crshmap 算法請(qǐng)求對(duì)應(yīng)的主osd數(shù)據(jù)節(jié)點(diǎn)。
  5. 主osd數(shù)據(jù)節(jié)點(diǎn)同時(shí)寫(xiě)入另外兩個(gè)副本節(jié)點(diǎn)數(shù)據(jù)柒昏。
  6. 等待主節(jié)點(diǎn)以及另外兩個(gè)副本節(jié)點(diǎn)寫(xiě)完數(shù)據(jù)狀態(tài)凳宙。
  7. 主節(jié)點(diǎn)及副本節(jié)點(diǎn)寫(xiě)入狀態(tài)都成功后,返回給client职祷,io寫(xiě)入完成氏涩。

1.2 新主IO流程圖

說(shuō)明:
如果新加入的OSD1取代了原有的 OSD4成為 Primary OSD, 由于 OSD1 上未創(chuàng)建 PG , 不存在數(shù)據(jù),那么 PG 上的 I/O 無(wú)法進(jìn)行有梆,怎樣工作的呢是尖?

ceph_io_3.png

步驟:

  1. client連接monitor獲取集群map信息。
  2. 同時(shí)新主osd1由于沒(méi)有pg數(shù)據(jù)會(huì)主動(dòng)上報(bào)monitor告知讓osd2臨時(shí)接替為主淳梦。
  3. 臨時(shí)主osd2會(huì)把數(shù)據(jù)全量同步給新主osd1析砸。
  4. client IO讀寫(xiě)直接連接臨時(shí)主osd2進(jìn)行讀寫(xiě)。
  5. osd2收到讀寫(xiě)io爆袍,同時(shí)寫(xiě)入另外兩副本節(jié)點(diǎn)首繁。
  6. 等待osd2以及另外兩副本寫(xiě)入成功。
  7. osd2三份數(shù)據(jù)都寫(xiě)入成功返回給client, 此時(shí)client io讀寫(xiě)完畢陨囊。
  8. 如果osd1數(shù)據(jù)同步完畢弦疮,臨時(shí)主osd2會(huì)交出主角色。
  9. osd1成為主節(jié)點(diǎn)蜘醋,osd2變成副本胁塞。

1.3 Ceph IO算法流程

ceph_io_4.png
  1. File用戶需要讀寫(xiě)的文件。File->Object映射:
    a. ino (File的元數(shù)據(jù)压语,F(xiàn)ile的唯一id)啸罢。
    b. ono(File切分產(chǎn)生的某個(gè)object的序號(hào),默認(rèn)以4M切分一個(gè)塊大小)胎食。
    c. oid(object id: ino + ono)扰才。

  2. Object是RADOS需要的對(duì)象。Ceph指定一個(gè)靜態(tài)hash函數(shù)計(jì)算oid的值厕怜,將oid映射成一個(gè)近似均勻分布的偽隨機(jī)值衩匣,然后和mask按位相與蕾总,得到pgid。Object->PG映射:
    a. hash(oid) & mask-> pgid 琅捏。
    b. mask = PG總數(shù)m(m為2的整數(shù)冪)-1 生百。

  3. PG(Placement Group),用途是對(duì)object的存儲(chǔ)進(jìn)行組織和位置映射, (類似于redis cluster里面的slot的概念) 一個(gè)PG里面會(huì)有很多object。采用CRUSH算法柄延,將pgid代入其中蚀浆,然后得到一組OSD。PG->OSD映射:
    a. CRUSH(pgid)->(osd1,osd2,osd3) 搜吧。

1.4 Ceph IO偽代碼流程

locator = object_name
obj_hash =  hash(locator)
pg = obj_hash % num_pg
osds_for_pg = crush(pg)    # returns a list of osds
primary = osds_for_pg[0]
replicas = osds_for_pg[1:]

1.5 Ceph RBD IO流程

ceph_rbd_io.png

步驟:

  1. 客戶端創(chuàng)建一個(gè)pool蜡坊,需要為這個(gè)pool指定pg的數(shù)量。
  2. 創(chuàng)建pool/image rbd設(shè)備進(jìn)行掛載赎败。
  3. 用戶寫(xiě)入的數(shù)據(jù)進(jìn)行切塊秕衙,每個(gè)塊的大小默認(rèn)為4M,并且每個(gè)塊都有一個(gè)名字僵刮,名字就是object+序號(hào)据忘。
  4. 將每個(gè)object通過(guò)pg進(jìn)行副本位置的分配。
  5. pg根據(jù)cursh算法會(huì)尋找3個(gè)osd搞糕,把這個(gè)object分別保存在這三個(gè)osd上勇吊。
  6. osd上實(shí)際是把底層的disk進(jìn)行了格式化操作,一般部署工具會(huì)將它格式化為xfs文件系統(tǒng)窍仰。
  7. object的存儲(chǔ)就變成了存儲(chǔ)一個(gè)文rbd0.object1.file汉规。

1.6 Ceph RBD IO框架圖

ceph_rbd_io1.png

客戶端寫(xiě)數(shù)據(jù)osd過(guò)程:

  1. 采用的是librbd的形式,使用librbd創(chuàng)建一個(gè)塊設(shè)備驹吮,向這個(gè)塊設(shè)備中寫(xiě)入數(shù)據(jù)针史。
  2. 在客戶端本地同過(guò)調(diào)用librados接口,然后經(jīng)過(guò)pool碟狞,rbd啄枕,object、pg進(jìn)行層層映射,在PG這一層中族沃,可以知道數(shù)據(jù)保存在哪3個(gè)OSD上频祝,這3個(gè)OSD分為主從的關(guān)系。
  3. 客戶端與primay OSD建立SOCKET 通信脆淹,將要寫(xiě)入的數(shù)據(jù)傳給primary OSD常空,由primary OSD再將數(shù)據(jù)發(fā)送給其他replica OSD數(shù)據(jù)節(jié)點(diǎn)。

1.7 Ceph Pool和PG分布情況

ceph_pool_pg.png

說(shuō)明:

  • pool是ceph存儲(chǔ)數(shù)據(jù)時(shí)的邏輯分區(qū)盖溺,它起到namespace的作用漓糙。
  • 每個(gè)pool包含一定數(shù)量(可配置)的PG。
  • PG里的對(duì)象被映射到不同的Object上咐柜。
  • pool是分布到整個(gè)集群的兼蜈。
  • pool可以做故障隔離域,根據(jù)不同的用戶場(chǎng)景不一進(jìn)行隔離拙友。

1.8 Ceph 數(shù)據(jù)擴(kuò)容PG分布

場(chǎng)景數(shù)據(jù)遷移流程:

  • 現(xiàn)狀3個(gè)OSD, 4個(gè)PG
  • 擴(kuò)容到4個(gè)OSD, 4個(gè)PG

現(xiàn)狀:

ceph_recory_1.png

擴(kuò)容后:

ceph_io_recry2.png

說(shuō)明
每個(gè)OSD上分布很多PG, 并且每個(gè)PG會(huì)自動(dòng)散落在不同的OSD上为狸。如果擴(kuò)容那么相應(yīng)的PG會(huì)進(jìn)行遷移到新的OSD上,保證PG數(shù)量的均衡遗契。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末辐棒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子牍蜂,更是在濱河造成了極大的恐慌漾根,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲫竞,死亡現(xiàn)場(chǎng)離奇詭異辐怕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)从绘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)寄疏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人僵井,你說(shuō)我怎么就攤上這事陕截。” “怎么了批什?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵农曲,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我驻债,道長(zhǎng)乳规,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任合呐,我火速辦了婚禮驯妄,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘合砂。我一直安慰自己青扔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布翩伪。 她就那樣靜靜地躺著微猖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缘屹。 梳的紋絲不亂的頭發(fā)上凛剥,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音轻姿,去河邊找鬼犁珠。 笑死逻炊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的犁享。 我是一名探鬼主播余素,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼炊昆!你這毒婦竟也來(lái)了桨吊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤凤巨,失蹤者是張志新(化名)和其女友劉穎视乐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體敢茁,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡佑淀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了彰檬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渣聚。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖僧叉,靈堂內(nèi)的尸體忽然破棺而出奕枝,到底是詐尸還是另有隱情,我是刑警寧澤瓶堕,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布隘道,位于F島的核電站,受9級(jí)特大地震影響郎笆,放射性物質(zhì)發(fā)生泄漏谭梗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一宛蚓、第九天 我趴在偏房一處隱蔽的房頂上張望激捏。 院中可真熱鬧,春花似錦凄吏、人聲如沸远舅。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)图柏。三九已至,卻和暖如春任连,著一層夾襖步出監(jiān)牢的瞬間蚤吹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裁着,地道東北人繁涂。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像二驰,于是被迫代替她去往敵國(guó)和親扔罪。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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