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

本来不想再写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。

对官方资料的一些补充:

存储池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信息。

19c735f5d12cc2730ce970843054437e.png

2)user1对象本身包含了用户的基本信息,基本上与用户相关的描述信息都包含在里面,只有一个扩展属性,没有omap属性。

2cb3c71ea569aa33beee5e7fb1dd84ad.png

3)user1.buckets本身不包含信息,信息包含在omap属性中,没有扩展属性;用户在list bucket的时候会用到这个信息。

a27b4b3438bc9d2005458f6ce0193228.png

users.keys命名空间

1)包含了key到uid映射信息,可以通过access key找到uid。

e13764d7af7a60e0330fa177b0ba5288.png

由于没有设置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两个对象

77fed761950f58e17ed56b2aa9569d2b.png

2)bucket1对象本身包含了用户的基本信息,基本上与用户相关的描述信息都包含在里面,只有一个扩展属性,没有omap属性。

6ab9b6ad52e5c1c68996a07b379728d2.png

3).bucket.meta.bucket1:475c3d39-2f37-4ffd-ab72-fecc7272339c.34580.1对象的扩展属性中包含acl,policy等信息,对象本身包含bucket的动态信息。

a53ee6ed2f6dddf0644cfaf0f161feae.png

1a18f50d2e5502ad8f4c88e2ef3efd7f.png

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列表。

77e402af90435f7d597c165f69540f56.png

2)omap value: 某个object的信息,对应结构rgw_bucket_dir_entry。

d258555a26d72ba18cd8fa109d4bc806.png

3)omap header: 当前bucket index对象下的统计信息,对象数,总大小等。对应结构rgw_bucket_dir_header。

b_0_202007141136318950.jpg

通过本文,我们基本上弄清楚了user,bucket(instance),bucket index的数据结构及其存储方式,下篇介绍Ceph 中Object的组织方式。

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

希望与广大网友互动??

点此进行留言吧!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ceph RGW(Rados Gateway)是Ceph存储系统提供对象存储服务的组件。它允许用户通过HTTP协议以对象的形式存储和检索数据。 Ceph RGW是一个分布式的、高可用的存储解决方案,它将数据分散保存在多个物理节点上,提供了可靠的数据冗余和容错能力。通过数据的分散,RGW能够实现高并发的访问和高吞吐量的数据传输,从而满足大规模的存储需求。 在Ceph RGW,数据以对象的形式存储,每个对象都有一个唯一的标识符和元数据信息,可以通过它们进行快速的检索和访问。对象可以以任意格式存储,如文本、图片、视频等。通过提供RESTful风格的API,RGW使得开发者能够方便地访问和操作存储在其的对象。 RGW支持多租户的机制,可以为不同的用户或应用程序提供独立的存储空间和访问权限。它还提供了访问控制机制,可以通过身份验证、访问策略等方式,限制对象的访问权限,并保证数据的安全性。 另外,Ceph RGW还具有自动化的数据迁移和负载均衡功能,可以根据数据的访问模式和负载情况,自动调整数据的存储位置和副本数量,以实现最佳的性能和可用性。 综上所述,Ceph RGW是一款功能强大、可靠性高的对象存储服务,适用于大规模存储和分发数据的场景。它提供了高并发、高吞吐量的数据访问和传输能力,以及安全性、可扩展性等方面的优势,成为当今对象存储领域的一种重要解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值