注意
本文档适用于 Ceph 开发版本。
多站点
单区配置和多站点配置
单区配置
单区配置通常由两件事组成:
一个“Zonegroup”,它包含一个区。
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 内部区间间对象数据的复制看起来像这样:
在此图表的顶部,我们看到两个应用程序(也称为“客户端”)。右边的应用程序通过 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 存储集群位于地理位置分离的位置;但是,配置可以在同一站点上工作。本指南还假设有两个名为rgw1
和rgw2
.
重要
运行单个地理分布式 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 在其内部执行全局唯一的命名空间。
通过在将要在主 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 和区时。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。
要为多站点配置创建一个新的主 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,当添加或修改区时。创建主 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
和--secret
aren’t specified。这些
重要
以下步骤假设一个使用新安装的系统且尚未存储数据的多站点配置。如果您已经使用该区来存储数据,请不要删除default
区及其池,否则数据将被删除且无法恢复。
删除默认 Zonegroup 和 Zone
删除 the
default
区如果它存在。首先将其从默认 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
删除 the
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
创建一个系统用户
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
记下 the
access_key
和secret_key
。次级区需要它们来对主区进行身份验证。将系统用户添加到主区:
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_key
和secret_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`
如果未设置cephadm
command was used to deploy the cluster, you will not besystemctl
to start the gateway because no services will exist onsystemctl
could operate. This is due to the containerized nature of thecephadm
-deployed Ceph cluster. If you have used thecephadm
command
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_verify
totrue
来启用验证。设置此值后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.
故障转移和灾难恢复
设置故障转移到次级区
如果主区失败,您可以通过执行以下步骤进行故障转移到次级区以进行灾难恢复:
将次级区设置为主区和默认区。例如:
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
更新 period 以使更改生效。
radosgw-admin period update --commit
最后,重新启动 Ceph 对象网关。
systemctl restart ceph-radosgw@rgw.`hostname -s`
从故障转移中恢复
如果前主区恢复,您可以通过执行以下步骤恢复故障转移操作:
从恢复区内部,从当前主区拉取最新的 Realm 配置:
radosgw-admin realm pull --url={url-to-master-zone-gateway} \ --access-key={access-key} --secret={secret}
将恢复区设置为主区和默认区:
radosgw-admin zone modify --rgw-zone={zone-name} --master --default
更新 period 以使更改生效:
radosgw-admin period update --commit
在恢复区中重新启动 Ceph 对象网关:
systemctl restart ceph-radosgw@rgw.`hostname -s`
如果次级区需要只读配置,请更新次级区:
radosgw-admin zone modify --rgw-zone={zone-name} --read-only
更新 period 以使更改生效:
radosgw-admin period update --commit
在次级区中重新启动 Ceph 对象网关:
systemctl restart ceph-radosgw@rgw.`hostname -s`
将单站点部署迁移到多站点
要将具有default
Zonegroup 和区的单站点部署迁移到多站点系统,请按照以下步骤操作:
创建一个 Realm。将
<name>
替换为 Realm 名称:radosgw-admin realm create --rgw-realm=<name> --default
重命名默认 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>
重命名默认 Zonegroup 的
api_name
使用。将<name>
替换为 Zonegroup 名称:radosgw-admin zonegroup modify --api-name=<name> --rgw-zonegroup=<name>
配置主 Zonegroup。将
<name>
替换为 Realm 名称或 Zonegroup 名称。将<fqdn>
替换为 Zonegroup 中的完全限定域名:radosgw-admin zonegroup modify --rgw-realm=<name> --rgw-zonegroup=<name> --endpoints http://<fqdn>:80 --master --default
配置主区。将
<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
创建一个系统用户。将
<user-id>
替换为用户名。将<display-name>
替换为显示名称。显示名称可以包含空格:radosgw-admin user create --uid=<user-id> \ --display-name="<display-name>" \ --access-key=<access-key> \ --secret=<secret-key> --system
提交更新后的配置:
radosgw-admin period update --commit
重新启动 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。
将 Zonegroup 指定为默认 Zonegroup:
radosgw-admin zonegroup default --rgw-zonegroup=comedy
Note
当 Zonegroup 是默认的,命令行将认为 the
--rgw-zonegroup=<zonegroup-name>
选项的名称为 Zonegroup 的参数。(在这个例子中,<zonegroup-name>
已保留以保持一致性和可读性。)更新 period:
radosgw-admin period update --commit
向 Zonegroup 添加区
本过程解释了如何将区添加到 Zonegroup。
运行以下命令将区添加到 Zonegroup:
radosgw-admin zonegroup add --rgw-zonegroup=<name> --rgw-zone=<name>
更新 period:
radosgw-admin period update --commit
从 Zonegroup 中删除区
运行此命令从 Zonegroup 中删除区:
radosgw-admin zonegroup remove --rgw-zonegroup=<name> --rgw-zone=<name>
更新 period:
radosgw-admin period update --commit
重命名 Zonegroup
运行此命令重命名 Zonegroup:
radosgw-admin zonegroup rename --rgw-zonegroup=<name> --zonegroup-new-name=<name>
更新 period:
radosgw-admin period update --commit
删除 Zonegroup
要删除 Zonegroup,请运行以下命令:
radosgw-admin zonegroup delete --rgw-zonegroup=<name>
更新 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 对象并指定所需设置。以下是所需设置的列表:
name
: Zonegroup 的名称。必需。api_name
: Zonegroup 的 API 名称。可选。is_master
: 确定 Zonegroup 是否为主 Zonegroup。必需。note:您只能有一个主 Zonegroup。endpoints
: Zonegroup 中的所有端点列表。例如,您可以使用多个域名来引用相同的 Zonegroup。记住转义前导斜杠 (\/
)。您也可以为每个端点指定一个端口 (fqdn:port
)。可选。hostnames
: Zonegroup 中的所有主机名列表。例如,您可以使用多个域名来引用相同的 Zonegroup。可选。rgw dns name
设置将自动包含在此列表中。master_zone
: Zonegroup 的主区。可选。如果未指定,则使用默认区。note:每个Zonegroup 只能有一个主区。zones
: Zonegroup 中的所有区列表。每个区都有一个名称(必需)、端点列表(可选)和确定网关是否记录元数据和数据操作的设置(默认情况下为false
)。placement_targets
: 放置目标列表(可选)。每个放置目标都包含放置目标的名称(必需)和标签列表(可选),以便只有带有标签的用户才能使用放置目标(即用户信息中的placement_tags
字段)。default_placement
: 对象索引和对象数据的默认放置目标。默认设置为default-placement
。也可以为每个用户在用户信息中设置每个用户的默认放置目标。
设置 Zonegroup - 过程
要设置 Zonegroup,请创建一个包含所需字段的 JSON 对象,将对象保存到文件(例如,
zonegroup.json
),然后运行以下命令:radosgw-admin zonegroup set --infile zonegroup.json
其中
zonegroup.json
是您创建的 JSON 文件。重要
The
default
zonegroupis_master
设置是true
。如果您创建了一个额外的 Zonegroup 并希望将其设置为主 Zonegroup,则必须 either set thedefault
zonegroupis_master
设置为false
or delete thedefault
zonegroup.更新 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_zonegroup
at 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
}
}
要设置 Zonegroup 映射,请运行以下命令:
radosgw-admin zonegroup-map set --infile zonegroupmap.json
在此命令中,
zonegroupmap.json
是您创建的 JSON 文件。确保您为 zonegroup 映射中指定的 Zonegroup 创建了区。更新 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 视为 |
---|---|---|---|
|
下包括以下设置: |
字符串 |
无 |
|
The name of the zonegroup for |
字符串 |
无 |
|
Zonegroup 的根池。 |
字符串 |
|
|
区的根池。 |
字符串 |
|
|
用于存储默认 Zonegroup 的 OID。我们不推荐更改此设置。 |
字符串 |
|
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.