Ceph 介紹

ceph 簡介

什么是 Ceph?

  • Ceph 是一種為優(yōu)秀的性能义图、可靠性和可擴展性而設計的 統(tǒng)一的咽瓷、分布式 的存儲系統(tǒng)。

    • 統(tǒng)一的: 意味著 Ceph 可以一套存儲系統(tǒng)同時提供 對象存儲贸街、塊存儲文件系統(tǒng) 存儲三種功能庵寞,以便在滿足不同應用需求的前提下簡化部署和運維。
    • 分布式: 在 Ceph 系統(tǒng)中則意味著真正的 無中心結構 和沒有理論上限的系統(tǒng)規(guī)模 可擴展性薛匪。

為什么要關注 Ceph捐川?

  • Ceph 本身確實具有較為突出的優(yōu)勢。其先進的核心設計思想蛋辈,概括為八個字 “無需查表,算算就好”

ceph 架構

ceph 系統(tǒng) 自下向上 可以分為四個層次:

  • 基礎存儲系統(tǒng) RADOSReliable, Autonomic, Distributed Object Store冷溶,即可靠的渐白、自動化的、分布式的對象存儲)

  • 基礎庫 LIBRADOS

  • 高層應用接口

    • rgw(RADOS Gateway)
    • RBD(Rados Block Device)
    • CephFS(Ceph File System)
  • 應用層

rados

Ceph 的存儲集群(Storage Cluster)逞频,又稱為 RADOS(Reliable, Autonomic Distributed Object Store)纯衍,顧名思義,它提供了一個可靠苗胀、能自我管理的分布式對象存儲襟诸。RADOS 是 Ceph 存儲系統(tǒng)的核心。Ceph 的數(shù)據(jù)訪問方法(如 RBD基协、CephFS歌亲、RADOSGW、librados)的所有操作都是在 RADOS 層之上構建的澜驮。當 Ceph 集群接收到來自客戶端的寫請求時陷揪,CRUSH算法首先計算出存儲位置,然后這些信息傳遞到 RADOS 層進行進一步處理杂穷。RADOS 以小對象的形式將數(shù)據(jù)分發(fā)到集群內(nèi)的所有節(jié)點悍缠,最后將這些對象存儲在 OSD 中。當配置的復制數(shù)大于 1 時耐量,RADOS 負責數(shù)據(jù)的可靠性飞蚓,它復制對象,創(chuàng)建副本并將它們存儲在不同的故障區(qū)域中廊蜒。 RADOS 包含兩個核心組件:OSDMON趴拧。

Ceph Monitor

  • Ceph monitor 維護 cluster map 的"主副本"。這意味著劲藐,Ceph 客戶端只需連接一個 Ceph monitor 并檢索當前的 cluster map八堡,便可確定所有 Ceph monitor 和 Ceph OSD 的位置,即獲得 全局系統(tǒng)狀態(tài)記錄的數(shù)據(jù)結構聘芜。cluster map 主要包含 5 個方面的信息:

    • mon map
      • ceph mon dump
    • osd map
      • ceph osd dump
    • pg map
      • ceph pg dump
    • crush map
      • ceph osd crush dump
      • ceph osd getcrushmap -o {filename}
      • crushtool -d {comp-crushmap-filename} -o {decomp-crushmap-filename}
    • mds map
      • ceph fs dump
  • Ceph 客戶端必須先連接 Ceph monitor兄渺,然后才能從 Ceph OSD 讀取或?qū)懭?Ceph OSD。利用 cluster map 的當前副本和 CRUSH 算法汰现,Ceph 客戶端可以計算任何對象的位置挂谍。計算對象位置的能力使得 Ceph 客戶端能夠直接與 Ceph OSD 通信,這是 Ceph 高可擴展性和性能的一個重要方面瞎饲。

  • Ceph monitor 也提供身份驗證和日志記錄服務口叙。Ceph monitor 將 monitor 服務中的所有更改寫入到單個 Paxos 實例,而 Paxos 將更改寫入到 KV 存儲嗅战,以獲得 強一致性妄田。Monitor 之間同步可參考: MONITOR STORE SYNCHRONIZATION

