9.10. Ceph 对象网关数据布局


虽然 RADOS 仅了解带有其扩展属性(xattrs)和对象映射(OMAP)的池和对象映射(OMAP),但概念上 Ceph 对象网关将其数据组织为三种不同的类型:

  • 元数据
  • 存储桶索引
  • data

元数据

元数据有三个部分:

  • User: 保存用户信息。
  • 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

Example

[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 索引在 RADOS 对象中包含一个键值映射。默认情况下,这是每个 bucket 的单一 RADOS 对象,但可以通过多个 RADOS 对象对 map 进行分片。

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

重要

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

注意

OMAP 是与对象关联的键值存储,其方式与与 POSIX 文件关联的扩展属性类似。对象的 OMAP 不在对象的存储中,其精确的实现是不可见的,对 Ceph 对象网关而言不透明。

data

对象数据保存在每个 Ceph 对象网关对象的一个或多个 RADOS 对象中。

9.10.1. 对象查找路径

在访问对象时,REST API 会进入 Ceph 对象网关,具有三个参数:

  • 在 Swift 中具有访问密钥的帐户信息
  • 存储桶或容器名称
  • 对象名称或密钥

目前,Ceph 对象网关仅使用帐户信息来查找用户 ID 和 访问控制。它只使用存储桶名称和对象键来处理池中的对象。

帐户信息

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

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

对象名称

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

9.10.1.1. 多个数据池

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

9.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

其它资源

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 实例。

Example

.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 可能会包含租户。

Example

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.1default.7593.4。当前格式为 ZONE.INSTANCE_IDBUCKET_ID,在生成后,不会再次解析标记,因此其格式将来可能会自由改变。

其它资源

  • 如需了解更多详细信息,请参阅 Red Hat Ceph Storage Object Gateway 指南中的 Ceph 对象网关 数据布局
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.