Pool Placement¶
Placement Targets¶
New in version Jewel.
Placement targets control which Pools are associated with a particular
bucket. A bucket’s placement target is selected on creation, and cannot be
modified. The radosgw-admin bucket stats
command will display its
placement_rule
.
The zonegroup configuration contains a list of placement targets with an
initial target named default-placement
. The zone configuration then maps
each zonegroup placement target name onto its local storage. This zone
placement information includes the index_pool
name for the bucket index,
the data_extra_pool
name for metadata about incomplete multipart uploads,
and a data_pool
name for object data.
Zonegroup/Zone Configuration¶
Placement configuration is performed with radosgw-admin
commands on
the zonegroups and zones.
The zonegroup placement configuration can be queried with:
$ radosgw-admin zonegroup get
{
"id": "ab01123f-e0df-4f29-9d71-b44888d67cd5",
"name": "default",
"api_name": "default",
...
"placement_targets": [
{
"name": "default-placement",
"tags": [],
}
],
"default_placement": "default-placement",
...
}
The zone placement configuration can be queried with:
$ 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",
"data_pool": "default.rgw.buckets.data",
"data_extra_pool": "default.rgw.buckets.non-ec",
"index_type": 0
}
}
],
...
}
Note
If you have not done any previous Multisite Configuration,
a default
zone and zonegroup are created for you, and changes
to the zone/zonegroup will not take effect until the Ceph Object
Gateways are restarted. If you have created a realm for multisite,
the zone/zonegroup changes will take effect once the changes are
committed with radosgw-admin period update --commit
.
Adding a Placement Target¶
To create a new placement target named temporary
, start by adding it to
the zonegroup:
$ radosgw-admin zonegroup placement add \
--rgw-zonegroup default \
--placement-id temporary
Then provide the zone placement info for that target:
$ 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 \
--compression lz4
Customizing Placement¶
Default Placement¶
By default, new buckets will use the zonegroup’s default_placement
target.
This zonegroup setting can be changed with:
$ radosgw-admin zonegroup placement default \
--rgw-zonegroup default \
--placement-id new-placement
User Placement¶
A Ceph Object Gateway user can override the zonegroup’s default placement
target by setting a non-empty default_placement
field in the user info.
$ radosgw-admin user info --uid testid
{
...
"default_placement": "",
"placement_tags": [],
...
}
If a zonegroup’s placement target contains any tags
, users will be unable
to create buckets with that placement target unless their user info contains
at least one matching tag in its placement_tags
field. This can be useful
to restrict access to certain types of storage.
The radosgw-admin
command cannot modify these fields directly, so the json
format must be edited manually:
$ radosgw-admin metadata get user:<user-id> > user.json
$ vi user.json
$ radosgw-admin metadata put user:<user-id> < user.json
S3 Bucket Placement¶
When creating a bucket with the S3 protocol, a placement target can be provided as part of the LocationConstraint to override the default placement targets from the user and zonegroup.
Normally, the LocationConstraint must match the zonegroup’s api_name
:
<LocationConstraint>default</LocationConstraint>
A custom placement target can be added to the api_name
following a colon:
<LocationConstraint>default:new-placement</LocationConstraint>
Swift Bucket Placement¶
When creating a bucket with the Swift protocol, a placement target can be
provided in the HTTP header X-Storage-Policy
:
X-Storage-Policy: new-placement