從該圖我們可以看到從前端的業務檔案到資料儲存到儲存硬碟上的過程,步驟如下:
1. file->object對映
rados中需要配置object的大小,一般會設定為2m到4m的大小。當使用者寫入資料檔案時,首先會根據object的大小值將file進行切分。如果file的大小不足object的大小,則直接按照原大小對映到乙個object中;如果file的大小大於object大小,則file會被切分若干個完整大小的object和乙個不完整大小的object。
a. ino (file的元資料,file的唯一id)。
b. ono(file切分產生的某個object的序號,預設以4m切分乙個塊大小)。
c. oid(object id: ino + ono)。
2. object->pg對映
object是rados需要的物件。ceph指定乙個靜態hash函式計算oid的值,將oid對映成乙個近似均勻分布的偽隨機值,然後和mask按位相與,得到pgid。
a. hash(oid) & mask-> pgid 。
b. mask = pg總數m(m為2的整數冪)-1 。
3.pg->osd對映
pg(placement group),用途是對object的儲存進行組織和位置對映, (類似於redis cluster裡面的slot的概念) 乙個pg裡面會有很多object。採用crush演算法,將pgid代入其中,然後得到乙個osd set 。 在三副本replicated下,set中就會有三個osd,其中第乙個就是primary osd,負責接收讀寫請求和維護一致性以及進行修復。後兩個是replicated osd。
a. crush(pgid)->(osd1,osd2,osd3)
4. 寫資料
client先將資料寫到primary osd上,然後再由primary osd寫到replicated osd上。具體流程如下:
(1) 通過第2步(pg->osd對映)確定primary osd,client找到primary osd,並將object寫入其上;
(2) 再由primary osd寫到osd set中的secondary osd 和 third osd上;
(3) secondary和third osd 接收到object,寫入後會給primary傳送乙個ack,確認已經寫入成功;
(4) 當primary osd在接收到另外兩個都已經寫入的確認後,向client傳送乙個ack,表示此object已經寫入完成。
此時乙個object的寫過程已經結束了。其中第1步是在client上進行即資料走的南北網路,第2步是在集群內部進行走的是東西網路,而3,4步是client與primary直接聯絡,減少了cluster中需要傳輸的資料總量。
糾刪碼讀寫
糾刪碼的原理在這裡不做詳細介紹了,假設k=3 m=2 k+m的糾刪碼,k指資料盤個數,m指校驗盤個數,使用編碼演算法,通過k個原始資料生成k+m個資料,及允許m個資料盤出現故障,資料仍然不會丟失。
同上面介紹的乙個object通過crush會將物件對映到不同的osd,例如3+2的糾刪碼,osd set為【osd1 osd2 osd 3 osd4 osd5】。糾刪碼編碼和解碼的運算過程是在primary osd上做的,client完全寫object到primary osd即osd1上。然後根據糾刪碼引數設定(k為資料塊,m為校驗塊),將object在primary osd上切分為k個chunk或者說是fragment。若原來的object不能被k整除,則會進行填充,以保證每個chunk的大小相同。每個chunk的obj_name都相同。
使用糾刪碼,object會被切分為k+m個chunk。第乙個chunk存放在primary osd上,剩餘的k+m個chunk,primary osd會依次放鬆到相應的osd上。
在讀取檔案的時候,primary osd會手機響應osd上的chunk,然後在primary上恢復(即解碼)原來的object,發給client。primary osd會優先收集資料塊進行拼接重建出原始object,編碼塊用於恢復出丟失的塊。
Ceph的正確玩法之Ceph糾刪碼理論與實踐
注意空格,有的命令少空格 一 糾刪碼原理 糾刪碼 erasure coding,ec 是一種編碼容錯技術,最早是在通訊行業解決部分資料在傳輸中的損耗問題。其基本原理就是把傳輸的訊號分段,加入一定的校驗再讓各段間發生相互關聯,即使在傳輸過程中丟失部分訊號,接收端仍然能通過演算法將完整的資訊計算出來。在...
糾刪碼簡介
背景 在資料儲存領域,hadoop採用三副本策略有效的解決了儲存的容錯問題,但是三副本策略中磁碟的利用效率比較低,僅有33 而且副本帶來的成本壓力實在太高,後來適時的出現了糾刪碼的概念。當冗餘級別為n m時,將這些資料塊分別存放在n m個硬碟上,這樣就能容忍m個 假設初始資料有n個 硬碟發生故障。當...
Ceph中糾刪碼的讀寫過程與快取分層
上圖大體可以表示從檔案到儲存在儲存實體上的過程,詳細步驟如下 1.rados中需要配置object size的值,也就是每個object大小的最大值,一般情況下會設定為2m到4m。當乙個file存進ceph中時,會根據object size將file進行切分。若file的大小不足object siz...