注意

本文档适用于 Ceph 的开发版本。

多站点

单区域配置和多站点配置

单区域配置

单区域配置通常由两部分组成

  1. 一个“区域组”(zonegroup),其中包含一个区域(zone)。

  2. 一个或多个 ceph-radosgw 实例,在它们之间进行 ceph-radosgw 客户端请求的负载均衡。

在典型的单区域配置中,有多个 ceph-radosgw 实例使用一个 Ceph 存储集群。

多站点配置的类型

版本 Jewel 新增。

自 Kraken 版本以来,Ceph 对象网关支持多种多站点配置

  • 多区域: “多区域”配置具有复杂的拓扑结构。多区域配置包含一个区域组和多个区域。每个区域包含一个或多个 ceph-radosgw 实例。 每个区域都由其自己的 Ceph 存储集群支持。

    给定区域组中存在多个区域,可在其中一个区域发生重大故障时为该区域组提供灾难恢复。每个区域都是活动的,并且可以接收写入操作。包含多个活动区域的多区域配置增强了灾难恢复能力,并可用作内容分发网络的基础。

  • 多区域组: Ceph 对象网关支持多个区域组(以前称为“区域”)。每个区域组包含一个或多个区域。如果两个区域位于同一区域组中,并且该区域组位于与第二个区域组相同的领域中,则存储在这两个区域中的对象共享一个全局对象命名空间。此全局对象命名空间确保跨区域组和区域的对象 ID 唯一性。

    每个桶都由创建它的区域组拥有(除非被桶创建时的 LocationConstraint 覆盖),其对象数据只会复制到该区域组中的其他区域。发送到其他区域组的任何对该桶数据的请求都将重定向到桶所在的区域组。

    当你希望在许多区域之间共享用户和桶的命名空间,并将对象数据隔离到这些区域的子集时,创建多个区域组可能会很有用。也许你有几个共享存储但只需要单个备份以进行灾难恢复的连接站点。在这种情况下,你可以创建几个区域组,每个区域组只有两个区域,以避免将所有对象复制到所有区域。

    在其他情况下,你可能希望将数据隔离在单独的领域中,每个领域有一个区域组。区域组通过使数据和元数据的隔离能够单独控制而提供了灵活性。

  • 多个领域: 自 Kraken 版本以来,Ceph 对象网关支持“领域”,它是区域组的容器。领域使得设置适用于多个区域组的策略成为可能。领域具有全局唯一的命名空间,可以包含单个区域组或多个区域组。如果你选择使用多个领域,你可以定义多个命名空间和多个配置(这意味着每个领域可以拥有一个独立于其他领域配置的配置)。

图表 - 区域之间的对象数据复制

区域组内区域之间的对象数据复制如下图所示

../../_images/zone-sync.svg

在该图的顶部,我们看到两个应用程序(也称为“客户端”)。右侧的应用程序通过 RADOS 网关 (RGW) 向 Ceph 集群写入和读取数据。左侧的应用程序仅通过 RADOS 网关实例从 Ceph 集群读取数据。在这两种情况下(读写和只读),数据传输都以 RESTful 方式处理。

在该图的中间,我们看到两个区域,每个区域包含一个 RADOS 网关实例。这些 RADOS 网关实例处理数据从应用程序到区域组的移动。从主区域 (US-EAST) 到辅助区域 (US-WEST) 的箭头表示数据同步操作。

在该图的底部,我们看到数据分布到 Ceph 存储集群中。

有关设置集群的更多详细信息,请参阅 用于生产的 Ceph 对象网关

Infernalis 版本以来的功能变化

从 Kraken 版本开始,每个 Ceph 对象网关都可以配置为在主动-主动区域模式下工作。这使得可以写入非主区域。

多站点配置存储在一个名为“领域”的容器中。领域存储区域组、区域和具有多个纪元的时间“周期”(纪元用于跟踪配置更改)。

从 Kraken 版本开始,ceph-radosgw 守护程序处理跨区域的数据同步,这消除了对单独同步代理的需求。这种新的同步方法允许 Ceph 对象网关以“主动-主动”配置而不是“主动-被动”配置运行。

要求和假设

多站点配置至少需要两个 Ceph 存储集群。多站点配置必须至少有两个 Ceph 对象网关实例(每个 Ceph 存储集群一个)。

本指南假设至少两个 Ceph 存储集群位于地理位置上分开的位置;但是,配置可以在同一站点上工作。本指南还假设有两个 Ceph 对象网关服务器,名为 rgw1rgw2

重要

不建议运行单个地理分布的 Ceph 存储集群,除非你有低延迟的广域网连接。

多站点配置需要一个主区域组和一个主区域。每个区域组需要一个主区域。区域组可能有一个或多个辅助区域或非主区域。

