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
在存储类之间移动对象数据。