Ceph OSD

  1. OSD 是 Ceph 存儲集群中最重要的一個基礎組件俺亮,它負責將實際的數(shù)據(jù)以對象的形式存儲在每一個集群節(jié)點的物理磁盤中。對于任何讀寫操作疟呐,客戶端首先向 MON 請求 cluster map脚曾,然后客戶端就可以直接和 OSD 進行 I/O 操作。

  2. 一個 Ceph 集群包含多個 OSD启具。一個典型的 Ceph 集群部署方案會為集群節(jié)點上的每個物理磁盤創(chuàng)建一個 OSD daemon本讥,這是推薦的做法。以多副本為例鲁冯,OSD 上的每個對象都有一個主副本和幾個輔副本拷沸,輔副本分散在其他 OSD。一個 OSD 對于一些對象是主副本薯演,同時對于其他對象可能是輔副本撞芍,存放輔副本的 OSD 受主副本 OSD 控制,如果主副本OSD 異常(或者對應的磁盤故障)涣仿,輔副本 OSD 可以成為主副本 OSD勤庐。

  3. osd 會檢查自身的狀態(tài)以及其他 osd 的狀態(tài),并向 monitor 匯報好港。

ceph pool

Ceph pool 是一個用來存儲對象的邏輯分區(qū)愉镰,每個池都包含一定數(shù)量的 PG,進而實現(xiàn)把一定數(shù)量的對象映射到集群內(nèi)部不同 OSD 上的目的钧汹。 Ceph pool 還支持快照功能丈探,以及為對象設置所有者和訪問權限。

RBD

RBD 對外提供塊存儲拔莱,可以被映射碗降、格式化,進而像其他磁盤一樣掛載到服務器塘秦。

RGW/RADOSGW

RGW讼渊,Ceph 對象網(wǎng)關,也稱做 RADOS 網(wǎng)關尊剔,它是一個代理爪幻,可以將 HTTP 請求轉(zhuǎn)換為 RADOS,也可以把 RADOS 轉(zhuǎn)換為 HTTP 請求须误,從而提供 restful 接口挨稿,兼容 S3 和 Swift。Ceph 對象網(wǎng)關使用 Ceph對象網(wǎng)關守護進程(RGW)與 librgw京痢、librados 交互奶甘。

Ceph Manager

Ceph 管理器軟件,可以收集整個集群的所有狀態(tài)祭椰。包括 dashboard臭家, prometheus 等等疲陕。

Ceph Metadata Server

MDS 是 Ceph 文件系統(tǒng)的元數(shù)據(jù)服務器,跟蹤文件層次結構并存儲元數(shù)據(jù)钉赁。只有 CephFS 才需要鸭轮。

CephFS 在 RADOS 層之上提供了一個兼容 POSIX 的文件系統(tǒng)。它使用 MDS 作為守護進程橄霉,負責管理其元數(shù)據(jù)并將它和其他數(shù)據(jù)分開。CephFS 使用 cephfuse 模塊(FUSE)擴展其在用戶空間文件系統(tǒng)方面的支持(就是將 CephFS 掛載到客戶端機器上)邑蒋。它還允許直接與應用程序交互姓蜂,使用 libcephfs 庫直接訪問 RADOS 集群。


Ceph 尋址流程

三次映射

  • File -> Object -> PG -> OSD

基本概念

File —— 此處的 file 就是用戶需要存儲或者訪問的文件医吊。對于一個基于 Ceph 開發(fā)的對象存儲應用而言钱慢,這個 file 也就對應于應用中的 “對象”,也就是用戶直接操作的 “對象”卿堂。

Object —— 此處的 object 是 RADOS 所看到的“對象”束莫。Object 與上面提到的 file 的區(qū)別是,object 的最大 size 由 RADOS 限定(通常為 2MB 或 4MB)草描,以便實現(xiàn)底層存儲的組織管理览绿。因此,當上層應用向 RADOS 存入 size 很大的 file 時穗慕,需要將 file 切分成統(tǒng)一大小的一系列 object(最后一個的大小可以不同)進行存儲饿敲。

PG(Placement Group)—— 顧名思義,PG 的用途是對 object 的存儲進行組織和位置映射逛绵。具體而言怀各,一個 PG 負責組織若干個 object(可以成千上萬個甚至更多),但一個 object 只能被映射到一個PG中术浪,即瓢对,PG 和 object 之間是“一對多”映射關系。同時胰苏,一個 PG 會被映射到多個 OSD 上硕蛹,而每個 OSD 上都會承載大量的 PG,即碟联,PG 和 OSD 之間是“多對多”映射關系妓美。在實踐當中,n 至少為 2鲤孵,如果用于生產(chǎn)環(huán)境壶栋,則至少為 3(對于副本池而言)。一個 OSD 上的 PG 則可達到數(shù)百個普监。事實上贵试,PG 數(shù)量的設置牽扯到數(shù)據(jù)分布的均勻性問題琉兜。PG 里的一些概念可參考: PLACEMENT GROUP CONCEPTS