在本指南中,rgw1 主机将作为主区域组的主区域;rgw2 主机将作为主区域组的辅助区域。

有关为 Ceph 对象存储创建和调整存储池的说明,请参阅 存储池

有关定义精细桶同步策略规则的说明,请参阅 同步策略配置

配置主区域

多站点配置中的所有网关都从位于主区域组和主区域内主机上的 ceph-radosgw 守护程序检索其配置。要以多站点配置配置网关,请选择一个 ceph-radosgw 实例来配置主区域组和主区域。

创建领域

领域包含区域组和区域的多站点配置。领域在自身内部强制执行全局唯一的命名空间。

  1. 通过在将作为主区域组和区域的主机上打开命令行界面,为多站点配置创建一个新领域。然后运行以下命令

    radosgw-admin realm create --rgw-realm={realm-name} [--default]
    

    例如

    radosgw-admin realm create --rgw-realm=movies --default
    

    注意

    如果你打算集群只有一个领域,请指定 --default 标志。

    如果指定了 --default,则 radosgw-admin 默认使用此领域。

    如果未指定 --default,则在添加区域组和区域时,你必须指定 --rgw-realm 标志或 --realm-id 标志来标识领域。

  2. 创建领域后,radosgw-admin 会回显领域配置。例如

    {
        "id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62",
        "name": "movies",
        "current_period": "1950b710-3e63-4c41-a19e-46a715000980",
        "epoch": 1
    }
    

    注意

    Ceph 为领域生成一个唯一的 ID,如果需要,可以使用该 ID 重命名领域。

创建主区域组

一个领域必须至少有一个区域组作为该领域的主区域组。

  1. 要为多站点配置创建一个新的主区域组,请在主区域组和区域中的主机上打开命令行界面。然后运行以下命令

    radosgw-admin zonegroup create --rgw-zonegroup={name} --endpoints={url} [--rgw-realm={realm-name}|--realm-id={realm-id}] --master --default
    

    例如

    radosgw-admin zonegroup create --rgw-zonegroup=us --endpoints=http://rgw1:80 --rgw-realm=movies --master --default
    

    注意

    如果领域只有一个区域组,请指定 --default 标志。

    如果指定了 --default,则 radosgw-admin 在添加新区域时默认使用此区域组。

    如果未指定 --default,则在添加或修改区域时,你必须使用 --rgw-zonegroup 标志或 --zonegroup-id 标志来标识区域组。

  2. 创建主区域组后,radosgw-admin 会回显区域组配置。例如

    {
        "id": "f1a233f5-c354-4107-b36c-df66126475a6",
        "name": "us",
        "api_name": "us",
        "is_master": "true",
        "endpoints": [
            "http:\/\/rgw1:80"
        ],
        "hostnames": [],
        "hostnames_s3website": [],
        "master_zone": "",
        "zones": [],
        "placement_targets": [],
        "default_placement": "",
        "realm_id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62"
    }
    

创建主区域

重要

必须在将位于区域内的 Ceph 对象网关节点上创建区域。

通过在作为主区域组和区域的主机上打开命令行界面,为多站点配置创建一个新的主区域。然后运行以下命令

