注意

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

多站点

单区配置和多站点配置

单区配置

单区配置通常由两件事组成:

  1. 一个“Zonegroup”,它包含一个区。

  2. One or more ceph-radosgw具有客户端请求负载均衡的实例。ceph-radosgw client requests load-balanced between them.

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

多站点配置类型

Jewel 版本中的新增功能。

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

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

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

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

    每个存储桶属于创建它的 Zonegroup(除非在创建存储桶时被 LocationConstraint 覆盖),并且它的对象数据只会复制到该 Zonegroup 中的其他区。发送到其他 Zonegroup 的该存储桶中的任何数据请求都会重定向到存储桶所在的 Zonegroup。LocationConstraint on bucket creation), and its object data will replicate only to other zones in that zonegroup. Any request for data in that bucket that is sent to other zonegroups will redirect to the zonegroup where the bucket resides.

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

    在其他情况下,您可能将数据隔离在不同的 Realm 中,每个 Realm 都有一个单个 Zonegroup。Zonegroup 通过允许单独控制数据和元数据的隔离性提供了灵活性。

  • 多 Realm:自 Kraken 版本以来,Ceph 对象网关支持“Realm”,它们是 Zonegroup 的容器。Realm 使应用适用于多个 Zonegroup 的策略成为可能。Realm 具有全局唯一的命名空间,可以包含单个 Zonegroup 或多个 Zonegroup。如果您选择使用多个 Realm,则可以定义多个命名空间和多个配置(这意味着每个 Realm 可以有自己的配置,与其他 Realm 的配置不同)。

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

Zonegroup 内部区间间对象数据的复制看起来像这样:

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

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

在此图表的中间,我们看到两个区,每个区都包含一个 RADOS Gateway 的实例。这些 RADOS Gateway 的实例负责将数据从应用程序传输到 Zonegroup。从主区(US-EAST)到次级区(US-WEST)的箭头表示数据同步的行为。

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

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

Infernalis 之后的变更

自 Kraken 开始,每个 Ceph 对象网关都可以配置为在 active-active 区模式下工作。这使得写入非主区成为可能。

多站点配置存储在一个称为“Realm”的容器中。Realm 存储了 Zonegroup、区以及一个具有多个纪元(这些(纪元)用于跟踪配置更改)的时间“period”。

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

要求和假设

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

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

重要

运行单个地理分布式 Ceph 存储集群

多站点配置需要一个主 Zonegroup 和一个主区。每个 Zonegroup 需要一个主区。Zonegroup 可能有零个或多个次级或非主区。

在本指南中,rgw1主机将作为主 Zonegroup 的主区;以及,该rgw2主机将作为主 Zonegroup 的次级区。

请参阅Poolsfor 创建和调整 Ceph 对象存储的池的说明。

请参阅Sync Policy Configfor 定义细粒度存储桶同步策略规则的说明。

配置主区

多站点配置中的所有网关都从位于主 Zonegroup 和主区主机上的一个守护进程检索其配置。要在多站点配置中配置您的网关,请选择一个ceph-radosgw daemon that is on a host within both the master zonegroup and the master zone. To configure your gateways in a multi-site configuration, choose a ceph-radosgw实例来配置主 Zonegroup 和主区。

创建一个 Realm

Realm 包含 Zonegroup 和区的多站点配置。Realm 在其内部执行全局唯一的命名空间。

  1. 通过在将要在主 Zonegroup 和区中发挥作用的主机上打开命令行界面来创建一个新的 Realm 用于多站点配置。然后运行以下命令:

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

    例如:

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

    Note

    如果您打算让集群只有一个 Realm,请指定--default标志指示 cephadm 移除主机以及 CRUSH 桶。

    如果--default和 the Realm nameradosgw-admin,则默认使用此 Realm。

    如果--default如果未指定,您必须指定 either the--rgw-realm标志或 the--realm-id标志来标识 Realm,当添加 Zonegroup 和区时。

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

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

    Note

    Ceph 为 Realm 生成一个唯一 ID,如果需要,可以使用它来重命名 Realm。

创建一个主 Zonegroup

