Ceph RGW:数据存储和寻址
1、元数据
元数据信息包括:用户、桶和桶实例。其中:
用户:主要指对象存储的用户信息。
Bucket:主要维护bucket名称和bucket实例id的映射信息。
Bucket.instance:维护Bucket实例信息。
查看用户的元数据,如下所示:
radosgw-管理元数据列表用户:
radosgw-admin元数据获取用户:testid:
radosgw-管理元数据列表桶:
radosgw-管理元数据获取存储桶:第一个:
radosgw-管理元数据列表bucket.instance:
radosgw-admin元数据获取bucket . instance:first:{ bucket _ id }
2、桶指数
桶索引主要维护一个桶中某个对象的索引信息。一个bucket对应于一个或多个radosobjects(在bucket shards下)。它维护一个key-val的映射结构,映射存储在object的omap(rocksdb)中。Key对应的rgw对象和Val是一些关于rgw对象的元数据信息,在检索存储在bucket中的对象时需要用到。Omap还包含一个头,它存储bucket帐户信息,比如bucket中对象的数量、总大小等等。
3、数据
rgw对象的内容存储在一个或多个radosobjects中。Rados对象分为头部和尾部。标头最多可以容纳512KB的数据。如果rgw对象的大小小于512KB,那么只有头。否则,剩余的数据将被条带化,并根据集群radosobject的大小划分为多个rados对象。
使用命名空间隔离池中的多个存储空间:Pool: {zone}.rgw.meta:
对于池:{zone}.rgw.log还包含多个命名空间:
当在对象存储中检索一个对象时,它将包含三个元素:user、bucket、object。用户主要由RGW用来获取认证ACL用户id的;Bucket和obejct用于确定对象在池中的位置。
用户
用户数据存储在{zone}.rgw.meta:users.uid中,如下所示:
包含两部分:ups3:用户自身信息;Ups3.buckets:用户所属的存储桶。
Ups3:用户基本信息,ACL/Bucekt额度/用户额度等。对应于rgw_common.h中定义的结构RGWUserInfo
Ups3。buckets:bucket,用户所属的键值结构,存储在omap结构中;对应的struct cls_user_bucket_entry在rgw_common.h中定义,数据操作如下:
通过{uid}找出用户拥有哪些存储桶。桶,这些桶有以下基本数据。
水桶
存储桶信息存在于{zone}.rgw.meta:root中,如下所示:
第一:记录bucket和bucket_instance_id的对应关系,对应的数据结构:struct RGWBucketEntryPoint。
. bucket . meta . first:1 C60 b 268-0a5d-4718-ad02-E4 b5 BCE 824 BF . 44166.4:bucket实例;寻址方式:。对应的结构:struct RGWBucketInfo。
Bucket ACL和IAM策略存储在Bucket实例对象的attr中。如下所示:
按如下方式获取存储桶ACL和IAM策略数据:
目标
桶索引:桶中包含的对象信息存储在一个或多个对象的omap中。这个omap是一个键值结构,键是对象的名字,值对应struct rgw _ bucket _ dir _ entry:cls _ rgw _ types . h。
存储桶索引对象:
如下所示:
在这个桶下,有一个对象:ntp.conf:
检索值:
Omap头记录了以下统计信息:
对象存储对象的数据存储在池中:{zone}。rgw.buckets.data .对象的组成和寻址可以分为以下两类:
一个RGW对象可以由一个或多个radosobjects组成。第一个对象是这个RGW的head对象,主要包含一些元数据信息,比如manifest、ACLs、contenttype、etag、自定义元数据等。这些元数据存储在这个head对象的xattr中。清单描述了这个rgw对象的分发。同时,这个head对象最多可以容纳额外的4MB数据。如果RGW对象的大小小于4MB,那么这个RGW对象不会被碎片化,只有这个头对象。
按如下方式搜索:
目前bucket下有一个ntp.conf,< 4MB .检索其清单:
如上:
Max_head_size:表示头部对象的最大尺寸;
Head_size:表示当前头部对象的大小;
前缀:用于在rados中寻址分区对象。
RGW对象ACL:
上传一个大于4MB的RGW对象,检索其清单信息:
清单信息:
根据清单检索对象:
对于一个大的RGW对象,它会被切割成几个独立的RGW Object并上传,这就是所谓的multipart。多路径的优点是断点续传。s3接口默认切割大小为15MB。
这里上传一个60MB的对象。
分四部分上传,查看rados对象:
包含三种对象,头部,多部分和阴影。
多部分下的清单:
所有对象检索都是基于上述清单信息来构建对象索引的:
在上面的信息中,这个RGW对象的大小是48128000字节,分为四段,三段15MB,最后一段是920KB。同时,rados集群中存储的每个段的条带大小为4MB。因此,15MB段也分为四个radosobjects、一个多部分头和三个阴影段。一个920KB的数据段只有一个多部分报头。
. rgw.root:
它包含区域、区域组和领域等信息。