為什么要引入 PG?

  • PG 相當于一個虛擬組件毙玻,出于集群伸縮豌蟋,性能方面的考慮。
  • 如果沒有 PG桑滩,則 object 直接映射到 osd 上梧疲,百萬千萬級別甚至更多的對象管理和追蹤起來會很困難。因為正常情況下运准,osd 數(shù)量固定的情況下幌氮,PG 數(shù)量也是固定的(2 的整數(shù)次冪,有專門的計算公式)胁澳。記錄每個 OSD 承載了哪些 PG 是可行的该互,而且其變化不頻繁,開銷小韭畸。 在 OSD 故障后宇智,很容易獲得 OSD 承載的 PG 列表,并計算出各個 PG 的另外幾個副本在哪個 OSD胰丁。有了這些信息随橘,才具備了故障處理的可行性。

File -> object 映射

這次映射的目的是锦庸,將用戶要操作的 file太防,映射為 RADOS 能夠處理的 object。其映射十分簡單酸员,本質(zhì)上就是按照 object 的最大 size 對 file 進行切分蜒车。這種切分的好處:

  • 讓大小不限的 file 變成最大 size 一致、可以被 RADOS 高效管理的 object幔嗦;
  • 讓對單一 file 實施的串行處理變?yōu)閷Χ鄠€ object 實施的并行化處理酿愧。

object 有自己的 ID,二進制數(shù)據(jù)以及由鍵值對組成的元數(shù)據(jù)信息邀泉。且 ID 是集群唯一的嬉挡。

Object -> PG 映射

在 file 被映射為一個或多個 object 之后,就需要將每個 object 獨立地映射到一個 PG 中去汇恤。計算公式: hash(oid) & mask -> pgid 根據(jù) RADOS 的設計庞钢,給定 PG 的總數(shù)為 m(m 應該為 2 的整數(shù)冪),則 mask 的值為 m-1因谎。因此基括,哈希值計算和按位與操作的整體結果事實上是從所有 m 個 PG 中近似均勻隨機選擇一個〔撇恚基于這一機制风皿,當有大量 object 和大量 PG 時河爹,RADOS 能夠保證 object 和 PG 之間的近似均勻映射。具體可以參考:CALCULATING PG IDS

PG -> OSD 映射

第三次映射就是將作為 object 的邏輯組織單元的 PG 映射到數(shù)據(jù)的實際存儲單元 OSD桐款。如前面圖所示咸这,RADOS 采用一個名為 CRUSH 的算法,將 pgid 代入其中魔眨,然后得到一組共 n 個 OSD媳维。這 n 個 OSD 即共同負責存儲和維護一個 PG 中的所有 object。前已述及遏暴,n 的數(shù)值可以根據(jù)實際應用中對于可靠性的需求而配置侨艾,在生產(chǎn)環(huán)境下通常為 3。具體到每個 OSD拓挥,則由其上運行的 OSD deamon 負責執(zhí)行映射到本地的 object 在本地文件系統(tǒng)中的存儲、訪問袋励、元數(shù)據(jù)維護等操作侥啤。 需要注意的是,PG -> OSD 映射object -> PG” 映射中采用的哈希算法不同茬故,這個 CRUSH 算法的結果不是絕對不變的盖灸,而是受到其他因素的影響。其影響因素主要有:

  • 一是當前系統(tǒng)狀態(tài)磺芭,也就是 cluster map赁炎。當系統(tǒng)中的 OSD 狀態(tài)、數(shù)量發(fā)生變化時钾腺,cluster map 可能發(fā)生變化徙垫,而這種變化將會影響到 PG 與 OSD 之間的映射。
  • 二是存儲策略配置放棒。這里的策略主要與安全相關姻报。利用策略配置,系統(tǒng)管理員可以指定承載同一個 PG 的 3 個 OSD 分別位于數(shù)據(jù)中心的不同服務器乃至機架上间螟,從而進一步改善存儲的可靠性吴旋。

數(shù)據(jù)操作流程

以 file 寫入過程為例

