Ceph原理分析之RBD

Ceph官方文档告诉我们Ceph本质上也是对象存储。而且了解到,Ceph的块存储其实在客户端也会被分为若干个对象进行处理。也即,对于Ceph集群,存储数据的格式就行对象。如图5.11所示,从镜像(块存储的呈现形式)的信息可以看出,块存储的组成及属性。

ceph-rbd-1

图1 镜像属性

创建存储池的镜像之后,在存储池中会有相关的对象数据。其中两个对象与该镜像相关。如图5.12所示为包含两个对象的存储池,查看该存储池包含三个对象(格式2的镜像与此不同)。

ceph-rbd-2

图5.12 存储池对象列表

其中,rbd_directory对象为镜像文件夹对象,包含该存储池包含的对象名称列表(参考图5.16)。而imagename.rbd对象为与镜像名称对应的对象,里面包含对象的属性信息。如图5.13是从对象img_test.rbd导出的数据。对比图5.11和5.13可以看出两者的对应关系,这里不再赘述。

ceph-rbd-3

图5.13 镜像元数据信息

在《条带》相关章节提及了关于块存储的三个参数orderstripe_unitstripe_count。三者确定的数据的写入与排布方式。默认情况order是22,也即对象大小为4MB,strip_unit大小与对象大小一致,strip_count为1。因此,对于顺序写数据的操作,每写入4MB的数据,都会有一个对象来存储数据。以此类推。

于是,本文进行实际测试,将镜像img_test挂载,并向其中顺序写入4MB的数据,可以看到在存储池zsn_2下面多了一个对象。

ceph-rbd-4

图5.14 镜像元数据信息

再次写入数据,并且将写入数据的位置定位在偏移为40MB的位置。写完数据之后,查看存储池对象列表多了一个对象,并且对象名称的后两位是0a,也即十进制的10。

ceph-rbd-5

图5.15 镜像元数据信息

ceph-rbd-6

图5.16 镜像列表信息

综上所述,可以得到如下结论:

1) 块设备在Ceph集群中的最终存储形式是对象,对象名称与LBA关联。

2) 块设备的元数据比较简单,存储在存储池中的一个对象中,其内容包括对象名称前缀、order、stripe_unit和stripe_count等,通过这些参数,已经写入数据的LBA,可以很容易的计算出对象名称及偏移。

3) 默认配置下(格式1)的镜像无法实现OSD的负载均衡,需要使用格式2的镜像。

如果引用本站的原创文章,请注明原文链接:,本站保留追究责任的权利!

发表评论