ceph,rbd分析_第1页
ceph,rbd分析_第2页
ceph,rbd分析_第3页
ceph,rbd分析_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ceph,rbd分析 ceph rbd 分析 张建伟 一、 rbd 之于 ceph rados: 代表 ceph 存储集群。 librados: 在 rados 之上,提供 key/value 存取接口。 radosgw: 基于 librados 提供 s3/swift 接口。 rbd: 基于 librados 提供块儿设备接口。 cephfs: 基于 librados 提供分布式文件系统接口。 二、 rbd 的功能 1、镜像(image)相关操作。 2、block(对应于 ceph 集群的 object)的存取。 block 存取较简单直观,下面主要介绍 image 相关操作实现。 三、 i

2、mage 的创建 创建 image 就是,就是向 rados 中写入一些 key/value 对,记录 image 的元数据。例如以下命令创建 image :rbd create foo -size 10240 -order 22 -pool rbd 则记录的元信息如下: key(oid) value 备注 rbd_id.foo 1d3e74b0dc51 记录 image name 到 image id 的映射 image id 是用 rand()函数,按一定规则生成 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 的双向映射关系 四、 image 的更新 image 的更新就比较简单了,就是更新如上的元数据。 比如 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 对应文件名的命名规则: 每个 object 的文件名格式为: objectname_key_head(snap_num)_hash_namespace_poolid

5、 Ø objectname:对象名 Ø key、namespace:都是客户端指定,做名称空间细分用。当块儿设备使用时,一般都置为空 Ø head(snap_num):snapshot 版本,如果是 head,则代表可写的 head 版本,如果是数字,则代表 snapshot 的序号 Ø hash:由 objectname 计算得到,u_int32_t 类型,这里转换为 16 进制字符打印,如 3af0b980 Ø poolid:pool 的 id 对于 rbd 操作,objectname 的生成规则大致为:用读写块儿设备的偏移除以 block

6、 size 得到 64 位表示的 block 序号,转换为 16 进制字符表示,再用 object_prefix作为前缀,即组成了 objectname。举例: 假设偏移为13m,13m/4m + 1 = 4,用64位16进制字符表示为0000000000000004,则 objectname 为 rbd_data. 1d3e74b0dc51. 0000000000000004 带 snapshot 的 image 的写流程如下: image写请求如果有,带snap序号seq1seq1head oid 的seq默认head oid的seq为0将head版本,clone一份到snap版本seq1

7、seq号由librbd查询image的元数据得到正常写head更新head oid的seq号更新为seq1正常写head例如将:rbd_data.1d3e74b0dc51.00000000000013e0_head_1604f591_2复制到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 状态,使其无法被删除。因为 clone 是 cow机制实现,snapshot 删除后 clone 的 image 会受到影响。 clone 得到的 foo.clone1 的元信息如下: key(oid) value 备注 rbd_id.foo.clone1 1d563d1b58ba 记录 image name 到 image id 的映射 image id 是用 rand()函数,按一定规则生成 rbd_header. 74b0dc51 size : 10240 order : 22 object_prefix: rbd_data. 1d56

9、3d1b58ba parent: rbd/foofoo.snap1 snap_seq: 0 记录元信息 还会另外记录父子关系: 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 对应的 oid,到

10、本 image 2、正常写 读流程如下: 1、读本 image,如果读到就返回,读不到走第 2 部 2、读 parent 七、 image 的 的 rollback rbd -image foo snap rollback -snap foo.snap1 rollback 操作,会遍历 image 中的每个 object,如果此 object 只有 head 版本,不做任何操作,否则对其执行如下操作: 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. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论