Realm 必须至少有一个 Zonegroup,它作为 Realm 的主 Zonegroup。

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

    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
    

    Note

    如果 Realm 只有一个 Zonegroup,请指定 the--default标志指示 cephadm 移除主机以及 CRUSH 桶。

    如果--default和 the Realm nameradosgw-admin,则默认在添加新区时使用此 Zonegroup。

    如果--default如果未指定,您必须使用 either the--rgw-zonegroup标志或 the--zonegroup-id标志来标识 Zonegroup,当添加或修改区时。

  2. 创建主 Zonegroup 后,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"
    }
    

创建一个主 Zone

重要

区必须在 Ceph 对象网关节点上创建,该节点将位于该区中。

通过在将要在主 Zonegroup 和区中发挥作用的主机上打开命令行界面来创建一个新的主区用于多站点配置。然后运行以下命令:

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

Note

The --access-key--secretaren’t specified。这些

重要

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

删除默认 Zonegroup 和 Zone

  1. 删除 thedefault区如果它存在。首先将其从默认 Zonegroup 中移除。

    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. 删除 thedefault存储集群中的池如果它们存在。

    重要

    以下步骤假设一个使用新安装的池(这些池共同构成一个区)且不存储任何数据的多站点配置。如果您已经使用它们来存储数据,请不要删除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. The ceph-radosgw守护进程必须在拉取 Realm 和 period 信息之前进行身份验证。在主区中创建一个“系统用户”以促进守护进程之间的身份验证。

    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. 记下 theaccess_keysecret_key。次级区需要它们来对主区进行身份验证。

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

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

更新周期

更新主区配置后,请更新 period。

radosgw-admin period update --commit

Note

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

更新 Ceph 配置文件

通过在主区主机上添加 thergw_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`

配置次级区

Zonegroup 中的区会复制所有数据,以确保每个区都具有相同的数据。在创建次级区时,在标识为用于充当次级区的主机上运行以下操作。

Note

要添加第二个次级区(即在已经包含一个次级区的 Zonegroup 中添加第二个非主区),请遵循添加次级区的。确保指定一个不同于第一个次级区的名称。

重要

元数据操作(例如,用户创建)必须在主区主机上运行。存储桶操作可以由主区或次级区接收,但次级区会将存储桶操作重定向到主区。如果主区宕机,存储桶操作将失败。

拉取 Realm 配置

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

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

Note

拉取 Realm 配置还会检索远程的当前 period 配置,并将其设置为当前主机上的 period。

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

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

创建一个次级 Zone

重要

创建区时,它必须在 Ceph 对象网关节点上创建,该节点将位于该区中。

为了为多站点配置创建一个次级区,请在标识为用于充当次级区的主机打开命令行界面。指定 Zonegroup ID、新的区名称和区的端点。不要use the--master--default标志。自 Kraken 开始,所有区默认以 active-active 配置运行,这意味着网关客户端可以写入任何区,该区将复制数据到 Zonegroup 中的所有其他区。如果您希望防止次级区接受写入操作,请在命令中包含 the--read-only标志以在主区和次级区之间创建 active-passive 配置。在任何情况下,都不要忘记提供 theaccess_keysecret_key存储在主 Zonegroup 主区中的生成的系统用户的名称。运行以下命令:

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

重要

以下步骤假设一个使用新安装的系统且尚未开始存储数据的多站点配置。DO NOT如果需要,请删除默认区: default 区或其池来存储数据,否则数据将无法恢复。

Delete the default zone if needed:

radosgw-admin zone delete --rgw-zone=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

更新 Ceph 配置文件

要在次级区主机上更新 Ceph 配置文件,请添加 thergw_zone配置选项和次级区的名称到实例条目中。

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

例如:

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

更新周期

更新次级区配置后,请更新 period:

radosgw-admin period update --commit

Note

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

启动网关

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

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

如果未设置cephadmcommand was used to deploy the cluster, you will not besystemctlto start the gateway because no services will exist onsystemctlcould operate. This is due to the containerized nature of thecephadm-deployed Ceph cluster. If you have used thecephadmcommand

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

Note

次级区接受存储桶操作;但是,次级区会将存储桶操作重定向到主区,然后与主区同步以接收存储桶操作的结果。如果主区宕机,在次级区上执行的存储桶操作将失败,但对象操作应该成功。

验证一个对象

默认情况下,在对象成功同步后不会进行后续的对象验证。但是,您可以通过设置rgw_sync_obj_etag_verifytotrue来启用验证。设置此值后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

输出可能会根据同步状态而有所不同。在同步期间,碎片有两种类型:

  • Behind shards是需要数据同步(无论是完整数据同步还是增量数据同步)以更新到最新状态的碎片。

  • Recovery shards是在同步过程中遇到错误并已标记为重试的碎片。错误主要发生在小问题上,例如在存储桶上获取锁。这种类型的错误通常会自行解决。

查看日志

仅限于多站点部署,您可以查看元数据日志 (mdlog),bilog), 和数据日志 (datalog)。您可以列出它们,也可以修剪它们。修剪在大多数情况下不是必需的,因为rgw_sync_log_trim_interval默认设置为 20 分钟。除非rgw_sync_log_trim_interval已手动设置为 0,否则不需要修剪日志。

更改元数据主区

重要

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

类似地,如果当前主区正在处理元数据更改,同时另一个区正在被提升为主区,则这些更改可能会丢失。为了避免丢失这些更改,我们建议关闭前主区上的任何radosgw实例。提升新主区后,可以使用radosgw-admin period pull获取前主区的新 period,并重新启动网关。

要将区提升为主元数据,请在该区(在本例中,区是区us-2在 Zonegroupus):

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

中)上运行以下命令:us-2 sends this period to other zones.

故障转移和灾难恢复

设置故障转移到次级区

如果主区失败,您可以通过执行以下步骤进行故障转移到次级区以进行灾难恢复:

  1. 将次级区设置为主区和默认区。例如:

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

    默认情况下,Ceph 对象网关以 active-active 配置运行。但是,如果集群配置为以 active-passive 配置运行,则次级区是一个只读区。要允许次级区接收写入操作,请移除其--read-only状态。例如:

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

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

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

从故障转移中恢复

如果前主区恢复,您可以通过执行以下步骤恢复故障转移操作:

  1. 从恢复区内部,从当前主区拉取最新的 Realm 配置:

    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. 更新 period 以使更改生效:

    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. 更新 period 以使更改生效:

    radosgw-admin period update --commit
    
  7. 在次级区中重新启动 Ceph 对象网关:

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

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

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

  1. 创建一个 Realm。将<name>替换为 Realm 名称:

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

    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. 重命名默认 Zonegroup 的api_name使用。将<name>替换为 Zonegroup 名称:

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

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

    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`
    