radosgw-admin zone create --rgw-zonegroup={zone-group-name} \
                            --rgw-zone={zone-name} \
                            --master --default \
                            --endpoints={http://fqdn}[,{http://fqdn}]

例如

radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-east \
                            --master --default \
                            --endpoints={http://fqdn}[,{http://fqdn}]

注意

未指定 --access-key--secret。这些设置将在下一节创建用户后添加到区域中。

重要

以下步骤假设多站点配置使用尚未存储数据的新安装系统。如果你已经在使用 default 区域来存储数据,则不要删除 default 区域及其存储池,否则数据将被删除且无法恢复。

删除默认区域组和区域

  1. 如果 default 区域存在,请将其删除。首先将其从默认区域组中删除。

    radosgw-admin zonegroup delete --rgw-zonegroup=default --rgw-zone=default
    radosgw-admin period update --commit
    radosgw-admin zone delete --rgw-zone=default
    radosgw-admin period update --commit
    radosgw-admin zonegroup delete --rgw-zonegroup=default
    radosgw-admin period update --commit
    
  2. 如果 Ceph 存储集群中的 default 存储池存在,请将其删除。

    重要

    以下步骤假设多站点配置使用新安装的存储池(共同构成一个区域)且未存储数据。如果你已经在使用 default 存储池来存储数据,则不要删除它们。

    ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
    ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
    ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
    ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
    ceph osd pool rm default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it
    

创建系统用户

  1. ceph-radosgw 守护程序必须在拉取领域和周期信息之前进行身份验证。在主区域中,创建一个“系统用户”以方便守护程序之间的身份验证。

    radosgw-admin user create --uid="{user-name}" --display-name="{Display Name}" --system
    

    例如

    radosgw-admin user create --uid="synchronization-user" --display-name="Synchronization User" --system
    
  2. 记下 access_keysecret_key。辅助区域需要它们来针对主区域进行身份验证。

  3. 将系统用户添加到主区域

    radosgw-admin zone modify --rgw-zone={zone-name} --access-key={access-key} --secret={secret}
    radosgw-admin period update --commit
    

更新周期

更新主区域配置后,请更新周期。

radosgw-admin period update --commit

注意

更新周期会更改纪元,并确保其他区域将接收更新的配置。

更新 Ceph 配置文件

通过将 rgw_zone 配置选项和主区域的名称添加到实例条目中,更新主区域主机上的 Ceph 配置文件。

[client.rgw.{instance-name}]
...
rgw_zone={zone-name}

例如

[client.rgw.rgw1]
host = rgw1
rgw frontends = "civetweb port=80"
rgw_zone=us-east

启动网关

在对象网关主机上,启动并启用 Ceph 对象网关服务

systemctl start ceph-radosgw@rgw.`hostname -s`
systemctl enable ceph-radosgw@rgw.`hostname -s`

配置辅助区域

区域组内的区域会复制所有数据,以确保每个区域都具有相同的数据。创建辅助区域时,请在标识为辅助区域的主机上运行以下操作。

注意

要添加第二个辅助区域(即,在已包含一个辅助区域的区域组中添加第二个非主区域),请遵循添加辅助区域所使用的相同过程。请务必指定一个与第一个辅助区域名称不同的区域名称。

重要

元数据操作(例如,用户创建)必须在主区域内的主机上运行。桶操作可以由主区域或辅助区域接收,但辅助区域会将桶操作重定向到主区域。如果主区域关闭,桶操作将失败。

拉取领域配置

主区域组中主区域的 URL 路径、访问密钥和密钥用于将领域配置拉取到主机。拉取非默认领域配置时,请使用 --rgw-realm--realm-id 配置选项指定领域。

radosgw-admin realm pull --url={url-to-master-zone-gateway} \
                           --access-key={access-key} --secret={secret}

注意

拉取领域配置还会检索远程当前的周期配置,并使其也成为此主机上的当前周期。

如果此领域是唯一的领域,请运行以下命令使其成为默认领域

radosgw-admin realm default --rgw-realm={realm-name}

创建辅助区域

重要

创建区域时,它必须位于区域内的 Ceph 对象网关节点上。

要为多站点配置创建辅助区域,请在标识为辅助区域的主机上打开命令行界面。指定区域组 ID、新区域名称和区域的端点。 不要使用 --master--default 标志。从 Kraken 开始,所有区域默认以主动-主动配置运行,这意味着网关客户端可以将数据写入任何区域,并且该区域会将数据复制到区域组中的所有其他区域。如果你想防止辅助区域接受写入操作,请在命令中包含 --read-only 标志,以便在主区域和辅助区域之间创建主动-被动配置。在任何情况下,都不要忘记提供存储在主区域组的主区域中的生成的系统用户的 access_keysecret_key。运行以下命令

radosgw-admin zone create --rgw-zonegroup={zone-group-name} \
                            --rgw-zone={zone-name} \
                            --access-key={system-key} --secret={secret} \
                            --endpoints=http://{fqdn}:80 \
                            [--read-only]

例如

radosgw-admin zone create --rgw-zonegroup=us --rgw-zone=us-west \
                            --access-key={system-key} --secret={secret} \
                            --endpoints=http://rgw2:80

重要

以下步骤假设多站点配置使用尚未开始存储数据的新安装系统。 如果你已经在使用 default 区域或其存储池来存储数据,则不要删除它们,否则数据将不可恢复地丢失。

如果需要,删除默认区域

radosgw-admin zone delete --rgw-zone=default

最后,如果需要,删除 Ceph 存储集群中的默认存储池

ceph osd pool rm default.rgw.control default.rgw.control --yes-i-really-really-mean-it
ceph osd pool rm default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
ceph osd pool rm default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
ceph osd pool rm default.rgw.log default.rgw.log --yes-i-really-really-mean-it
ceph osd pool rm default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it

更新 Ceph 配置文件

要更新辅助区域主机上的 Ceph 配置文件,请将 rgw_zone 配置选项和辅助区域的名称添加到实例条目中。

[client.rgw.{instance-name}]
...
rgw_zone={zone-name}

例如

[client.rgw.rgw2]
host = rgw2
rgw frontends = "civetweb port=80"
rgw_zone=us-west

更新周期

更新辅助区域配置后,请更新周期

radosgw-admin period update --commit

注意

更新周期会更改纪元,并确保其他区域将接收更新的配置。

启动网关

要启动网关,请通过在对象网关主机上运行以下命令来启动并启用 Ceph 对象网关服务

systemctl start ceph-radosgw@rgw.`hostname -s`
systemctl enable ceph-radosgw@rgw.`hostname -s`

如果使用 cephadm 命令部署了集群,你将无法使用 systemctl 来启动网关,因为不存在 systemctl 可以操作的服务。这是由于 cephadm 部署的 Ceph 集群的容器化性质所致。如果你使用了 cephadm 命令并且拥有一个容器化集群,则必须运行以下形式的命令来启动网关

ceph orch apply rgw <name> --realm=<realm> --zone=<zone> --placement --port

检查同步状态

辅助区域启动并运行后,你可以检查同步状态。同步过程会将主区域中创建的用户和桶从主区域复制到辅助区域。

radosgw-admin sync status

输出报告同步操作的状态。例如

realm f3239bc5-e1a8-4206-a81d-e1576480804d (earth)
    zonegroup c50dbb7e-d9ce-47cc-a8bb-97d9b399d388 (us)
         zone 4c453b70-4a16-4ce8-8185-1893b05d346e (us-west)
metadata sync syncing
              full sync: 0/64 shards
              metadata is caught up with master
              incremental sync: 64/64 shards
    data sync source: 1ee9da3e-114d-4ae3-a8a4-056e8a17f532 (us-east)
                      syncing
                      full sync: 0/128 shards
                      incremental sync: 128/128 shards
                      data is caught up with source

注意

辅助区域接受桶操作;但是,辅助区域会将桶操作重定向到主区域,然后与主区域同步以接收桶操作的结果。如果主区域关闭,在辅助区域上执行的桶操作将失败,但对象操作应会成功。

验证对象

默认情况下,对象成功同步后不会进行后续的对象验证。但是,你可以通过将 rgw_sync_obj_etag_verify 设置为 true 来启用验证。将此值设置为 true 后,将使用 MD5 校验和来验证从源传输到目的地的数据的完整性。这确保了从远程服务器通过 HTTP 获取的任何对象(包括多站点同步)的完整性。此选项可能会降低 RGW 的性能,因为它需要更多的计算。

维护

检查同步状态

可以使用以下命令查询区域的复制状态

radosgw-admin sync status
    realm b3bc1c37-9c44-4b89-a03b-04c269bea5da (earth)
zonegroup f54f9b22-b4b6-4a0e-9211-fa6ac1693f49 (us)
     zone adce11c9-b8ed-4a90-8bc5-3fc029ff0816 (us-2)
    metadata sync syncing
          full sync: 0/64 shards
          incremental sync: 64/64 shards
          metadata is behind on 1 shards
          oldest incremental change not applied: 2017-03-22 10:20:00.0.881361s
data sync source: 341c2d81-4574-4d08-ab0f-5a2a7b168028 (us-1)
                  syncing
                  full sync: 0/128 shards
                  incremental sync: 128/128 shards
                  data is caught up with source
          source: 3b5d1a3f-3f27-4e4a-8f34-6072d4bb1275 (us-3)
                  syncing
                  full sync: 0/128 shards
                  incremental sync: 128/128 shards
                  data is caught up with source

输出可能因同步状态而异。同步期间,分片分为两种类型

  • 落后分片是需要数据同步(完全数据同步或增量数据同步)才能更新的分片。

  • 恢复分片是同步期间遇到错误并被标记为重试的分片。错误通常发生在诸如获取桶锁之类的小问题上。此类错误通常会自行解决。

检查日志

仅对于多站点部署,你可以检查元数据日志 (mdlog)、桶索引日志 (bilog) 和数据日志 (datalog)。你可以列出它们也可以修剪它们。在大多数情况下不需要修剪,因为 rgw_sync_log_trim_interval 默认设置为 20 分钟。除非手动将 rgw_sync_log_trim_interval 设置为 0,否则不应该需要修剪日志。

更改元数据主区域

重要

通过将某个区域提升为主区域来更改元数据主区域时必须小心。如果一个区域在完成从当前主区域同步元数据之前被提升为主区域,它将无法提供任何剩余的条目,并且这些元数据更改将丢失。因此,我们建议等待区域的 radosgw-admin sync status 完成同步元数据的过程,然后再将该区域提升为主区域。

同样,如果当前主区域在另一个区域被提升为主区域的同时正在处理元数据更改,这些更改很可能会丢失。为避免丢失这些更改,我们建议关闭前主区域上的所有 radosgw 实例。新主区域被提升后,可以使用 radosgw-admin period pull 获取前主区域的新周期,然后可以重新启动网关。

要将区域提升为元数据主区域,请在该区域上运行以下命令(在此示例中,该区域是区域组 us 中的区域 us-2

radosgw-admin zone modify --rgw-zone=us-2 --master
radosgw-admin zonegroup modify --rgw-zonegroup=us --master
radosgw-admin period update --commit

这将生成一个新周期,区域 us-2 中的 radosgw 实例将此周期发送给其他区域。

故障转移和灾难恢复

设置故障转移到辅助区域

如果主区域发生故障,你可以按照以下步骤故障转移到辅助区域进行灾难恢复

  1. 使辅助区域成为主区域和默认区域。例如

    radosgw-admin zone modify --rgw-zone={zone-name} --master --default
    

    默认情况下,Ceph 对象网关以主动-主动配置运行。但是,如果集群配置为以主动-被动配置运行,则辅助区域是只读区域。要允许辅助区域接收写入操作,请删除其 --read-only 状态。例如

    radosgw-admin zone modify --rgw-zone={zone-name} --master --default \
                                --read-only=false
    
  2. 更新周期以使更改生效。

    radosgw-admin period update --commit
    
  3. 最后,重新启动 Ceph 对象网关。

    systemctl restart ceph-radosgw@rgw.`hostname -s`
    

从故障转移恢复

如果前主区域恢复,你可以按照以下步骤恢复故障转移操作

  1. 在恢复的区域中,从当前主区域拉取最新的领域配置

    radosgw-admin realm pull --url={url-to-master-zone-gateway} \
                               --access-key={access-key} --secret={secret}
    
  2. 使恢复的区域成为主区域和默认区域

    radosgw-admin zone modify --rgw-zone={zone-name} --master --default
    
  3. 更新周期以使更改生效

    radosgw-admin period update --commit
    
  4. 重新启动恢复区域中的 Ceph 对象网关

    systemctl restart ceph-radosgw@rgw.`hostname -s`
    
  5. 如果辅助区域需要配置为只读,请更新辅助区域

    radosgw-admin zone modify --rgw-zone={zone-name} --read-only
    
  6. 更新周期以使更改生效

    radosgw-admin period update --commit
    
  7. 重新启动辅助区域中的 Ceph 对象网关

    systemctl restart ceph-radosgw@rgw.`hostname -s`
    

将单站点部署迁移到多站点

要将具有 default 区域组和区域的单站点部署迁移到多站点系统,请按照以下步骤操作

  1. 创建领域。将 <name> 替换为领域名称

    radosgw-admin realm create --rgw-realm=<name> --default
    
  2. 重命名默认区域组和区域。将 <name> 替换为区域名称或区域组名称

    radosgw-admin zonegroup rename --rgw-zonegroup default --zonegroup-new-name=<name>
    radosgw-admin zone rename --rgw-zone default --zone-new-name us-east-1 --rgw-zonegroup=<name>
    
  3. 重命名默认区域组的 api_name。将 <name> 替换为区域组名称

    radosgw-admin zonegroup modify --api-name=<name> --rgw-zonegroup=<name>
    
  4. 配置主区域组。将 <name> 替换为领域名称或区域组名称。将 <fqdn> 替换为区域组中的完全限定域名

    radosgw-admin zonegroup modify --rgw-realm=<name> --rgw-zonegroup=<name> --endpoints http://<fqdn>:80 --master --default
    
  5. 配置主区域。将 <name> 替换为领域名称、区域名称或区域组名称。将 <fqdn> 替换为区域组中的完全限定域名

    radosgw-admin zone modify --rgw-realm=<name> --rgw-zonegroup=<name> \
                                --rgw-zone=<name> --endpoints http://<fqdn>:80 \
                                --access-key=<access-key> --secret=<secret-key> \
                                --master --default
    
  6. 创建系统用户。将 <user-id> 替换为用户名。将 <display-name> 替换为显示名称。显示名称允许包含空格

    radosgw-admin user create --uid=<user-id> \
                                --display-name="<display-name>" \
                                --access-key=<access-key> \
                                --secret=<secret-key> --system
    
  7. 提交更新的配置

    radosgw-admin period update --commit
    
  8. 重新启动 Ceph 对象网关

    systemctl restart ceph-radosgw@rgw.`hostname -s`
    

完成此过程后,继续执行 配置辅助区域 并在主区域组中创建辅助区域。

多站点配置参考

以下部分提供了有关领域、周期、区域组和区域的更多详细信息和命令行用法。

有关每个可用配置选项的更多详细信息,请参阅 src/common/options/rgw.yaml.in

或者,转到 Ceph 仪表板 配置页面(在 集群 下找到),你可以在其中查看和设置所有选项。在该页面上,将级别设置为 advanced 并搜索 RGW 以查看所有基本和高级配置选项。

领域

领域是全局唯一的命名空间,由一个或多个区域组组成。区域组包含一个或多个区域。区域包含桶。桶包含对象。

领域使得 Ceph 对象网关能够在同一硬件上支持多个命名空间及其配置。

每个领域都与一个“周期”相关联。周期表示区域组和区域配置在时间上的状态。每次更改区域组或区域时,都应更新并提交周期。

为确保与 Infernalis 及更早版本向后兼容,Ceph 对象网关默认不创建领域。但是,作为最佳实践,我们建议你在创建新集群时创建领域。

创建领域

要创建领域,请运行 realm create 并指定领域名称。如果领域是默认领域,请指定 --default

radosgw-admin realm create --rgw-realm={realm-name} [--default]

例如

radosgw-admin realm create --rgw-realm=movies --default

通过指定 --default,除非明确提供 --rgw-realm 和领域名称,否则每个 radosgw-admin 调用都会隐式调用该领域。

将领域设置为默认值

领域列表中的一个领域应该是默认领域。只能有一个默认领域。如果只有一个领域且创建时未指定为默认领域,请将其设置为默认领域。或者,要更改哪个领域是默认领域,请运行以下命令

radosgw-admin realm default --rgw-realm=movies

注意

当领域是默认领域时,命令行假定 --rgw-realm=<realm-name> 作为参数。

删除领域

要删除领域,请运行 realm rm 并指定领域名称

radosgw-admin realm rm --rgw-realm={realm-name}

例如

radosgw-admin realm rm --rgw-realm=movies

获取领域

要获取领域,请运行 realm get 并指定领域名称

radosgw-admin realm get --rgw-realm=<name>

例如

radosgw-admin realm get --rgw-realm=movies [> filename.json]
{
    "id": "0a68d52e-a19c-4e8e-b012-a8f831cb3ebc",
    "name": "movies",
    "current_period": "b0c5bbef-4337-4edd-8184-5aeab2ec413b",
    "epoch": 1
}

设置领域

要设置领域,请运行 realm set,指定领域名称,并使用 --infile= 选项(确保 --infile 选项具有输入文件名作为参数)

radosgw-admin realm set --rgw-realm=<name> --infile=<infilename>

例如

radosgw-admin realm set --rgw-realm=movies --infile=filename.json

列出领域

要列出领域,请运行 realm list

radosgw-admin realm list

列出领域周期

要列出领域周期,请运行 realm list-periods

radosgw-admin realm list-periods

拉取领域

要将领域从包含主区域组和主区域的节点拉取到包含辅助区域组或区域的节点,请在将接收领域配置的节点上运行 realm pull

radosgw-admin realm pull --url={url-to-master-zone-gateway} --access-key={access-key} --secret={secret}

重命名领域

领域不是周期的一部分。因此,对领域的任何重命名仅在本地应用,因此当你运行 realm pull 时不会被拉取。如果你要重命名包含多个区域的领域,请在每个区域上运行 rename 命令。

要重命名领域,请运行以下命令

radosgw-admin realm rename --rgw-realm=<current-name> --realm-new-name=<new-realm-name>

注意

不要使用 realm set 来更改 name 参数。这样做只会更改内部名称。如果你使用 realm set 更改 name 参数,则 --rgw-realm 仍需要领域的旧名称。

区域组

区域组使得 Ceph 对象网关能够支持多站点部署和全局命名空间。区域组以前被称为“区域”(在 Infernalis 及更早版本中)。

区域组定义了一个或多个区域内的一个或多个 Ceph 对象网关实例的地理位置。

区域组的配置不同于典型的配置过程,因为并非所有区域组配置设置都存储在配置文件中。

你可以列出区域组、获取区域组配置和设置区域组配置。

创建区域组

创建区域组包括指定区域组名称。除非使用选项 --rgw-realm=<realm-name> 指定不同的领域,否则新创建的区域将位于默认领域中。

如果区域组是默认区域组,请指定 --default 标志。如果区域组是主区域组,请指定 --master 标志。例如

radosgw-admin zonegroup create --rgw-zonegroup=<name> [--rgw-realm=<name>][--master] [--default]

注意

使用 zonegroup modify --rgw-zonegroup=<zonegroup-name> 修改现有区域组的设置。

将区域组设置为默认值

区域组列表中的一个区域组必须是默认区域组。只能有一个默认区域组。如果只有一个区域组且创建时未指定为默认区域组,请使用以下命令将其设置为默认区域组。可以使用这种形式的命令更改哪个区域组是默认区域组。

  1. 将区域组指定为默认区域组

    radosgw-admin zonegroup default --rgw-zonegroup=comedy
    

    注意

    当区域组是默认区域组时,命令行假定区域组的名称将是 --rgw-zonegroup=<zonegroup-name> 选项的参数。(在此示例中,为了保持一致性和可读性,保留了 <zonegroup-name>。)

  2. 更新周期

    radosgw-admin period update --commit
    

将区域添加到区域组

此过程说明如何将区域添加到区域组。

  1. 运行以下命令将区域添加到区域组

    radosgw-admin zonegroup add --rgw-zonegroup=<name> --rgw-zone=<name>
    
  2. 更新周期

    radosgw-admin period update --commit
    

从区域组中删除区域

  1. 运行此命令从区域组中删除区域

    radosgw-admin zonegroup remove --rgw-zonegroup=<name> --rgw-zone=<name>
    
  2. 更新周期

    radosgw-admin period update --commit
    

重命名区域组

  1. 运行此命令重命名区域组

    radosgw-admin zonegroup rename --rgw-zonegroup=<name> --zonegroup-new-name=<name>
    
  2. 更新周期

    radosgw-admin period update --commit
    

删除区域组

  1. 要删除区域组,请运行以下命令

    radosgw-admin zonegroup delete --rgw-zonegroup=<name>
    
  2. 更新周期

    radosgw-admin period update --commit
    

列出区域组

Ceph 集群包含一个区域组列表。要列出区域组,请运行此命令

radosgw-admin zonegroup list

radosgw-admin 返回一个 JSON 格式的区域组列表。

{
    "default_info": "90b28698-e7c3-462c-a42d-4aa780d24eda",
    "zonegroups": [
        "us"
    ]
}

获取区域组映射

要列出每个区域组的详细信息,请运行此命令

radosgw-admin zonegroup-map get

注意

如果你收到 failed to read zonegroup map 错误,请先以 root 身份运行 radosgw-admin zonegroup-map update

获取区域组

要查看区域组的配置,请运行此命令

radosgw-admin zonegroup get [--rgw-zonegroup=<zonegroup>]

区域组配置如下所示

{
    "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": 0,
            "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": 0,
            "read_only": "false"
        }
    ],
    "placement_targets": [
        {
            "name": "default-placement",
            "tags": []
        }
    ],
    "default_placement": "default-placement",
    "realm_id": "ae031368-8715-4e27-9a99-0c9468852cfe"
}

设置区域组

定义区域组的过程包括创建 JSON 对象并指定所需的设置。以下是所需设置的列表

  1. name:区域组的名称。必需。

  2. api_name:区域组的 API 名称。可选。

  3. is_master:确定区域组是否为主区域组。必需。 注意: 你只能有一个主区域组。

  4. endpoints:区域组中所有端点的列表。例如,你可以使用多个域名来引用同一区域组。请记住转义正斜杠 (\/)。你还可以为每个端点指定一个端口 (fqdn:port)。可选。

  5. hostnames:区域组中所有主机名的列表。例如,你可以使用多个域名来引用同一区域组。可选。rgw dns name 设置将自动包含在此列表中。更改此设置后重新启动网关守护程序。

  6. master_zone:区域组的主区域。可选。如果未指定,则使用默认区域。 注意: 每个区域组只能有一个主区域。

  7. zones:区域组中所有区域的列表。每个区域都有一个名称(必需)、一个端点列表(可选)以及一个确定网关是否记录元数据和数据操作的设置(默认为 false)。

  8. placement_targets:放置目标的列表(可选)。每个放置目标包含一个名称(必需)和一个标签列表(可选),以便只有具有该标签的用户才能使用该放置目标(即,用户信息的 placement_tags 字段)。

  9. default_placement:对象索引和对象数据的默认放置目标。默认为 default-placement。也可以在每个用户的用户信息中设置每个用户的默认放置。

设置区域组 - 步骤

  1. 要设置区域组,请创建一个包含必需字段的 JSON 对象,将该对象保存到文件(例如,zonegroup.json),然后运行以下命令

    radosgw-admin zonegroup set --infile zonegroup.json
    

    其中 zonegroup.json 是你创建的 JSON 文件。

    重要

    默认区域组的 is_master 设置默认为 true。如果你创建了额外的区域组并希望将其设置为主区域组,则必须将 default 区域组的 is_master 设置为 false 或删除 default 区域组。

  2. 更新周期

    radosgw-admin period update --commit
    

设置区域组映射

设置区域组映射的过程包括 (1) 创建一个由一个或多个区域组组成的 JSON 对象,以及 (2) 设置集群的 master_zonegroup。区域组映射中的每个区域组都包含一个键/值对,其中 key 设置等于单个区域组配置的 name 设置,val 是由单个区域组配置组成的 JSON 对象。

你只能有一个 is_master 等于 true 的区域组,并且必须在区域组映射末尾将其指定为 master_zonegroup。以下 JSON 对象是默认区域组映射的示例

{
    "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": 0,
                        "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": 0,
                        "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
    }
}
  1. 要设置区域组映射,请运行以下命令

    radosgw-admin zonegroup-map set --infile zonegroupmap.json
    

    在此命令中,zonegroupmap.json 是你创建的 JSON 文件。确保已为区域组映射中指定的区域创建了区域。

  2. 更新周期

    radosgw-admin period update --commit
    

