池布局和存储类
布局目标
Jewel版本的新功能。
布局目标控制哪些池与特定桶关联。 在创建时选择桶的布局目标,无法修改。 radosgw-admin bucket stats命令将显示其placement_rule。
zonegroup配置包含一个布局目标列表,其初始目标名为default-placement。 然后,zone配置将每个zonegroup布局目标名称映射到其本地存储。 该zone布局信息包括桶索引的index_pool名称,有关不完整分段上传的元数据的data_extra_pool名称以及每个存储类的data_pool名称。
# radosgw-admin bucket stats
[
{
"bucket": "new-bucket-5db3c339",
"zonegroup": "db580da0-2953-4112-b8bc-ea840f6efa03",
"placement_rule": "default-placement",
"explicit_placement": {
"data_pool": "",
"data_extra_pool": "",
"index_pool": ""
},
"id": "f7e5f321-d4b8-4e34-9861-46a4a3b70a07.1594740.1",
"marker": "f7e5f321-d4b8-4e34-9861-46a4a3b70a07.1594740.1",
"index_type": "Normal",
"owner": "xf",
"ver": "0#54",
"master_ver": "0#0",
"mtime": "2019-07-24 17:24:47.045792",
"max_marker": "0#",
"usage": {
"rgw.main": {
"size": 400587786,
"size_actual": 400592896,
"size_utilized": 400587786,
"size_kb": 391200,
"size_kb_actual": 391204,
"size_kb_utilized": 391200,
"num_objects": 3
},
"rgw.multimeta": {
"size": 0,
"size_actual": 0,
"size_utilized": 0,
"size_kb": 0,
"size_kb_actual": 0,
"size_kb_utilized": 0,
"num_objects": 0
}
},
"bucket_quota": {
"enabled": false,
"check_on_raw": false,
"max_size": -1,
"max_size_kb": 0,
"max_objects": -1
}
}
]
# radosgw-admin zonegroup get db580da0-2953-4112-b8bc-ea840f6efa03
{
"id": "db580da0-2953-4112-b8bc-ea840f6efa03",
"name": "default",
"api_name": "",
"is_master": "true",
"endpoints": [
],
"hostnames": [
],
"hostnames_s3website": [
],
"master_zone": "f7e5f321-d4b8-4e34-9861-46a4a3b70a07",
"zones": [
{
"id": "f7e5f321-d4b8-4e34-9861-46a4a3b70a07",
"name": "default",
"endpoints": [
],
"log_meta": "false",
"log_data": "false",
"bucket_index_max_shards": 0,
"read_only": "false",
"tier_type": "",
"sync_from_all": "true",
"sync_from": [
],
"redirect_zone": ""
}
],
"placement_targets": [
{
"name": "default-placement",
"tags": [
]
}
],
"default_placement": "default-placement",
"realm_id": ""
}
# radosgw-admin zone get f7e5f321-d4b8-4e34-9861-46a4a3b70a07
{
"id": "f7e5f321-d4b8-4e34-9861-46a4a3b70a07",
"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",
"data_pool": "default.rgw.buckets.data",
"data_extra_pool": "default.rgw.buckets.non-ec",
"index_type": 0,
"compression": ""
}
}
],
"metadata_heap": "",
"realm_id": ""
}
存储类
Nautilus版本的新功能。
存储类用于自定义对象数据的布局。S3桶生命周期规则可以自动在存储类之间转换对象。
存储类是根据布局目标来定义的。每个zonegroup布局目标均以其初始类STANDARD列出其可用的存储类。zone配置负责为zonegroup的每个存储类提供data_pool池名称。
ZONEGROUP/ZONE配置
在zonegroup和zone上使用radosgw-admin命令执行布局配置。
可使用以下方式查询zonegroup布局配置:
# 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",
...
}
可以使用以下方式查询zone布局配置:
# 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
}
}
],
...
}
注意
如果尚未执行任何前面的多站点配置,则会创建名为default的zone和zonegroup,并且在重启Ceph对象网关之前,对zone/zonegroup的更改将不会生效。 如果已为多站点创建了一个域(realm),则一旦使用radosgw-admin period update -commit提交更改,zone/zonegroup更改将生效。
添加布局目标
要创建名为temporary的新布局目标,需首先将其添加到zonegroup:
# radosgw-admin zonegroup placement add --rgw-zonegroup default --placement-id temporary
然后提供该目标的zone布局信息:
# 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
添加存储类
要将名为COLD的新存储类添加到default-placement目标,请首先将其添加到zonegroup:
# radosgw-admin zonegroup placement add \
--rgw-zonegroup default \
--placement-id default-placement \
--storage-class COLD
然后为该存储类提供zone布局信息:
# radosgw-admin zone placement add \
--rgw-zone default \
--placement-id default-placement \
--storage-class COLD \
--data-pool default.rgw.cold.data \
--compression lz4
自定义布局
DEFAULT PLACEMENT
默认情况下,新建桶时将使用zonegroup的default_placement目标。 可使用以下命令更改此zonegroup设置:
# radosgw-admin zonegroup placement default \
--rgw-zonegroup default \
--placement-id new-placement
USER PLACEMENT
Ceph对象网关用户可以通过在用户信息中设置非空的default_placement字段来覆盖zonegroup的默认布局目标。 同样,default_storage_class可以覆盖默认情况下应用于对象的STANDARD存储类。
# radosgw-admin user info --uid testid
{
...
"default_placement": "",
"default_storage_class": "",
"placement_tags": [
],
...
}
如果一个zonegroup的布局目标包含任何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>
S3 BUCKET PLACEMENT
创建使用S3协议的桶时,可以提供布局目标作为LocationConstraint的一部分,以覆盖用户和zonegroup的默认布局目标。
通常,LocationConstraint必须与zonegroup的api_name匹配:
<LocationConstraint>default</LocationConstraint>
可以在api_name的冒号后面添加自定义布局目标:
<LocationConstraint>default:new-placement</LocationConstraint>
SWIFT BUCKET PLACEMENT
创建使用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头。
然后,可以使用S3对象生命周期管理来使用Transition操作在存储类之间移动对象数据。
生命周期设置
桶生命周期配置可用于管理对象,以便在它们的整个生命周期内对其进行有效存储。 在过去的版本中,生命周期处理受到单线程处理速率的限制。 在Nautilus版本中,此问题已得到解决,并且Ceph对象网关现在允许跨其它Ceph对象网关实例对桶生命周期进行并行线程处理,并用随机有序序列代替有序索引分片枚举。
在寻求提高生命周期处理的积极性时,特别要考虑两个选项:
rgw_lc_max_worker
描述:此选项指定要并行运行的生命周期工作线程的数量,从而同时处理桶和索引分片。
类型:整型
默认值:3
rgw_lc_max_wp_worker
描述:该选项指定每个lifecycle workers工作池中的线程数。这个选项可以帮助加速处理每个桶。
这些值可以根据特定工作负载进行调整,以进一步提高生命周期处理的积极性。对于桶数量较多(数千)的工作负载,可以考虑将rgw_lc_max_worker值从默认值3增加,而对于桶数量较少但每个桶对象数较高(数十万)的工作负载,可以考虑将rgw_lc_max_wp_worker值从默认值3降低。
注:
当想要调整这两个特定值时,请在增加之前验证当前集群性能和Ceph对象网关利用率。