ceph,rbd分析_第1頁
ceph,rbd分析_第2頁
ceph,rbd分析_第3頁
ceph,rbd分析_第4頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、ceph,rbd分析 ceph rbd 分析 張建偉 一、 rbd 之于 ceph rados: 代表 ceph 存儲集群。 librados: 在 rados 之上,提供 key/value 存取接口。 radosgw: 基于 librados 提供 s3/swift 接口。 rbd: 基于 librados 提供塊兒設(shè)備接口。 cephfs: 基于 librados 提供分布式文件系統(tǒng)接口。 二、 rbd 的功能 1、鏡像(image)相關(guān)操作。 2、block(對應(yīng)于 ceph 集群的 object)的存取。 block 存取較簡單直觀,下面主要介紹 image 相關(guān)操作實現(xiàn)。 三、 i

2、mage 的創(chuàng)建 創(chuàng)建 image 就是,就是向 rados 中寫入一些 key/value 對,記錄 image 的元數(shù)據(jù)。例如以下命令創(chuàng)建 image :rbd create foo -size 10240 -order 22 -pool rbd 則記錄的元信息如下: key(oid) value 備注 rbd_id.foo 1d3e74b0dc51 記錄 image name 到 image id 的映射 image id 是用 rand()函數(shù),按一定規(guī)則生成 rbd_header. 1d3e74b0dc51 size : 10240 order : 22 object_prefix:

3、 rbd_data. 1d3e74b0dc51 snap_seq: 0 記錄元信息 order 是用來計算 block size,如order 為 22,block size 為 122 = 4m rbd_directory name_foo: id_1d3e74b0dc51 id_1d3e74b0dc51: name_foo rbd_directory 中 記 錄 了 所 有image 的 name 和 id 的雙向映射關(guān)系 四、 image 的更新 image 的更新就比較簡單了,就是更新如上的元數(shù)據(jù)。 比如 resize 操作,就是修改 rbd_header. 1d3e74b0dc51

4、的 size 屬性。 五、 image 的 的 snapshot rbd snap create -snap foo.snap1 -image foo 元信息修改情況如下: key(oid) value 備注 rbd_header. 1d3e74b0dc51 snap_seq: 1 snapshot_0000000000000001: foo.snap1 修改 snap_seq 編號 添加 snapshot 信息 先回顧下 oid 對應(yīng)文件名的命名規(guī)則: 每個 object 的文件名格式為: objectname_key_head(snap_num)_hash_namespace_poolid

5、 Ø objectname:對象名 Ø key、namespace:都是客戶端指定,做名稱空間細(xì)分用。當(dāng)塊兒設(shè)備使用時,一般都置為空 Ø head(snap_num):snapshot 版本,如果是 head,則代表可寫的 head 版本,如果是數(shù)字,則代表 snapshot 的序號 Ø hash:由 objectname 計算得到,u_int32_t 類型,這里轉(zhuǎn)換為 16 進(jìn)制字符打印,如 3af0b980 Ø poolid:pool 的 id 對于 rbd 操作,objectname 的生成規(guī)則大致為:用讀寫塊兒設(shè)備的偏移除以 block

6、 size 得到 64 位表示的 block 序號,轉(zhuǎn)換為 16 進(jìn)制字符表示,再用 object_prefix作為前綴,即組成了 objectname。舉例: 假設(shè)偏移為13m,13m/4m + 1 = 4,用64位16進(jìn)制字符表示為0000000000000004,則 objectname 為 rbd_data. 1d3e74b0dc51. 0000000000000004 帶 snapshot 的 image 的寫流程如下: image寫請求如果有,帶snap序號seq1seq1head oid 的seq默認(rèn)head oid的seq為0將head版本,clone一份到snap版本seq1

7、seq號由librbd查詢image的元數(shù)據(jù)得到正常寫head更新head oid的seq號更新為seq1正常寫head例如將:rbd_data.1d3e74b0dc51.00000000000013e0_head_1604f591_2復(fù)制到rbd_data.1d3e74b0dc51.00000000000013e0_1_1604f591_2yn 六、 image 的 的 clone rbd snap protect -snap foo.snap1 -image foo rbd clone -snap foo.snap1 -dest foo.clone1 -image foo protect

8、命令是讓 foo.snap1 處于 proctet 狀態(tài),使其無法被刪除。因為 clone 是 cow機(jī)制實現(xiàn),snapshot 刪除后 clone 的 image 會受到影響。 clone 得到的 foo.clone1 的元信息如下: key(oid) value 備注 rbd_id.foo.clone1 1d563d1b58ba 記錄 image name 到 image id 的映射 image id 是用 rand()函數(shù),按一定規(guī)則生成 rbd_header. 74b0dc51 size : 10240 order : 22 object_prefix: rbd_data. 1d56

9、3d1b58ba parent: rbd/foofoo.snap1 snap_seq: 0 記錄元信息 還會另外記錄父子關(guān)系: key(oid) value 備注 rbd_children 1d3e74b0dc51_0000000000000001: 1d563d1b58ba 1d3e74b0dc51 是 parent,即 foo 的 image id ;0000000000000001 代 表snap 版本 1d563d1b58ba 是 child,即foo.clone1 的 imageid clone 得到的 image, 寫流程如下: 1、先 clone parent 對應(yīng)的 oid,到

10、本 image 2、正常寫 讀流程如下: 1、讀本 image,如果讀到就返回,讀不到走第 2 部 2、讀 parent 七、 image 的 的 rollback rbd -image foo snap rollback -snap foo.snap1 rollback 操作,會遍歷 image 中的每個 object,如果此 object 只有 head 版本,不做任何操作,否則對其執(zhí)行如下操作: 1、delete head 2、將指定的 snap 版本 clone 到 head 因為要遍歷所有 object,所以 clone 的效率是很低的。 八、 image 的 的 import/export export rbd export instance-0000008f_disk ./instance-0000008f_disk.export 遍歷所

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論