當某個 client 需要向 Ceph 集群寫入一個 file 時,首先需要在本地完成尋址流程厢破,將 file 變?yōu)橐粋€ object荣瑟,然后找出存儲該 object 的一組三個 OSD。 找出三個 OSD 后摩泪,client 將直接和 Primary OSD 通信笆焰,發(fā)起寫入操作(步驟1)。Primary OSD 收到請求后见坑,分別向 Secondary OSD 和 Tertiary OSD 發(fā)起寫入操作(步驟2仙辟、3)同波。當 Secondary OSD 和 Tertiary OSD 各自完成寫入操作后,將分別向 Primary OSD 發(fā)送確認信息(步驟4叠国、5)未檩。當 Primary OSD 確信其他兩個 OSD 的寫入完成后,則自己也完成數(shù)據(jù)寫入粟焊,并向 client 確認 object 寫入操作完成(步驟6)冤狡。


集群維護

由若干個 monitor 共同負責整個 Ceph 集群中所有 OSD 狀態(tài)的發(fā)現(xiàn)與記錄,并且共同形成 cluster map 的 master 版本项棠,然后擴散至全體 OSD 以及 client悲雳。OSD 使用 cluster map 進行數(shù)據(jù)的維護,而 client 使用 cluster map 進行數(shù)據(jù)的尋址香追。 monitor 并不主動輪詢各個 OSD 的當前狀態(tài)合瓢。正相反,OSD 需要向 monitor 上報狀態(tài)信息透典。常見的上報有兩種情況:一是新的OSD被加入集群晴楔,二是某個 OSD 發(fā)現(xiàn)自身或者其他 OSD 發(fā)生異常。在收到這些上報信息后峭咒,monitor 將更新 cluster map 信息并加以擴散税弃。

Cluster map 的內(nèi)容

  • Epoch,即版本號凑队,為一個單調(diào)遞增序列则果,Epoch 越大,則 cluster map 版本越新漩氨。
  • 各個 OSD 的網(wǎng)絡地址西壮。
  • 各個 OSD 的狀態(tài)。up 或者 down叫惊,表明 OSD 是否正常工作茸时;in 或者 out,表明 OSD 是否在至少一個 PG 中赋访。
  • CRUSH 算法配置參數(shù)可都。表明了 Ceph 集群的物理層級關系(cluster hierarchy),位置映射規(guī)則(placement rules)蚓耽。

osd 狀態(tài):

