Ceph RBD:创建image + image元数据详解

引言

在Ceph RBD中,image是一个对外提供的逻辑概念,image由数据和元数据组成,数据和原数据都存储在底层RADOS对象中。因此,image的操作就可以分为:

  • 数据操作:IO流程
  • 元数据操作:配置流程
    对于创建image这种配置流程来说,主要就是操作元数据。

Image关键元数据

我们从实践出发,看一下image有哪些元数据。

创建卷

通过RBD命令创建一个image。

rbd create blockpool/vol_2 --size 100M

查看rados对象。

[root@VM-16-10-centos data]# rados -p blockpool ls
rbd_directory
rbd_id.vol_2
rbd_info
rbd_object_map.2488ba1d0ed49
rbd_header.2488ba1d0ed49

如何找到卷:rbd_directory

rbd_directory中存储了卷信息,卷的名字为vol_2,卷的id为2488ba1d0ed49,结合上面命令,可以找到rbd_id.vol_2rbd_header.2488ba1d0ed49rbd_object_map.2488ba1d0ed49相关对象。

[root@VM-16-10-centos data]# rados -p blockpool listomapvals rbd_directory
id_2488ba1d0ed49
value (9 bytes) :
00000000  05 00 00 00 76 6f 6c 5f  32                       |....vol_2|
00000009

name_vol_2
value (17 bytes) :
00000000  0d 00 00 00 32 34 38 38  62 61 31 64 30 65 64 34  |....2488ba1d0ed4|
00000010  39                                                |9|
00000011

卷都有什么属性:rbd_header.{rbd_id}

在rbd_header对象中我们可以看到image的相关属性。

[root@VM-16-10-centos data]# rados -p blockpool listomapvals rbd_header.2488ba1d0ed49
access_timestamp
value (8 bytes) :
00000000  49 96 56 62 1d d5 31 10                           |I.Vb..1.|
00000008

create_timestamp
value (8 bytes) :
00000000  49 96 56 62 1d d5 31 10                           |I.Vb..1.|
00000008

features
value (8 bytes) :
00000000  3d 00 00 00 00 00 00 00                           |=.......|
00000008

modify_timestamp
value (8 bytes) :
00000000  49 96 56 62 1d d5 31 10                           |I.Vb..1.|
00000008

object_prefix
value (26 bytes) :
00000000  16 00 00 00 72 62 64 5f  64 61 74 61 2e 32 34 38  |....rbd_data.248|
00000010  38 62 61 31 64 30 65 64  34 39                    |8ba1d0ed49|
0000001a

order
value (1 bytes) :
00000000  16                                                |.|
00000001

size
value (8 bytes) :
00000000  00 00 40 06 00 00 00 00                           |..@.....|
00000008

snap_seq
value (8 bytes) :
00000000  00 00 00 00 00 00 00 00                           |........|
00000008

卷的数据在那里:rbd_data.{rbd_id}.{offset_idx}

数据的rados对象是在写的时候生成的,我们写入8M的数据。再次查看RADOS对象。可以看到多了两个rbd_data.<rbd_id>.<offset_idx>对象。由于header中order为0x16,因此rados对象大小为1<<0x16=4M,因此每个数据对象表示4M的范围。order值为配置文件中rbd_default_order配置项。

[root@VM-16-10-centos data]# rados -p blockpool ls
rbd_directory
rbd_id.vol_2
rbd_data.2488ba1d0ed49.0000000000000001
rbd_info
rbd_object_map.2488ba1d0ed49
rbd_header.2488ba1d0ed49
rbd_data.2488ba1d0ed49.0000000000000000

元数据汇总

RADOS对象记录类型描述
rbd_id.<name>rbd_iddata记录image名称到image id的单向映射关系
rbd_header.<id>data_pool_idomap指定将数据对象存储在与元数据对象不同的存储池
rbd_header.<id>featuresdata已启用的功能特性
rbd_header.<id>object_prefixomap数据对象名称前缀
rbd_header.<id>orderomap组成image的数据对象容量大小,以2为底的指数
rbd_header.<id>parentomap当存在克隆关系时,克隆image记录的关联的父image快照信息
rbd_header.<id>sizeomap容量大小
rbd_header.<id>snap_seqomap最近一次创建的快照的快照id
rbd_header.<id>snapshot_<snap_id>omapid为snap_id的快照的基本信息
rbd_header.<id>stripe_countomap条带宽度,数据对象间进行条带化的参数
rbd_header.<id>strip_unitomap条带大小,数据对象间进行条带化的参数
rbd_header.<id>lock.rbd_lockomap控制image互斥访问的锁信息
rbd_object_map.<id>rbd_object_mapdata记录组成image的所有数据对象的存在状态
RADOS对象记录类型描述
rbd_directoryname_<name>omap记录image名称所对应的image id
rbd_directoryid_<id>omap记录image id所对应的image名称

创建卷流程

创建卷就是将原数据写入相应rados对象的过程,参考Ceph原代码注释即可。

  /**
   * @verbatim
   *
   *                                  <start> . . . . > . . . . .
   *                                     |                      .
   *                                     v                      .
   *                               VALIDATE DATA POOL           v (pool validation
   *                                     |                      .  disabled)
   *                                     v                      .
   * (error: bottom up)         ADD IMAGE TO DIRECTORY  < . . . .
   *  _______<_______                    |
   * |               |                   v
   * |               |            CREATE ID OBJECT
   * |               |               /   |
   * |      REMOVE FROM DIR <-------/    v
   * |               |           NEGOTIATE FEATURES (when using default features)
   * |               |                   |
   * |               |                   v         (stripingv2 disabled)
   * |               |              CREATE IMAGE. . . . > . . . .
   * v               |               /   |                      .
   * |      REMOVE ID OBJ <---------/    v                      .
   * |               |          SET STRIPE UNIT COUNT           .
   * |               |               /   |  \ . . . . . > . . . .
   * |      REMOVE HEADER OBJ<------/    v                     /. (object-map
   * |               |\           OBJECT MAP RESIZE . . < . . * v  disabled)
   * |               | \              /  |  \ . . . . . > . . . .
   * |               |  *<-----------/   v                     /. (journaling
   * |               |             FETCH MIRROR MODE. . < . . * v  disabled)
   * |               |                /   |                     .
   * |     REMOVE OBJECT MAP<--------/    v                     .
   * |               |\             JOURNAL CREATE              .
   * |               | \               /  |                     .
   * v               |  *<------------/   v                     .
   * |               |           MIRROR IMAGE ENABLE            .
   * |               |                /   |                     .
   * |        JOURNAL REMOVE*<-------/    |                     .
   * |                                    v                     .
   * |_____________>___________________<finish> . . . . < . . . .
   *
   * @endverbatim
   */
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值