欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

荐 Ceph rgw中的元数据组织形式及存储结构分析

程序员文章站 2022-03-14 18:08:14
本来不想再写Ceph相关的文章了,最近在做ceph元数据优化研究及架构,整体思路是:将rados作为数据存储引擎,构建分布式元数据集群来管理元数据,如:将rgw或者fs相关的元数据从ceph的元数据池中抽取出来,转存到分布式元数据集群中,以此达到提升单集群处理能力的目的;要达到这个目的,有两个基础条件:1.对ceph中rgw或者fs的各CURD操作原理及IO路径非常熟悉,2.对ceph中元数据的组织及存储非常熟悉;然后才能在rgw或者mds的IO路径中进行数据及元数据的分离操作,并以合适的格式将元数据转存....

本来不想再写Ceph相关的文章了,最近在做ceph元数据优化研究及架构,整体思路是:将rados作为数据存储引擎,构建分布式元数据集群来管理元数据,如:将rgw或者fs相关的元数据从ceph的元数据池中抽取出来,转存到分布式元数据集群中,以此达到提升单集群处理能力的目的;要达到这个目的,有两个基础条件:1.对ceph中rgw或者fs的各CURD操作原理及IO路径非常熟悉,2.对ceph中元数据的组织及存储非常熟悉;然后才能在rgw或者mds的IO路径中进行数据及元数据的分离操作,并以合适的格式将元数据转存到分布式元数据集群中。

这篇文章将着重描述rgw中user,bucket,bucket instance以及bucket index等元数据的组织形式及数据结构,一些概念及说明请参考官方资料Rados Gateway Data Layout

对官方资料的一些补充:

  1. 存储池Pools:在新版本中,还有:
    1.1){zone}.rgw.log :用来存储gc,lc,reshard等的log信息
    1.2){zone}.rgw.otp:存储one-time password秘钥,开启MFA(Multi-Factor Authentication)是使用
    1.3){zone}.rgw.non-ec:这个存储池之前就有,用来存储multipart相关的中间结果

下文的操作在最新的Nautilus版本环境下进行

元数据分析

user元数据

通过下面的命令可以查看某个用户的元信息,包括:id,name,key,quota等信息:

radosgw-admin metadata user get user:{user}

在逻辑上,user信息存储在{zone}.rgw.meta池的users:*命名空间中,如下:
1)users.uid:存储用户id及其bucket信息
2)users.keys:存储用户的access key信息,通过它可以找到用户id
3)users.email:存储用户的email信息
4)users.swfit:存储swfit子用户信息

其中用户的基本信息(id,key,email,subuser等)包含在结构RGWUserInfo中,用户的bucket信息包含在结构cls_user_bucket_entry中,还有其他结构也包含在cls_user_types.h文件中,详情可以参考源码,物理上,这些信息都存储在存储池映射的OSD磁盘上;下面是一个示例:

users.uid命名空间

1)包含user1和user1.buckets两个对象, 其中user1包含用户的基本信息,user1.buckets包含用户的bucket信息。
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析
2)user1对象本身包含了用户的基本信息,基本上与用户相关的描述信息都包含在里面,只有一个扩展属性,没有omap属性。
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析
3)user1.buckets本身不包含信息,信息包含在omap属性中,没有扩展属性;用户在list bucket的时候会用到这个信息。
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析

users.keys命名空间

1)包含了key到uid映射信息,可以通过access key找到uid。
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析

由于没有设置email和swift用户,所以users.email和users.swift空间没有记录相应的信息。

通过radosgw-admin user命令获取的所有信息都来至于上述的命名空间,各个命令的工作过程在这里就不相信分析了(掌握各操作的IO路径也是实现元数据分布式集群很重要的一部分,留待后面分析吧

bucket元数据

通过下面的命令可以查看某个用户的元信息,包含:name,key,marker等信息:

radosgw-admin metadata bucket get bucket:{bucket}

在逻辑上,bucket信息存储在{zone}.rgw.meta池的root命名空间中,其中{bucket} 记录了bucket与instance_id的对应关系,记录是的静态信息,对应于结构RGWBucketEntryPoint,.bucket.meta.{tenent}:{bucket}:{marker} 记录bucket的寻址方式,记录的是动态信息,对应于结构RGWBucketInfo,bucket的ACL,Policy信息存放在xattr属性中,物理上,这些信息都存储在存储池映射的OSD磁盘上;下面是一个示例:
1)包含bucket1和.bucket.meta.bucket1:475c3d39-2f37-4ffd-ab72-fecc7272339c.34580.1两个对象
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析
2)bucket1对象本身包含了用户的基本信息,基本上与用户相关的描述信息都包含在里面,只有一个扩展属性,没有omap属性。
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析
3).bucket.meta.bucket1:475c3d39-2f37-4ffd-ab72-fecc7272339c.34580.1对象的扩展属性中包含acl,policy等信息,对象本身包含bucket的动态信息。
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析

Bucket Index

通过下面的命令可以枚举bucket下的对象信息:

radosgw-admin bucket list --bucket={bucket}

在逻辑上,bucket index信息存储在{zone}.rgw.buckets.index池中,bucket index用于维护bucket下的对象信息,存储在一个或者多个对象的omap中 - key为对象的名字,value为结构rgw_bucket_dir_entry 。bucket index对象的命名为:.dir.{bucket_id}.{shard_id}。下面是一个示例:
1)omap keys:bucket index对象中包含的object key列表。
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析
2)omap value: 某个object的信息,对应结构rgw_bucket_dir_entry
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析
3)omap header: 当前bucket index对象下的统计信息,对象数,总大小等。对应结构rgw_bucket_dir_header
荐
                                                        Ceph rgw中的元数据组织形式及存储结构分析
通过本文,我们基本上弄清楚了user,bucket(instance),bucket index的数据结构及其存储方式,下篇介绍Ceph 中Object的组织方式。

本文地址:https://blog.csdn.net/lzw06061139/article/details/107246059