完成此过程后,请继续到配置次级区并在主 Zonegroup 中创建一个次级区。

多站点配置参考

以下部分提供了有关 Realm、period、Zonegroup 和区的更多详细信息和命令行用法。

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

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

Realm

Realm 是一个由一个或多个 Zonegroup 组成的全局唯一命名空间。Zonegroup 包含一个或多个区。区包含存储桶。存储桶包含对象。

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

每个 Realm 都与一个“period”相关联。Period 代表时间上的 Zonegroup 和区配置状态。每次您更改 Zonegroup 或区时,您都应该更新并提交 period。

为了向后兼容 Infernalis 和更早的版本,Ceph 对象网关默认情况下不会创建 Realm。但是,作为最佳实践,我们建议在创建新集群时创建 Realm。

创建一个 Realm

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

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

例如:

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

通过指定--default,则每次调用radosgw-admin时 Realm 都会隐式称为--rgw-realm和 Realm 名称,除非

将 Realm 设置为默认

Realm 列表中的 Realm 应该有一个默认 Realm。可能只有一个默认 Realm。如果只有一个 Realm 并且在创建时没有被指定为默认 Realm,则将其设置为默认 Realm。或者,要更改默认 Realm,请运行以下命令:

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

Note

当 Realm 是默认的,命令行将--rgw-realm=<realm-name>作为参数。

删除 Realm

要删除 Realm,请运行realm rm并指定 Realm 名称:

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

例如:

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

获取 Realm

要获取 Realm,请运行realm get并指定 Realm 名称:

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

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

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

例如:

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

列出 Realm

要列出 Realm,请运行realm list:

radosgw-admin realm list

列出 Realm Periods

要列出 Realm periods,请运行realm list-periods:

radosgw-admin realm list-periods

拉取 Realm

