7.12. 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 对象上。

重要

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

注意

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

bucket 索引

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

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

注意

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

data

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

7.12.1. 对象查找路径

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

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

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

帐户信息

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

在访问用户数据时,用户记录会从带有 users.uid 命名空间的 default.rgw.meta 池中的对象 USER_ID 加载。

bucket 名称

它们通过 root 命名空间在 default.rgw.meta 池中表示。加载存储桶记录,以获取一个标记,它充当存储桶 ID。

对象名称

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

7.12.1.1. 多个数据池

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

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

其它资源