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 来拉取。

重要

在重命名具有多个区域的域时,在每个区域上运行 命令。

流程

  1. 重命名域。

    语法

    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

  2. 提交更改。

    语法

    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.rgw.index 池中,则不要使用-default 标志创建 zone group。如果将一个新的 zone group 设置为默认值,并且这些池包含重要数据,radosgw-admin 实用程序可能无法正确管理此数据。

仅在需要时使用-- default 标志,将 zone group 指定为默认值,如果您不需要 default.rgw 池中的现有数据或元数据。如果需要现有数据或元数据,可以将默认配置迁移到多站点或 zone group 设置,或者避免将新 zone group 设置为默认值。有关迁移到多站点的更多信息,请参阅将单个站点系统迁移到多站点。通过指定 默认,使用每个 radosgw-admin 调用隐式调用 zone group,unless --rgw-zonegroup 和 zone group name 被明确提供。

流程

  1. 创建 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

  2. 可选:更改 zone group 设置。

    语法

    zonegroup modify --rgw-zonegroup=ZONE_GROUP_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin zonegroup modify --rgw-zonegroup=zonegroup1

  3. 可选:更改默认 zone group。

    语法

    radosgw-admin zonegroup default --rgw-zonegroup=ZONE_GROUP_NAME

    示例

    [ceph: root@host01 /]# radosgw-admin zonegroup default --rgw-zonegroup=zonegroup2

  4. 提交更改。

    语法

    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 对象,至少指定所需的设置:

  1. name :zone group 的名称。必需。
  2. api_name :zone group 的 API 名称。可选。
  3. is_master :确定 zone group 是 master zone group。必需。

    注意:您只能有一个 master zone group。

  4. endpoint :zone group 中所有端点的列表。例如,您可以使用多个域名来引用同一 zone group。请注意,需要使用正斜杠(\/)进行转意。您还可以为每个端点指定一个端口(fqdn:port)。可选。
  5. hostnames :zone group 中所有主机名的列表。例如,您可以使用多个域名来引用同一 zone group。可选。rgw dns name 设置将自动包含在此列表中。您应在更改此设置后重新启动网关守护进程。
  6. master_zone : zone group 的 master zone。可选。如果未指定,则使用默认区域。

    注意

    每个 zone group 只能有一个 master zone。

  7. zones:zone group 中所有 zone 的列表。每个区域都有一个名称(必需),一个端点列表(可选),以及网关是否记录元数据和数据操作(默认为false)。
  8. placement_targets :放置目标列表(可选)。每个放置目标都包含放置目标的名称(必需)和一个标签列表(可选),以便只有具有标签的用户才能使用放置目标(例如,用户 info 中的 placement_tags 字段)。
  9. 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 名称被明确提供。

流程

  1. 创建区域。

    语法

    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

  2. 提交更改。

    语法

    radosgw-admin period update --commit

    示例

    [ceph: root@host01 /]# radosgw-admin period update --commit

5.9.3.2. 删除区

要删除某个区域,请先将其从 zonegroup 中删除。

流程

  1. 从 zonegroup 中删除区:

    语法

    radosgw-admin zonegroup remove --rgw-zonegroup=ZONE_GROUP_NAME\
                                     --rgw-zone=ZONE_NAME

  2. 更新周期:

    示例

    [ceph: root@host01 /]# radosgw-admin period update --commit

  3. 删除区:

    重要

    此过程 必须在区域内的主机上使用。

    语法

    radosgw-admin zone delete --rgw-zone=ZONE_NAME

  4. 更新周期:

    示例

    [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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.