PLACEMENT TARGETS

Placement targets控制哪些池与特定存储桶相关联。桶的Placement targets在创建时已选择,无法修改。radosgw-admin bucket stats 命令可以显示它的placement_rule

zonegroup配置包含一个placement targets列表,其初始目标名为default-placement。zone配置会将每个zonegroup placement target名称映射到其本地存储上。这个zone placement信息包括存储桶索引名称index_pool,有关分段上传不完整的元数据名称data_extra_pool,每个存储类名称data_pool。

STORAGE CLASSES

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

存储类别是根据placement target定义的。每个zonegroup的placement target都列出了其可用的存储类别,并带有名为的初始类别STANDARD。zone配置负责为每个zonegroup’s storage classes提供一个data_pool pool name。

ZONEGROUP/ZONE CONFIGURATION

查询zonegroup placement configuration

[ceph@ceph03 ~]$ radosgw-admin zonegroup get
{
    "id": "e41e2b77-1b7c-425b-b78c-21d9020d4ffb",
    "name": "default",
    "api_name": "default",
    "is_master": "true",
    "endpoints": [],
    "hostnames": [],
    "hostnames_s3website": [],
    "master_zone": "e5d54e67-239f-465d-b42e-6785b652fb40",
    "zones": [
        {
            "id": "e5d54e67-239f-465d-b42e-6785b652fb40",
            "name": "default",
            "endpoints": [],
            "log_meta": "false",
            "log_data": "false",
            "bucket_index_max_shards": 2,
            "read_only": "false",
            "tier_type": "",
            "sync_from_all": "true",
            "sync_from": [],
            "redirect_zone": ""
        }
    ],
    "placement_targets": [
        {
            "name": "default-placement",
            "tags": [],
            "storage_classes": [
                "STANDARD"
            ]
        }
    ],
    "default_placement": "default-placement",
    "realm_id": ""
}

查询zone placement configuration

}
[ceph@ceph03 ~]$ radosgw-admin zone get
{
    "id": "e5d54e67-239f-465d-b42e-6785b652fb40",
    "name": "default",
    "domain_root": "default.rgw.meta:root",
    "control_pool": "default.rgw.control",
    "gc_pool": "default.rgw.log:gc",
    "lc_pool": "default.rgw.log:lc",
    "log_pool": "default.rgw.log",
    "intent_log_pool": "default.rgw.log:intent",
    "usage_log_pool": "default.rgw.log:usage",
    "reshard_pool": "default.rgw.log:reshard",
    "user_keys_pool": "default.rgw.meta:users.keys",
    "user_email_pool": "default.rgw.meta:users.email",
    "user_swift_pool": "default.rgw.meta:users.swift",
    "user_uid_pool": "default.rgw.meta:users.uid",
    "otp_pool": "default.rgw.otp",
    "system_key": {
        "access_key": "",
        "secret_key": ""
    },
    "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
            }
        }
    ],
    "metadata_heap": "",
    "realm_id": ""
}

添加placement target

要创建名为temporary新的placement target,请先将其添加到zonegroup中:

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

#创建完后再用radosgw-admin zonegroup get查看一下

然后添加该target的zone placement信息:

$ 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

添加STORAGE CLASS

要将新的存储类添加GLACIER到default-placement目标,请先将其添加到zonegroup中:

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

然后添加该存储类的zone placement信息:

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

默认PLACEMENT

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

$ radosgw-admin zonegroup placement default \
      --rgw-zonegroup default \
      --placement-id temporary                   #temporary是上面新建的placement target

USER PLACEMENT

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

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

如果区域组的placement target包含tags,则用户将无法使用该placement target创建存储桶,除非其用户信息在其placement_tags字段中至少包含一个匹配标签。这对于限制对某些类型的存储的访问很有用。

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

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

S3存储桶放置

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

通常,LocationConstraint必须匹配zonegroup’s api_name:

<LocationConstraint>default</LocationConstraint>

可以将自定义placement target添加到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标头。

使用python boto3之类的AWS S3 SDK时,非默认存储类将被调用为允许的AWS S3存储类中的一个,这一点很重要,否则SDK会丢弃该请求并引发异常。

多站点配置

参考:https://docs.ceph.com/docs/master/radosgw/multisite/

多站点同步

参考:https://docs.ceph.com/docs/master/radosgw/multisite-sync-policy/

配置参考

参考:https://docs.ceph.com/docs/master/radosgw/config-ref/

动态存储区索引重新分片

参考:https://docs.ceph.com/docs/master/radosgw/dynamicresharding/

多因素认证

参考:https://docs.ceph.com/docs/master/radosgw/mfa/

STS配置

参考:https://docs.ceph.com/docs/master/radosgw/STS/

STS Lite

参考:https://docs.ceph.com/docs/master/radosgw/STSLite/

文档更新时间: 2020-05-26 16:01   作者:子木