要从包含主 Zonegroup 和主区的节点拉取 Realm 到包含次级 Zonegroup 或区的节点,请运行realm pull在将 Realm 配置接收到的节点上:

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

重命名 Realm

Realm 不是 period 的一部分。因此,任何 Realm 重命名都仅应用于本地,因此在运行realm pull时不会拉取。如果您正在重命名包含多个区的 Realm,请在每个区上运行 therename命令。

要重命名 Realm,请运行以下:

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

Note

不要使用realm set来更改 thename参数。这样做只更改内部名称。如果您使用realm set来更改 thename参数,则--rgw-realm仍然期望 Realm 的旧名称。

Zonegroup

Zonegroup 使 Ceph 对象网关能够支持多站点部署和全局命名空间。Zonegroup 在 Infernalis 及其之前的版本中被称为“区域”。

Zonegroup 定义了一个或多个 Ceph 对象网关实例的地理位置。每个 Zonegroup 包含一个或多个区。

Zonegroup 的配置与典型的配置程序不同,因为并非所有 Zonegroup 配置设置都存储在配置文件中。

您可以列出 Zonegroups,获取 Zonegroup 配置,并设置 Zonegroup 配置。

创建 Zonegroup

创建 Zonegroup 包括指定 Zonegroup 名称。新创建的区位于默认 Realm 中,除非指定了不同的 Realm。--rgw-realm=<realm-name>.

如果 Zonegroup 是默认 Zonegroup,请指定 the--default标志。如果 Zonegroup 是主 Zonegroup,请指定 the--master标志。例如:

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

Note

使用zonegroup modify --rgw-zonegroup=<zonegroup-name>to 修改

将 Zonegroup 设置为默认

Zonegroup 列表中的 Zonegroup 必须有一个默认 Zonegroup。只能有一个默认 Zonegroup。如果只有一个 Zonegroup 并且在创建时没有被指定为默认 Zonegroup,则使用以下命令将其设置为默认 Zonegroup。可以使用此类命令来更改默认 Zonegroup。

  1. 将 Zonegroup 指定为默认 Zonegroup:

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

    Note

    当 Zonegroup 是默认的,命令行将认为 the--rgw-zonegroup=<zonegroup-name>选项的名称为 Zonegroup 的参数。(在这个例子中,<zonegroup-name>已保留以保持一致性和可读性。)

  2. 更新 period:

    radosgw-admin period update --commit
    

向 Zonegroup 添加区

本过程解释了如何将区添加到 Zonegroup。

  1. 运行以下命令将区添加到 Zonegroup:

    radosgw-admin zonegroup add --rgw-zonegroup=<name> --rgw-zone=<name>
    
  2. 更新 period:

    radosgw-admin period update --commit
    

从 Zonegroup 中删除区

  1. 运行此命令从 Zonegroup 中删除区:

    radosgw-admin zonegroup remove --rgw-zonegroup=<name> --rgw-zone=<name>
    
  2. 更新 period:

    radosgw-admin period update --commit
    

重命名 Zonegroup

  1. 运行此命令重命名 Zonegroup:

    radosgw-admin zonegroup rename --rgw-zonegroup=<name> --zonegroup-new-name=<name>
    
  2. 更新 period:

    radosgw-admin period update --commit
    

删除 Zonegroup

  1. 要删除 Zonegroup,请运行以下命令:

    radosgw-admin zonegroup delete --rgw-zonegroup=<name>
    
  2. 更新 period:

    radosgw-admin period update --commit
    

列出 Zonegroups

Ceph 集群包含 Zonegroup 列表。要列出 Zonegroups,请运行此命令:

radosgw-admin zonegroup list

The radosgw-admin返回一个 JSON 格式的 Zonegroup 列表。

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

获取 Zonegroup 映射

要列出每个 Zonegroup 的详细信息,请运行此命令:

radosgw-admin zonegroup-map get

Note

如果您收到 afailed to read zonegroup map错误,请运行radosgw-admin zonegroup-map update as root第一部分。

获取 Zonegroup

要查看 Zonegroup 的配置,请运行此命令:

radosgw-admin zonegroup get [--rgw-zonegroup=<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"
}

设置 Zonegroup

