5.9. 多站点 Ceph 对象网关命令行使用
作为存储管理员,您可以更好地了解如何在多站点环境中使用 Ceph 对象网关。您可以在多站点环境中了解如何更好地管理域、区域组和区域。
先决条件
- 正在运行的 Red Hat Ceph Storage
- 部署 Ceph 对象网关软件。
- 访问 Ceph 对象网关节点或容器。
5.9.1. Realms
realm 代表一个全局唯一的命名空间,它由一个或多个 zone group 组成,包含一个或多个 zone,以及包含 bucket 的区域,后者又包含对象。域允许 Ceph 对象网关在同一硬件上支持多个命名空间及其配置。
域中包含句点的概念。每个 period 代表 zone group 和 zone 配置的状态。每次您更改一个 zonegroup 或 zone zone 时,更新 period 并提交。
红帽建议为新集群创建域(realms)。
5.9.1.1. 创建一个域
要创建域,请使用 realm create
命令并指定 realm 名称。
流程
创建 realm。
语法
radosgw-admin realm create --rgw-realm=REALM_NAME
示例
[ceph: root@host01 /]# radosgw-admin realm create --rgw-realm=test_realm
重要如果数据和元数据存储在
default
.rgw.datadefault.rgw.index
池中,则不要将 realm 与-default 标志一起使用。如果将一个新的 realm 设置为默认值,并且这些池包含重要数据,radosgw-admin
实用程序可能无法正确管理此数据。只在需要将 realm 指定为默认值时使用--
default
标志,如果您不需要default.rgw
池中的现有数据或元数据,则只使用 use-default 标志。如果需要现有数据或元数据,可以将默认配置迁移到多站点或域设置,或者避免将新域设置为默认值。有关迁移到多站点的更多信息,请参阅将单个站点系统迁移到多站点。通过指定-默认
,域通过为每个radosgw-admin
调用隐式调用,unless--rgw-realm
和 realm 名称被明确提供。可选:更改默认域。
语法
radosgw-admin realm default --rgw-realm=REALM_NAME
示例
[ceph: root@host01 /]# radosgw-admin realm default --rgw-realm=test_realm1
5.9.1.2. 将 Realm 设置为默认值
realm 列表中的一个域应为默认域。可能只有一个默认域。如果只有一个域,但没有在创建时指定为默认域,则使其成为默认域。另外,要更改哪个域是默认域,请运行以下命令:
[ceph: root@host01 /]# radosgw-admin realm default --rgw-realm=test_realm
当 realm 为 default 时,命令行假设 --rgw-realm=REALM_NAME
作为参数。
5.9.1.3. 删除 Realm
要删除域,请运行 realm delete
命令并指定 realm 名称。
语法
radosgw-admin realm delete --rgw-realm=REALM_NAME
示例
[ceph: root@host01 /]# radosgw-admin realm delete --rgw-realm=test_realm
5.9.1.4. 获取域
要获取域,请运行 realm get
命令并指定 realm 名称。
语法
radosgw-admin realm get --rgw-realm=REALM_NAME
示例
[ceph: root@host01 /]# radosgw-admin realm get --rgw-realm=test_realm >filename.json
CLI 将回显具有 realm 属性的 JSON 对象。
{ "id": "0a68d52e-a19c-4e8e-b012-a8f831cb3ebc", "name": "test_realm", "current_period": "b0c5bbef-4337-4edd-8184-5aeab2ec413b", "epoch": 1 }
使用 >
和输出文件名将 JSON 对象输出到文件中。
5.9.1.5. 设置域
要设置域,请运行 realm set
命令,使用输入文件名指定 realm 名称和 --infile=
。
语法
radosgw-admin realm set --rgw-realm=REALM_NAME --infile=IN_FILENAME
示例
[ceph: root@host01 /]# radosgw-admin realm set --rgw-realm=test_realm --infile=filename.json
5.9.1.6. 列出域
要列出 realm,请运行 realm list
命令:
示例
[ceph: root@host01 /]# radosgw-admin realm list
5.9.1.7. 列出 Realm Periods
要列出 realm period,请运行 realm list-periods
命令。
示例
[ceph: root@host01 /]# radosgw-admin realm list-periods
5.9.1.8. 拉取域
要将包含 master zone group 和 master zone 的节点的域拉取到包含 second zone group 或 zone 的节点,请在将接收 realm 配置的节点上运行 realm pull
命令。
语法
radosgw-admin realm pull --url=URL_TO_MASTER_ZONE_GATEWAY--access-key=ACCESS_KEY --secret=SECRET_KEY
5.9.1.9. 重命名域
realm 不是该 period 的一部分。因此,仅在本地应用重命名域,且不会通过 realm pull
来拉取。
在重命名具有多个区域的域时,在每个区域上运行 命令。
流程
重命名域。
语法
radosgw-admin realm rename --rgw-realm=REALM_NAME --realm-new-name=NEW_REALM_NAME
注意不要使用
realm set
来更改name
参数。这仅更改内部名称。指定--rgw-realm
仍然会使用旧的域名。示例
[ceph: root@host01 /]# radosgw-admin realm rename --rgw-realm=test_realm --realm-new-name=test_realm2
提交更改。
语法
radosgw-admin period update --commit
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.2. zone group
Ceph 对象网关利用 zone group 的概念来支持多站点部署和全局命名空间。zone group 以前称为地区,它定义一个或多个 zone 中一个或多个 Ceph 对象网关实例的地理位置。
配置 zone group 与典型的配置过程不同,因为并非所有设置都最终在 Ceph 配置文件中。您可以列出 zone group、获取 zone group 配置并设置 zone group 配置。
radosgw-admin zonegroup
操作可以在域内的任何节点上执行,因为更新该周期的步骤会在整个集群中传播更改。但是,radosgw-admin zone
需要在区域内的主机上执行。
5.9.2.1. 创建区组
创建 zone group 包括指定 zone group name。创建区域将假定它将位于默认域中,除非指定了 --rgw-realm=REALM_NAME
。如果 zonegroup 是 master zonegroup,请指定 --master
标志。
如果数据和元数据存储在 default.rgw.data
和
池中,则不要使用-default 标志创建 zone group。如果将一个新的 zone group 设置为默认值,并且这些池包含重要数据,default
.rgw.indexradosgw-admin
实用程序可能无法正确管理此数据。
仅在需要时使用-- default
标志,将 zone group 指定为默认值,如果您不需要 default.rgw
池中的现有数据或元数据。如果需要现有数据或元数据,可以将默认配置迁移到多站点或 zone group 设置,或者避免将新 zone group 设置为默认值。有关迁移到多站点的更多信息,请参阅将单个站点系统迁移到多站点。通过指定 默认
,使用每个 radosgw-admin
调用隐式调用 zone group,unless --rgw-zonegroup
和 zone group name 被明确提供。
流程
创建 zone group。
语法
radosgw-admin zonegroup create --rgw-zonegroup=ZONE_GROUP_NAME [--rgw-realm=REALM_NAME] [--master]
示例
[ceph: root@host01 /]# radosgw-admin zonegroup create --rgw-zonegroup=zonegroup1 --rgw-realm=test_realm --default
可选:更改 zone group 设置。
语法
zonegroup modify --rgw-zonegroup=ZONE_GROUP_NAME
示例
[ceph: root@host01 /]# radosgw-admin zonegroup modify --rgw-zonegroup=zonegroup1
可选:更改默认 zone group。
语法
radosgw-admin zonegroup default --rgw-zonegroup=ZONE_GROUP_NAME
示例
[ceph: root@host01 /]# radosgw-admin zonegroup default --rgw-zonegroup=zonegroup2
提交更改。
语法
radosgw-admin period update --commit
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.2.2. 将区组设为默认值
zonegroups 列表中的一个 zonegroup 应当是末日 zonegroup。可能只有一个默认 zonegroup。如果只有一个 zonegroup,并且它没有在创建时指定为默认 zonegroup,则使其成为默认 zonegroup。另外,要更改哪个 zonegroup 是默认 zonegroup,请运行以下命令:
示例
[ceph: root@host01 /]# radosgw-admin zonegroup default --rgw-zonegroup=us
当 zonegroup 为默认值时,命令行假设 --rgw-zonegroup=ZONE_GROUP_NAME
作为参数。
然后,更新周期:
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.2.3. 在区组中添加一个区
要向 zonegroup 添加一个区域,您必须在区域中的主机上运行此命令。要在 zonegroup 中添加区,请运行以下命令:
语法
radosgw-admin zonegroup add --rgw-zonegroup=ZONE_GROUP_NAME --rgw-zone=ZONE_NAME
然后,更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.2.4. 从区组中删除区
要从 zonegroup 中删除区,请运行以下命令:
语法
radosgw-admin zonegroup remove --rgw-zonegroup=ZONE_GROUP_NAME --rgw-zone=ZONE_NAME
然后,更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.2.5. 重命名一个区组
要重命名 zonegroup,请运行以下命令:
语法
radosgw-admin zonegroup rename --rgw-zonegroup=ZONE_GROUP_NAME --zonegroup-new-name=NEW_ZONE_GROUP_NAME
然后,更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.2.6. 删除 Zone 组
要删除 zonegroup,请运行以下命令:
语法
radosgw-admin zonegroup delete --rgw-zonegroup=ZONE_GROUP_NAME
然后,更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.2.7. 列出区组
Ceph 集群包含 zone group 的列表。要列出区组,请运行以下命令:
[ceph: root@host01 /]# radosgw-admin zonegroup list
radosgw-admin
返回一个 JSON 格式的 zone group 列表。
{ "default_info": "90b28698-e7c3-462c-a42d-4aa780d24eda", "zonegroups": [ "us" ] }
5.9.2.8. 获取区组
要查看 zone group 的配置,请运行以下命令:
语法
radosgw-admin zonegroup get [--rgw-zonegroup=ZONE_GROUP_NAME]
zone group 配置类似如下:
{ "id": "90b28698-e7c3-462c-a42d-4aa780d24eda", "name": "us", "api_name": "us", "is_master": "true", "endpoints": [ "http:\/\/rgw1:80" ], "hostnames": [], "hostnames_s3website": [], "master_zone": "9248cab2-afe7-43d8-a661-a40bf316665e", "zones": [ { "id": "9248cab2-afe7-43d8-a661-a40bf316665e", "name": "us-east", "endpoints": [ "http:\/\/rgw1" ], "log_meta": "true", "log_data": "true", "bucket_index_max_shards": 11, "read_only": "false" }, { "id": "d1024e59-7d28-49d1-8222-af101965a939", "name": "us-west", "endpoints": [ "http:\/\/rgw2:80" ], "log_meta": "false", "log_data": "true", "bucket_index_max_shards": 11, "read_only": "false" } ], "placement_targets": [ { "name": "default-placement", "tags": [] } ], "default_placement": "default-placement", "realm_id": "ae031368-8715-4e27-9a99-0c9468852cfe" }
5.9.2.9. 设置区组
定义 zone group 包括创建 JSON 对象,至少指定所需的设置:
-
name
:zone group 的名称。必需。 -
api_name
:zone group 的 API 名称。可选。 is_master
:确定 zone group 是 master zone group。必需。注意:您只能有一个 master zone group。
-
endpoint
:zone group 中所有端点的列表。例如,您可以使用多个域名来引用同一 zone group。请注意,需要使用正斜杠(\/
)进行转意。您还可以为每个端点指定一个端口(fqdn:port
)。可选。 -
hostnames
:zone group 中所有主机名的列表。例如,您可以使用多个域名来引用同一 zone group。可选。rgw dns name
设置将自动包含在此列表中。您应在更改此设置后重新启动网关守护进程。 master_zone
: zone group 的 master zone。可选。如果未指定,则使用默认区域。注意每个 zone group 只能有一个 master zone。
-
zones:zone
group 中所有 zone 的列表。每个区域都有一个名称(必需),一个端点列表(可选),以及网关是否记录元数据和数据操作(默认为false)。 -
placement_targets
:放置目标列表(可选)。每个放置目标都包含放置目标的名称(必需)和一个标签列表(可选),以便只有具有标签的用户才能使用放置目标(例如,用户 info 中的placement_tags
字段)。 -
default_placement
:对象索引和对象数据的默认放置目标。默认设置为default-placement
。您还可以在用户信息中为每个用户设置默认放置位置。
要设置区组,创建一个由所需字段组成的 JSON 对象,将对象保存到文件中,如 zonegroup.json
; 然后运行以下命令:
示例
[ceph: root@host01 /]# radosgw-admin zonegroup set --infile zonegroup.json
其中 zonegroup.json
是您创建的 JSON 文件。
默认
zone group is_master
默认设置为 true
。如果您创建新 zone group 并希望使其成为 master zone group,您必须将 default
zone group is_master
设置设置为 false
,或删除 default
zone group。
最后,更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.2.10. 设置区组映射
设置 zone group map 包括创建一个由一个或多个 zone group 组成的 JSON 对象,并为集群设置 master_zonegroup
。zone group map 中的每个 zone group 由一个键/值对组成,其中 键
设置等同于单个 zone group 配置的 name
设置,而 val
则是由单个 zone group 配置组成的 JSON 对象。
您只能有一个 zone group is_master
等于 true
,它必须指定为 zone group map 末尾的 master_zonegroup
。以下 JSON 对象是默认 zone group map 的示例:
{ "zonegroups": [ { "key": "90b28698-e7c3-462c-a42d-4aa780d24eda", "val": { "id": "90b28698-e7c3-462c-a42d-4aa780d24eda", "name": "us", "api_name": "us", "is_master": "true", "endpoints": [ "http:\/\/rgw1:80" ], "hostnames": [], "hostnames_s3website": [], "master_zone": "9248cab2-afe7-43d8-a661-a40bf316665e", "zones": [ { "id": "9248cab2-afe7-43d8-a661-a40bf316665e", "name": "us-east", "endpoints": [ "http:\/\/rgw1" ], "log_meta": "true", "log_data": "true", "bucket_index_max_shards": 11, "read_only": "false" }, { "id": "d1024e59-7d28-49d1-8222-af101965a939", "name": "us-west", "endpoints": [ "http:\/\/rgw2:80" ], "log_meta": "false", "log_data": "true", "bucket_index_max_shards": 11, "read_only": "false" } ], "placement_targets": [ { "name": "default-placement", "tags": [] } ], "default_placement": "default-placement", "realm_id": "ae031368-8715-4e27-9a99-0c9468852cfe" } } ], "master_zonegroup": "90b28698-e7c3-462c-a42d-4aa780d24eda", "bucket_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 }, "user_quota": { "enabled": false, "max_size_kb": -1, "max_objects": -1 } }
要设置区组映射,请运行以下命令:
示例
[ceph: root@host01 /]# radosgw-admin zonegroup-map set --infile zonegroupmap.json
其中 zonegroupmap.json
是您创建的 JSON 文件。确保为 zone group map 中指定的区域创建了区域。最后,更新周期。
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.3. Zones
Ceph 对象网关支持区域的概念。zone 定义由一个或多个 Ceph 对象网关实例组成的逻辑组。
配置区域与典型配置过程有所不同,因为并非所有设置都最终在 Ceph 配置文件中。您可以列出区域、获取区配置和设置区配置。
所有 radosgw-admin zone
操作需要在 zone 中运行的主机上执行。
5.9.3.1. 创建区域
要创建区域,请指定区域名称。如果是一个 master 区域,指定 --master
选项。zone group 中只有一个 zone 可以是 master zone。要将区域添加到 zonegroup,请使用 zonegroup 名称指定 --rgw-zonegroup
选项。
必须在位于 区域内的 Ceph 对象网关节点上创建区域。
如果数据和元数据存储在
和 default
.rgw.datadefault.rgw.index
池中,则不要使用-default 标志创建区域。如果将新区域设置为默认值,并且这些池包含重要数据,radosgw-admin
实用程序可能无法正确管理此数据。
仅在需要时使用-- default
标志,将区域指定为默认值,如果您不需要在 default.rgw
池中现有的数据或元数据。如果需要现有数据或元数据,可以将默认配置迁移到多站点或区域设置,或者避免将新区域设置为默认值。有关迁移到多站点的更多信息,请参阅将单个站点系统迁移到多站点。通过指定 默认
,使用每个 radosgw-admin
调用隐式调用区域,unless --rgw-zone
和 zone 名称被明确提供。
流程
创建区域。
语法
radosgw-admin zone create --rgw-zone=ZONE_NAME \ [--zonegroup=ZONE_GROUP_NAME]\ [--endpoints=ENDPOINT_PORT [,<endpoint:port>] \ [--master] [--default] \ --access-key ACCESS_KEY --secret SECRET_KEY
提交更改。
语法
radosgw-admin period update --commit
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.3.2. 删除区
要删除某个区域,请先将其从 zonegroup 中删除。
流程
从 zonegroup 中删除区:
语法
radosgw-admin zonegroup remove --rgw-zonegroup=ZONE_GROUP_NAME\ --rgw-zone=ZONE_NAME
更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
删除区:
重要此过程 必须在区域内的主机上使用。
语法
radosgw-admin zone delete --rgw-zone=ZONE_NAME
更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
重要不要先从 zone group 中删除区域。否则,更新周期将失败。
如果已删除区域的池不会在其他任何位置使用,请考虑删除池。将以下示例中的 DELETED_ZONE_NAME
替换为已删除区的名称。
当 Ceph 删除 zone 池后,它会以无法恢复的方式删除其中的所有数据。仅当 Ceph 客户端不再需要池内容时,仅删除 zone 池。
在多域集群中,删除 .rgw.root
池以及 zone 池将移除群集的所有域信息。在删除 .rgw.root
池之前,确保. rgw.root
不包含其他活动域。
语法
ceph osd pool delete DELETED_ZONE_NAME.rgw.control DELETED_ZONE_NAME.rgw.control --yes-i-really-really-mean-it ceph osd pool delete DELETED_ZONE_NAME.rgw.data.root DELETED_ZONE_NAME.rgw.data.root --yes-i-really-really-mean-it ceph osd pool delete DELETED_ZONE_NAME.rgw.log DELETED_ZONE_NAME.rgw.log --yes-i-really-really-mean-it ceph osd pool delete DELETED_ZONE_NAME.rgw.users.uid DELETED_ZONE_NAME.rgw.users.uid --yes-i-really-really-mean-it
删除池后,重新启动 RGW 流程。
5.9.3.3. 修改区域
若要修改区域,请指定区域名称和您要修改的参数。
应在位于 区域内的 Ceph 对象网关节点上修改区域。
语法
radosgw-admin zone modify [options]--access-key=<key>
--secret/--secret-key=<key>
--master
--default
--endpoints=<list>
然后,更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.3.4. 列出区域
以 root
用户身份列出集群中的区,请运行以下命令:
示例
[ceph: root@host01 /]# radosgw-admin zone list
5.9.3.5. 获取区域
以 root
用户身份获取区配置,请运行以下命令:
语法
radosgw-admin zone get [--rgw-zone=ZONE_NAME]
default
区类似如下:
{ "domain_root": ".rgw", "control_pool": ".rgw.control", "gc_pool": ".rgw.gc", "log_pool": ".log", "intent_log_pool": ".intent-log", "usage_log_pool": ".usage", "user_keys_pool": ".users", "user_email_pool": ".users.email", "user_swift_pool": ".users.swift", "user_uid_pool": ".users.uid", "system_key": { "access_key": "", "secret_key": ""}, "placement_pools": [ { "key": "default-placement", "val": { "index_pool": ".rgw.buckets.index", "data_pool": ".rgw.buckets"} } ] }
5.9.3.6. 设置区域
配置区域涉及指定一系列 Ceph 对象网关池。为保持一致性,我们建议使用与区域名称相同的池前缀。有关配置 池的详细信息,请参阅 Red Hat Ceph Storage 策略指南中的 池章节。
应在位于 区域内的 Ceph 对象网关节点上设置区域。
要设置区,创建一个由池组成的 JSON 对象,将对象保存到文件中,如 zone.json
; 然后运行以下命令,将 ZONE_NAME
替换为区的名称:
示例
[ceph: root@host01 /]# radosgw-admin zone set --rgw-zone=test-zone --infile zone.json
其中 zone.json
是您创建的 JSON 文件。
然后,以 root
用户身份更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
5.9.3.7. 重命名区域
要重命名区域,请指定区域名称和新区域名称。在区中的主机上运行以下命令:
语法
radosgw-admin zone rename --rgw-zone=ZONE_NAME --zone-new-name=NEW_ZONE_NAME
然后,更新周期:
示例
[ceph: root@host01 /]# radosgw-admin period update --commit