9.10. Ceph 对象网关数据布局
虽然 RADOS 仅了解具有其扩展属性(xattrs
)和对象映射(OMAP)的池和对象,但概念上 Ceph 对象网关将其数据组织为三种不同的类型:
- 元数据
- bucket 索引
- data
元数据
元数据有三个部分:
-
用户
:保存用户信息。 -
bucket
:包含存储桶名称和 bucket 实例 ID 之间的映射。 -
bucket.instance
:保存存储桶实例信息。
您可以使用以下命令查看元数据条目:
语法
radosgw-admin metadata get bucket:BUCKET_NAME radosgw-admin metadata get bucket.instance:BUCKET:BUCKET_ID radosgw-admin metadata get user:USER radosgw-admin metadata set user:USER
示例
[ceph: root@host01 /]# radosgw-admin metadata list [ceph: root@host01 /]# radosgw-admin metadata list bucket [ceph: root@host01 /]# radosgw-admin metadata list bucket.instance [ceph: root@host01 /]# radosgw-admin metadata list user
每个元数据条目都保留在单个 RADOS 对象上。
Ceph 对象网关对象可能由多个 RADOS 对象组成,第一个是包含元数据的头,如清单、访问控制列表(ACL)、内容类型、ETag 和用户定义的元数据。元数据存储在 xattrs
中。头还可能包含最多 512 KB 的对象数据,以提高效率和原子性。清单描述各个对象在 RADOS 对象中布局的方式。
bucket 索引
它是不同类型的元数据,并单独保存。bucket 索引在 RADOS 对象中包含键值映射。默认情况下,每个 bucket 是一个 RADOS 对象,但可以在多个 RADOS 对象上对映射进行分片。
映射本身保存在与每个 RADOS 对象关联的 OMAP 中。每个 OMAP 的键是对象的名称,值包含该对象的一些基本元数据,在列出存储桶时显示的元数据。每个 OMAP 均包含一个标头,并在该标头中保留一些存储桶核算元数据,如对象数量、总大小等。
在使用 radosgw-admin
工具时,请确保工具和 Ceph 集群具有相同的版本。不支持使用不匹配的版本。
OMAP 是一个键值存储,与对象关联,类似于与 POSIX 文件关联的扩展属性。对象的 OMAP 不物理位于对象的存储中,但其精确实施对 Ceph 对象网关不可见且不可更改。
data
对象数据保存在每个 Ceph 对象网关对象的一个或多个 RADOS 对象中。
9.10.1. 对象查找路径
在访问对象时,REST API 附带三个参数的 Ceph 对象网关:
- 帐户信息,在 Swift 中有 S3 或帐户名称中的访问密钥
- 存储桶或容器名称
- 对象名称或密钥
目前,Ceph 对象网关仅使用帐户信息来查找用户 ID 和 访问控制。它仅使用 bucket 名称和对象键来寻址池中的对象。
帐户信息
Ceph 对象网关中的用户 ID 是一个字符串,通常是来自用户凭证的实际用户名,而不是散列或映射的标识符。
在访问用户数据时,用户记录将从带有 users.uid
命名空间的 default.rgw.meta
池中的对象 USER_ID
加载。.Bucket 名称 They 在带有 root
命名空间的 default.rgw.meta
池中表示。加载存储桶记录,以获取一个标记,它充当存储桶 ID。
对象名称
对象位于 default.rgw.buckets.data
池中。对象名称是 MARKER_KEY
,如 default.7593.4_image.png
,其中标记为 default.7593.4
,键是 image.png
。这些串联的名称不会被解析,并且仅传递到 RADOS。因此,选择分隔符并不重要,不会造成不确定。因此,对象名称中允许斜杠,如键。
9.10.1.1. 多个数据池
可以创建多个数据池,使得不同用户的 bucket 默认在不同的 RADOS 池中创建,从而提供必要的扩展。这些池的布局和命名由策略
设置控制。
9.10.2. 存储桶和对象列表
属于给定用户的 bucket 在名为 USER_ID.buckets
的对象的 OMAP 中列出,例如 foo.buckets
,位于带有 users.uid
命名空间的 default.rgw.meta
池中。在列出存储桶时,在更新存储桶时访问这些对象,并更新和检索存储桶统计信息,如配额。这些列表与 .rgw
池中的 bucket 保持一致。
有关这些 OMAP 条目的值,请参阅用户可见的、编码的类 cls_user
_bucket 及其嵌套类 cls_user_bucket
。
属于给定存储桶的对象列在存储桶索引中。索引对象的默认命名在 default.rgw.buckets.index
池中是 .dir.MARKER
。
其它资源
- 如需了解更多详细信息,请参阅 Red Hat Ceph Storage 对象网关指南中的 配置存储桶索引重新划分 部分。
9.10.3. 对象网关数据布局参数
这是 Ceph 对象网关的数据布局参数列表。
已知的池:
.rgw.root
- 每个对象未指定的区域、区域和全局信息记录。
ZONE.rgw.control
- notify.N
ZONE.rgw.meta
具有不同元数据的多个命名空间
- Namespace: root
BUCKET .bucket.meta.BUCKET:MARKER # see put_bucket_instance_info ()
租户用于忽略存储桶,但不用于 bucket 实例。
示例
.bucket.meta.prodtx:test%25star:default.84099.6 .bucket.meta.testcont:default.4126.1 .bucket.meta.prodtx:testcont:default.84099.4 prodtx/testcont prodtx/test%25star testcont
- namespace: users.uid
在
USER
对象中包括每个用户信息 (RGWUserInfo),以及USER.buckets
对象的 omaps 中的每个用户的存储桶列表。如果非空,USER
可能会包含租户。示例
prodtx$prodt test2.buckets prodtx$prodt.buckets test2
- namespace: users.email
- Unimportant
- namespace: users.keys
47UA98JSTJZ9YAN3OS3O
这允许 Ceph 对象网关在身份验证过程中按其访问密钥查找用户。
- namespace: users.swift
- test:tester
ZONE.rgw.buckets.index
-
对象名为
.dir.MARKER
,每个对象都包含存储桶索引。如果索引被分片,每个分片会在标记后附加分片索引。 ZONE.rgw.buckets.data
default.7593.4__shadow_.488urDFerTYXavx4yAd-Op8mxehnvTI_1 MARKER_KEY
一个标记示例为
default.16004.1
或default.7593.4
。当前格式为ZONE.INSTANCE_ID.BUCKET_ID
,但生成后,不会再次解析标记,因此其格式可能会在以后自由更改。
其它资源
- 如需了解更多详细信息,请参阅 Red Hat Ceph Storage 对象网关指南中的 Ceph 对象网关数据布局 。