狀態(tài) Up Down
In 正常運行渠牲,且承載至少一個 PG 的數(shù)據(jù)(標準工作狀態(tài) 發(fā)生異常,但仍然承載至少一個 PG 的數(shù)據(jù)(剛發(fā)生異常)
out 正常運行步悠,未承載任何 PG(新加入或故障修復重新加入的 OSD) 徹底發(fā)生故障签杈,不再承載任何 PG

CEPH 重新平衡和恢復

當有新的 osd 加入集群或者移除了 osd,就會把狀態(tài)上報給 Monitor,Monitor 知道了 osd map 發(fā)生了變化就會觸發(fā) rebalancing答姥,確保 pg 能夠平滑的移動到各個 osd 上铣除。以 pg 為整體進行數(shù)據(jù)重平衡,重平衡的過程中可能會影響性能鹦付。一次性加入的 osd 越多尚粘,數(shù)據(jù) rebalancing 就越頻繁,業(yè)務也可能因此受到影響敲长。生產(chǎn)環(huán)境中郎嫁,強烈建議一次只添加一個 osd,最大限度的減少性能和業(yè)務的影響祈噪。

新增一個 OSD

首先根據(jù)配置信息與 monitor 通信泽铛,monitor 將其加入 cluster map,并設置為 up 且 out 狀態(tài)辑鲤,再將最新版本的cluster map 發(fā)給這個新 OSD盔腔。

自動化的故障恢復(Failure recovery)

收到 monitor 發(fā)過來的 cluster map 之后,這個新 OSD 計算出自己所承載的 PG 以及和自己承載同一個 PG 的其他 OSD月褥。然后與這些 OSD 取得聯(lián)系弛随。如果這個 PG 目前處于降級狀態(tài)(即承載該 PG 的 OSD 個數(shù)少于正常值),則其他 OSD 將把這個 PG 內(nèi)的所有對象和元數(shù)據(jù)賦值給新 OSD吓坚。數(shù)據(jù)復制完成后,新 OSD 被置為 up 且 in 狀態(tài)灯荧,cluster map 也更新礁击。

自動化的故障探測(Failure detection)過程

如果一個 OSD 發(fā)現(xiàn)和自己共同承擔一個 PG 的另一個 OSD 無法聯(lián)通,則會將這一情況上報 monitor逗载。此外哆窿,如果一個 OSD deamon 發(fā)現(xiàn)自身工作狀態(tài)異常,也將把異常情況主動上報給 monitor厉斟。此時挚躯,monitor 將把出現(xiàn)問題的 OSD 的狀態(tài)設置為 down 且 in。如果超過某一預定時間期限該 OSD 仍然無法恢復正常擦秽,則其狀態(tài)將被設置為 down 且 out码荔。如果該 OSD 能夠恢復正常,則其狀態(tài)會恢復成 up 且 in感挥。具體可以參考: CONFIGURING MONITOR/OSD INTERACTION

數(shù)據(jù)一致性檢查

ceph 會定期去檢查指定冗余副本數(shù)的數(shù)據(jù)是否一致缩搅。分兩種情況檢查:

scrub

比較輕量級的檢查,主要檢查元數(shù)據(jù)(metadata )信息触幼,比如文件名硼瓣、object屬性、大小等置谦,如果不一樣堂鲤,就會從主 pg 復制一份過去亿傅。一般每天都會檢查。

deeper scrubbing

深度一致性檢查瘟栖,主要對比數(shù)據(jù)內(nèi)容葵擎。數(shù)據(jù)量比較大的時候,這個檢查相對來說比較耗費資源慢宗。一般每周檢查坪蚁。


參考鏈接

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市镜沽,隨后出現(xiàn)的幾起案子敏晤,更是在濱河造成了極大的恐慌,老刑警劉巖缅茉,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嘴脾,死亡現(xiàn)場離奇詭異,居然都是意外死亡蔬墩,警方通過查閱死者的電腦和手機译打,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拇颅,“玉大人奏司,你說我怎么就攤上這事≌敛澹” “怎么了韵洋?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長黄锤。 經(jīng)常有香客問我搪缨,道長,這世上最難降的妖魔是什么鸵熟? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任副编,我火速辦了婚禮,結果婚禮上流强,老公的妹妹穿的比我還像新娘痹届。我一直安慰自己,他們只是感情好打月,可當我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布短纵。 她就那樣靜靜地躺著,像睡著了一般僵控。 火紅的嫁衣襯著肌膚如雪香到。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音悠就,去河邊找鬼千绪。 笑死,一個胖子當著我的面吹牛梗脾,可吹牛的內(nèi)容都是我干的荸型。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼炸茧,長吁一口氣:“原來是場噩夢啊……” “哼瑞妇!你這毒婦竟也來了?” 一聲冷哼從身側響起梭冠,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤辕狰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后控漠,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蔓倍,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年盐捷,在試婚紗的時候發(fā)現(xiàn)自己被綠了偶翅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡碉渡,死狀恐怖聚谁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滞诺,我是刑警寧澤形导,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站铭段,受9級特大地震影響骤宣,放射性物質(zhì)發(fā)生泄漏秦爆。R本人自食惡果不足惜序愚,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望等限。 院中可真熱鬧爸吮,春花似錦、人聲如沸望门。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筹误。三九已至桐早,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背哄酝。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工友存, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陶衅。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓屡立,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搀军。 傳聞我的和親對象是個殘疾皇子膨俐,可洞房花燭夜當晚...
    茶點故事閱讀 44,601評論 2 353

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

  • 作者:李航 來源:騰訊云社區(qū) 原文:https://cloud.tencent.com/developer/new...
    蒼山雪麓閱讀 451評論 0 2
  • 概要 本文主要介紹Ceph存儲,從架構簡介使用場景罩句,以及內(nèi)部IO流程焚刺、心跳機制、通信框架的止、CRUSH算法檩坚、QOS等...
    木零行閱讀 1,780評論 0 2
  • 1. Ceph架構簡介及使用場景介紹 1.1 Ceph簡介 Ceph是一個統(tǒng)一的分布式存儲系統(tǒng),設計初衷是提供較好...
    lihanglucien閱讀 82,663評論 6 92
  • 一诅福、Ceph簡介: Ceph是一種為優(yōu)秀的性能匾委、可靠性和可擴展性而設計的統(tǒng)一的、分布式文件系統(tǒng)氓润。ceph 的統(tǒng)一體...
    WickJohn閱讀 2,053評論 0 9
  • 應該是在四月份的時候赂乐,偶然看到這篇分析淺談分布式存儲系統(tǒng)數(shù)據(jù)分布方法,雖然在幾年前就知道一致性hash的原理及應用...
    fooboo閱讀 4,382評論 0 1