RGW池放置和存储类(Octopus版本)

1. 放置目标

放置目标控制哪些与特定桶。 存储桶的放置目标是在创建时选择的,不能修改的。radosgw-admin bucket stats命令将显示其 placement_rule.

2. 存储类

Nautilus 版本中的新功能。

存储类用于自定义对象数据的放置。 S3 存储桶生命周期规则可以自动化存储类之间的对象转换。

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

3. 区域组和区域配置

查看放置配置:

$ 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
            }
        }
    ],
    ...
}

3.1 添加放置目标

创建一个名为 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

3.2 添加存储类

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

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

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

$ radosgw-admin zone placement add \
      --rgw-zone default \
      --placement-id default-placement \
      --storage-class COLD \
      --data-pool default.rgw.cold.data \
      --compression lz4

4. 自定义放置

4.1 默认位置

默认情况下,新存储桶将使用 zonegroup 的 default_placement目标。 可以通过以下方式更改此区域组设置:

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

4.2 用户布局

Ceph 对象网关用户可以通过设置非空目标 用户信息中的default_placement字段覆盖区域组的默认位置。 同样, default_storage_class可以覆盖默认情况下应用于对象的STANDARD 存储类。

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

如果区域组的放置目标包含任何 tags,用户将无法使用该放置目标创建存储桶,除非它们的用户信息在其 placement_tags包含至少有一个匹配的标签。 这在限制对某些类型的存储的访问时可能很有用。

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

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

5. S3存储桶放置

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

通常,LocationConstraint 必须与 zonegroup 的 api_name:

<LocationConstraint>default</LocationConstraint>

可以将自定义放置目标添加到 api_name冒号后:

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

6. swift放置桶

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

X-Storage-Policy: new-placement

7. 使用存储类

所有放置位置目标都有一个适用于新对象默认为STANDARD的存储类。用户可以用default_storage_class覆盖这个默认值。

要在非默认存储类中创建对象,请提供请求的 HTTP 标头中该存储类的名称。 S3 协议使用 X-Amz-Storage-Class标头,而 Swift 协议使用 X-Object-Storage-Class标头。

然后可以使用 S3 对象生命周期管理使用 Transition存储类之间移动对象数据。

 

posted @ 2022-05-26 14:03  Varden  阅读(320)  评论(0编辑  收藏  举报