区域

区域定义了一个逻辑组,由一个或多个 Ceph 对象网关实例组成。给定区域中的所有 Ceph 对象网关都提供由存储在同一集群中同一组存储池中的 RADOS 对象支持的 S3 对象。Ceph 对象网关支持区域。

配置区域的过程与典型的配置过程不同,因为并非所有设置都最终存储在 Ceph 配置文件中。

可以列出区域。你可以“获取”区域配置并“设置”区域配置。

创建区域

要创建区域,请指定区域名称。如果你要创建主区域,请指定 --master 标志。一个区域组中只能有一个主区域。要将区域添加到区域组,请使用区域组名称指定 --rgw-zonegroup 选项。

radosgw-admin zone create --rgw-zone=<name> \
                            [--zonegroup=<zonegroup-name] \
                            [--endpoints=<endpoint>[,<endpoint>] \
                            [--master] [--default] \
                            --access-key $SYSTEM_ACCESS_KEY \
                            --secret $SYSTEM_SECRET_KEY

创建区域后,更新周期

radosgw-admin period update --commit

删除区域

要删除区域,请首先将其从区域组中删除

radosgw-admin zonegroup remove --zonegroup=<name> \
                                 --zone=<name>

然后,更新周期

radosgw-admin period update --commit

接下来,删除区域

radosgw-admin zone delete --rgw-zone<name>

最后,更新周期

radosgw-admin period update --commit

重要

不要在未先将其从区域组中删除的情况下删除区域。否则,更新周期将失败。

如果删除的区域的存储池不会在其他地方使用,请考虑删除存储池。将下面示例中的 <del-zone> 替换为已删除区域的名称。

重要

只删除带有前缀区域名称的存储池。删除根存储池(例如,.rgw.root)将删除所有系统配置。

重要

删除存储池后,其中的所有数据都将以不可恢复的方式删除。仅在不再需要存储池内容时才删除存储池。

ceph osd pool rm <del-zone>.rgw.control <del-zone>.rgw.control --yes-i-really-really-mean-it
ceph osd pool rm <del-zone>.rgw.meta <del-zone>.rgw.meta --yes-i-really-really-mean-it
ceph osd pool rm <del-zone>.rgw.log <del-zone>.rgw.log --yes-i-really-really-mean-it
ceph osd pool rm <del-zone>.rgw.otp <del-zone>.rgw.otp --yes-i-really-really-mean-it
ceph osd pool rm <del-zone>.rgw.buckets.index <del-zone>.rgw.buckets.index --yes-i-really-really-mean-it
ceph osd pool rm <del-zone>.rgw.buckets.non-ec <del-zone>.rgw.buckets.non-ec --yes-i-really-really-mean-it
ceph osd pool rm <del-zone>.rgw.buckets.data <del-zone>.rgw.buckets.data --yes-i-really-really-mean-it

修改区域

要修改区域,请指定区域名称和要修改的参数。

radosgw-admin zone modify [options]

其中 [options]

  • --access-key=<key>

  • --secret/--secret-key=<key>

  • --master

  • --default

  • --endpoints=<list>

然后,更新周期

radosgw-admin period update --commit

列出区域

作为 root,要列出集群中的区域,请运行以下命令

radosgw-admin zone list

获取区域

作为 root,要获取区域的配置,请运行以下命令

radosgw-admin zone get [--rgw-zone=<zone>]

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"}
      }
    ]
  }

