8.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
Copy to Clipboard Toggle word wrap

示例

[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
Copy to Clipboard Toggle word wrap

每个元数据条目保存在单个 RADOS 对象上。

注意

Ceph 对象网关对象可能由多个 RADOS 对象组成,第一个是包含元数据的头头,如清单、访问控制列表(ACL)、内容类型、ETag 和用户定义的元数据。元数据存储在 xattrs 中。头也可能包含最多 512 KB 对象数据,以提高效率和原子性。清单描述了每个对象在 RADOS 对象中如何布局。

bucket 索引

它是不同的元数据,单独保存。bucket 索引包含 RADOS 对象中的键值映射。默认情况下,它是每个 bucket 的单一 RADOS 对象,但可以通过多个 RADOS 对象对 map 进行分片。

map 本身保存在与每个 RADOS 对象关联的 OMAP 中。每个 OMAP 的键是对象的名称,值包含该对象的一些基本元数据,即列出存储桶时显示的元数据。每个 OMAP 都包含一个标头,并在该标头中保留一些存储桶核算元数据,如对象数量、总大小,等等。

重要

使用 radosgw-admin 工具时,请确保工具和 Ceph 集群是相同的版本。支持使用不匹配的版本。

注意

OMAP 是一个键值存储,与对象关联,类似于与 POSIX 文件关联的扩展属性的方式。对象的 OMAP 不是物理上位于对象存储中,但其精确的实施不可见,对 Ceph 对象网关不大。

data

对象数据保存在一个或多个 RADOS 对象中,用于各个 Ceph 对象网关对象。

8.10.1. 对象查找路径

在访问对象时,REST API 附带三个参数到 Ceph 对象网关:

  • 帐户信息,其在 Swift 中的 S3 或帐户名称中包含访问密钥
  • 存储桶或容器名称
  • 对象名称或密钥

目前,Ceph 对象网关仅使用帐户信息来查找用户 ID 和 进行访问控制。它仅使用 bucket 名称和对象密钥来处理池中的对象。

帐户信息

Ceph 对象网关中的用户 ID 是一个字符串,通常是来自用户凭据的实际用户名,而不是哈希或映射的标识符。

在访问用户数据时,用户记录从 default.rgw.meta 池中的对象 USER_ID 加载,并带有 users.uid 命名空间。.Bucket 名称 They 在 default.rgw.meta 池中使用 root 命名空间表示。加载存储桶记录,以获取一个标记,它充当存储桶 ID。

对象名称

对象位于 default.rgw.buckets.data 池中。对象名称为 spokeER_KEY,如 default.7593.4_image.png,其中标记为 default.7593.4,键是 image.png。这些串联的名称不会被解析,仅传递到 RADOS。因此,选择分隔符并不重要,并导致不确定性。出于同样原因,在对象名称(如键)中允许斜杠。

8.10.1.1. 多个数据池

可以创建多个数据池,以便默认在不同的 RADOS 池中创建不同的用户存储桶,从而提供必要的扩展。这些池的布局和命名由策略设置控制。

8.10.2. 存储桶和对象列表

属于给定用户的存储桶列在名为 USER_ID.buckets 的对象的 OMAP 中,例如 foo.buckets,位于带有 users.uid 命名空间的 default.rgw.meta 池中。这些对象在列出存储桶时访问,在更新存储桶内容时,以及更新和检索存储桶统计信息,如配额。这些列表与 .rgw 池中的 bucket 保持一致。

注意

有关这些 OMAP 条目的值,请参阅用户可见、编码的类 cls_user_entry 及其嵌套类 cls_user_bucket

属于给定存储桶的对象列在 bucket 索引中。索引对象的默认命名是 default.rgw.buckets.index 池中 .dir.MARKER

8.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.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
Copy to Clipboard Toggle word wrap

Namespace: users.uid

USER 对象中包括每个用户信息 (RGWUserInfo),以及 USER.buckets 对象的 omaps 中的每个用户的存储桶列表。如果非空,USER 可能会包含租户。

示例

prodtx$prodt
test2.buckets
prodtx$prodt.buckets
test2
Copy to Clipboard Toggle word wrap

namespace: users.email
Unimportant
namespace: users.keys

47UA98JSTJZ9YAN3OS3O

这允许 Ceph 对象网关在身份验证期间按其访问密钥查找用户。

Namespace: users.swift
test:tester
ZONE.rgw.buckets.index
对象命名为 .dir.initContainersER,每个对象都包含 bucket 索引。如果索引被分片,则每个分片在标记后附加分片索引。
ZONE.rgw.buckets.data

default.7593.4__shadow_.488urDFerTYXavx4yAd-Op8mxehnvTI_1 MARKER_KEY

标记示例为 default.16004.1default.7593.4。当前格式为 ZONEINSTANCE_ID.BUCKET_ID,但生成后,标记不会再次解析,因此其格式可能会在以后自由更改。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat