首页 > 其他 > 详细

ceph rbd总结

时间:2016-02-24 20:52:01      阅读:1176      评论:0      收藏:0      [点我收藏+]

一、ceph架构:

技术分享

  rados:ceph存储集群。

  librados:在rados之上,提供key/value存取接口。

  radosgw:基于librados提供s3/swift接口。

  rbd:基于librados提供块设备接口。

  cephfs:基于内核提供分布式文件系统接口。

二、rbd的功能:

  1、镜像(image)的相关操作。

  2、Block(对应于ceph集群的object)的存取。block存取较简单直观,下面主要介绍image相关操作实现。

    a、image的创建:创建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: rbd_data. 1d3e74b0dc51

snap_seq: 0

记录元信息

Order是用来计算block size,如order为22,block size为1<<22 = 4M

rbd_directory

……

name_foo: id_1d3e74b0dc51

Id_1d3e74b0dc51: name_foo

rbd_directory中记录了所有image的name和id的双向映射关系

    b、image的扩容:

      Image的更新就比较简单了,就是更新如上的元数据。

      比如resize操作,就是修改rbd_header. 1d3e74b0dc51的size属性。

    c、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

    • objectname:对象名
    • key、namespace:都是客户端指定,做名称空间细分用。当块儿设备使用时,一般都置为空
    • head(snap_num):snapshot版本,如果是head,则代表可写的head版本,如果是数字,则代表snapshot的序号
    • hash:由objectname计算得到,u_int32_t类型,这里转换为16进制字符打印,如3AF0B980
    • poolid:pool的id

    对于rbd操作,objectname的生成规则大致为:用读写块设备的偏移除以block size得到64位表示的block序号,转换为16进制字符表示,再用object_prefix作为前缀,即组成了objectname。

    举例:

      假设偏移为13M,13M/4M + 1 = 4,用64位16进制字符表示为0000000000000004,则objectname为rbd_data. 1d3e74b0dc51. 0000000000000004

    带snapshot的image的写流程如下:

        

 

 

          

ceph rbd总结

原文:http://www.cnblogs.com/chris-cp/p/5213984.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!