注意

本文档适用于 Ceph 开发版本。

池放置和存储类

放置目标

Jewel 版本中的新增功能。

放置目标控制哪些Pools与特定桶相关联。桶的放置目标在创建时选择,并且不能修改。命令将显示其radosgw-admin bucket stats放置目标。区域组配置包含放置目标列表,初始目标名为placement_rule.

。区域配置然后将每个区域组放置目标名称映射到其本地存储。此区域放置信息包括桶索引的default-placement. The zone configuration then maps each zonegroup placement target name onto its local storage. This zone placement information includes the index_pool名称,不完整多部分上传的元数据的data_extra_pool名称,以及每个存储类的data_pool名称。

存储类别

Nautilus 版本中的新功能。

存储类指定对象数据的放置。S3 桶生命周期(LC)规则可以自动在存储类之间转换对象。

存储类根据放置目标定义。每个区域组放置目标列出了其可用的存储类,初始类名为STANDARD。区域配置负责为区域组的每个存储类提供一个data_pool池名称。

区域组/区域配置

放置配置通过在区域组和区域上执行radosgw-admin命令来完成。

可以使用以下方式查询区域组放置配置:

radosgw-admin zonegroup get
{
    "id": "ab01123f-e0df-4f29-9d71-b44888d67cd5",
    "name": "default",
    "api_name": "default",
    ...
    "placement_targets": [
        {
            "name": "default-placement",
            "tags": [],
            "storage_classes": [
                "STANDARD"
            ]
        }
    ],
    "default_placement": "default-placement",
    ...
}

可以使用以下方式查询区域放置配置:

radosgw-admin zone get
{
    "id": "557cdcee-3aae-4e9e-85c7-2f86f5eddb1f",
    "name": "default",
    "domain_root": "default.rgw.meta:root",
    ...
    "placement_pools": [
        {
            "key": "default-placement",
            "val": {
                "index_pool": "default.rgw.buckets.index",
                "storage_classes": {
                    "STANDARD": {
                        "data_pool": "default.rgw.buckets.data"
                    }
                },
                "data_extra_pool": "default.rgw.buckets.non-ec",
                "index_type": 0,
                "inline_data": true
            }
        }
    ],
    ...
}

Note

如果您之前没有执行任何操作多站点配置,则会为您创建一个区域和区域组,并且对区域/区域组的更改只有在重新启动 Ceph 对象网关(RGW 守护进程)后才会生效。如果您为多站点创建了区域,则区域/区域组更改一旦提交default区域和区域组将为您创建,并且对区域/区域组的更改不会在重启 Ceph 对象网关后生效。如果您为多站点创建了领域,则区域/区域组更改将在更改提交后立即生效。radosgw-admin period update --commit.

添加放置目标

要创建一个名为temporary的新放置目标,将其添加到区域组:

radosgw-admin zonegroup placement add --rgw-zonegroup default \
                                        --placement-id temporary

然后为该目标提供区域放置信息:

radosgw-admin zone placement add --rgw-zone default \
                                   --placement-id temporary \
                                   --data-pool default.rgw.temporary.data \
                                   --index-pool default.rgw.temporary.index \
                                   --data-extra-pool default.rgw.temporary.non-ec

Note

使用默认放置目标设置,RGW 将对象的第一数据块存储在 RADOSHEAD对象中,并附带 XATTR 元数据。可以使用--placement-inline-data=false标志与zone placement addzone placement modify命令一起使用来更改目标上存储的新对象的行为。从不在写入非默认存储类时执行。

添加存储类

要添加一个名为STANDARD_IA传递给default-placement的新存储类目标,首先将其添加到区域组:

radosgw-admin zonegroup placement add --rgw-zonegroup default \
                                        --placement-id default-placement \
                                        --storage-class STANDARD_IA

然后为该存储类提供区域放置信息:

radosgw-admin zone placement add --rgw-zone default \
                                   --placement-id default-placement \
                                   --storage-class STANDARD_IA \
                                   --data-pool default.rgw.glacier.data \
                                   --compression lz4

自定义放置

默认放置

默认情况下,新桶将使用区域组的default_placement放置目标。此区域组设置可以使用:

radosgw-admin zonegroup placement default --rgw-zonegroup default \
                                            --placement-id new-placement

用户放置

Ceph 对象网关用户可以通过在用户信息中设置非空的default_placement字段来覆盖区域组的默认放置目标。类似地,default_storage_class可以覆盖默认应用于对象的STANDARD存储类。

radosgw-admin user info --uid testid
{
    ...
    "default_placement": "",
    "default_storage_class": "",
    "placement_tags": [],
    ...
}

如果区域组的放置目标包含任何tags,除非其用户信息中的placement_tags字段至少包含一个匹配的标签,否则用户将无法使用该放置目标创建桶。这可以用来限制对某些类型存储的访问。

The radosgw-admin命令可以直接修改这些字段:

radosgw-admin user modify --uid <user-id> \
                            --placement-id <default-placement-id> \
                            --storage-class <default-storage-class> \
                            --tags <tag1,tag2>

S3桶放置

当使用 S3 协议创建桶时,可以提供放置目标作为LocationConstraint的一部分来覆盖用户和区域组的默认放置目标。

通常,LocationConstraint必须与区域组的api_name:

<LocationConstraint>default</LocationConstraint>

匹配。api_name以下冒号后:

<LocationConstraint>default:new-placement</LocationConstraint>

Swift 桶放置

当使用 Swift 协议创建桶时,可以在 HTTP 头中提供放置目标X-Storage-Policy:

X-Storage-Policy: new-placement

使用存储类

所有放置目标都有一个STANDARD存储类,默认情况下应用于新对象。用户可以覆盖此默认设置,使用其default_storage_class.

要在非默认存储类中创建对象,请在请求中通过 HTTP 头提供该存储类名称。S3 协议使用X-Amz-Storage-Class头,而 Swift 协议使用X-Object-Storage-Class头部中包含一个有效的 Keystone 令牌。

S3 对象生命周期管理然后可以使用Transition操作设置。

将对象数据在存储类之间移动。boto3)时,必须确保存储类名称与 AWS S3 提供的名称匹配,否则 SDK 将放弃请求并引发异常。此外,一些 S3 客户端和库在存储类名称为GLACIER开头时期望 AWS 特定行为,因此在访问 Ceph RGW 服务时会失败。因此,我们建议在 Ceph 中使用其他存储类名称,包括INTELLIGENT-TIERING, STANDARD_IA, REDUCED_REDUNDANCY, and ONEZONE_IA。像CHEAPNDEEP这样的自定义存储类名称被 Ceph 接受,但可能不被某些客户端和库接受。

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.