设置区域

配置区域涉及指定一系列 Ceph 对象网关存储池。为了一致性,我们建议使用与区域名称相同的存储池前缀。有关配置存储池的详细信息,请参阅 存储池

要设置区域,请创建一个由存储池组成的 JSON 对象,将该对象保存到文件(例如,zone.json);然后,运行以下命令,将 {zone-name} 替换为区域名称

radosgw-admin zone set --rgw-zone={zone-name} --infile zone.json

其中 zone.json 是你创建的 JSON 文件。

然后,作为 root,更新周期

radosgw-admin period update --commit

重命名区域

要重命名区域,请指定区域名称和新区域名称。

radosgw-admin zone rename --rgw-zone=<name> --zone-new-name=<name>

然后,更新周期

radosgw-admin period update --commit

区域组和区域设置

配置默认区域组和区域时,存储池名称包括区域名称。例如

default.rgw.control

要更改默认值,请在每个 [client.radosgw.{instance-name}] 实例下的 Ceph 配置文件中包含以下设置。

名称

描述

类型

默认值

rgw_zone

网关实例的区域名称。

String

None

rgw_zonegroup

网关实例的区域组名称。

String

None

rgw_zonegroup_root_pool

区域组的根存储池。

String

.rgw.root

rgw_zone_root_pool

区域的根存储池。

String

.rgw.root

rgw_default_zone_group_info_oid

用于存储默认区域组的 OID。我们不建议更改此设置。

String

default.zonegroup

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入