定义 Zonegroup 的过程包括创建一个 JSON 对象并指定所需设置。以下是所需设置的列表:

  1. name: Zonegroup 的名称。必需。

  2. api_name: Zonegroup 的 API 名称。可选。

  3. is_master: 确定 Zonegroup 是否为主 Zonegroup。必需。note:您只能有一个主 Zonegroup。

  4. endpoints: Zonegroup 中的所有端点列表。例如,您可以使用多个域名来引用相同的 Zonegroup。记住转义前导斜杠 (\/)。您也可以为每个端点指定一个端口 (fqdn:port)。可选。

  5. hostnames: Zonegroup 中的所有主机名列表。例如,您可以使用多个域名来引用相同的 Zonegroup。可选。rgw dns name设置将自动包含在此列表中。

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

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

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

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

设置 Zonegroup - 过程

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

    radosgw-admin zonegroup set --infile zonegroup.json
    

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

    重要

    The defaultzonegroupis_master设置是true。如果您创建了一个额外的 Zonegroup 并希望将其设置为主 Zonegroup,则必须 either set thedefaultzonegroupis_master设置为falseor delete thedefaultzonegroup.

  2. 更新 period:

    radosgw-admin period update --commit
    

设置 Zonegroup 映射

设置 Zonegroup 映射的过程包括 (1) 创建一个包含一个或多个 Zonegroups 的 JSON 对象,以及 (2) 设置 themaster_zonegroup为集群。Zonegroup 映射中的每个 Zonegroup 都是一个键值对,其中 thekey设置等效于单个 Zonegroup 配置的name设置,而 theval是一个包含单个 Zonegroup 配置的 JSON 对象。

您只能有一个 Zonegroup withis_master等于true,并且必须将其指定为 themaster_zonegroupat the end of the zonegroup 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": 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. 要设置 Zonegroup 映射,请运行以下命令:

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

    在此命令中,zonegroupmap.json是您创建的 JSON 文件。确保您为 zonegroup 映射中指定的 Zonegroup 创建了区。

  2. 更新 period:

    radosgw-admin period update --commit
    

区域

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

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

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

创建区

要创建区,请指定区名称。如果您正在创建主区,请指定 the--master标志。Zonegroup 中的每个区只能有一个主区。要向 Zonegroup 添加区,请指定 the--rgw-zonegroup选项和 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

创建区后,请更新 period:

radosgw-admin period update --commit

删除区

要删除区,请首先将其从 Zonegroup 中移除:

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

然后,更新 period:

radosgw-admin period update --commit

接下来,删除区:

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

最后,更新 period:

radosgw-admin period update --commit

重要

删除区时,请先将其从 Zonegroup 中移除。否则,更新 period 将失败。

如果已删除区的池不会在别处使用,请考虑删除池。将<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

Modifying a Zone

要修改区,请指定区名称和您希望修改的参数。

radosgw-admin zone modify [options]

其中[options]:

  • --access-key=<key>

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

  • --master

  • --default

  • --endpoints=<list>

然后,更新 period:

radosgw-admin period update --commit

列出区

Asroot, 要列出集群中的区,请运行以下命令:

radosgw-admin zone list

获取区

Asroot, 要获取区的配置,请运行以下命令:

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

The 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 对象网关池。为了保持一致性,我们建议使用与区名称相同的池前缀。有关配置池的详细信息,请参阅Pools

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

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

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

然后,作为root,更新 period:

radosgw-admin period update --commit

重命名区

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

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

然后,更新 period:

radosgw-admin period update --commit

Zonegroup 和区设置

配置默认 Zonegroup 和区时,池名称包括区名称。例如:

default.rgw.control

要更改默认值,请在 Ceph 配置文件中的每个[client.radosgw.{instance-name}] instance.

名称

描述

类型

设备空间利用率达到此阈值百分比之前,将 OSD 视为

rgw_zone

下包括以下设置:

字符串

rgw_zonegroup

The name of the zonegroup for

字符串

rgw_zonegroup_root_pool

Zonegroup 的根池。

字符串

.rgw.root

rgw_zone_root_pool

区的根池。

字符串

.rgw.root

rgw_default_zone_group_info_oid

用于存储默认 Zonegroup 的 OID。我们不推荐更改此设置。

字符串

default.zonegroup

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.