对象存储多站点

单个zone配置通常由一个zonegroup组成,该zonegroup包含一个zone和一个或多个ceph radosgw实例,可以在这些实例之间对网关客户端请求进行负载平衡。在单zone配置中,通常多个网关实例指向单个Ceph存储群集。但是,Red Hat支持Ceph对象网关的多种多站点配置选项:

  • Multi-zone: 一种更高级的配置包括一个zone group和多个zone,每个zone有一个或多个ceph-radosgw实例。每个zone都有自己的Ceph存储集群作为后盾。zone group中的多个zone在其中一个zone发生重大故障时为zone group提供灾难恢复。在Red Hat Ceph Storage 2中,每个zone都处于活动状态,可以接收写操作。除了灾难恢复之外,多个活动zone也可以作为内容分发网络的基础。要配置不带复制的多个zone,请参阅“配置不带复制的多个zone”一节
  • Multi-zone-group:以前称为“regions”,Ceph对象网关还可以支持多个zone group,每个zone group有一个或多个zone。存储到同一realm中的zone group的对象共享一个全局命名空间,确保跨zone group和zone的唯一对象ID。
  • Multiple Realms:在Red Hat Ceph Storage 2中,Ceph对象网关支持realm的概念,realm可以是单个zone group或多个zone group以及该realm的全局唯一名称空间。 多个realm提供了支持众多配置和名称空间的能力。

Red Hat Ceph Storage 1中的功能更改

在Red Hat Ceph Storage 2中,可以将每个Ceph Object Gateway配置为在active-active zone配置中工作,允许对 non-master zones进行写操作。

多站点配置存储在称为“realm”的容器中。 realm存储zone group,zone和带有多个epoch的时间“period”,用于跟踪配置更改。 在Red Hat Ceph Storage 2中,ceph-radosgw守护进程处理同步,从而不需要单独的同步代理。 另外,新的同步方法允许Ceph对象网关以“active-active”配置而不是“active-passive”进行操作。

要求和假设

多站点配置需要至少两个Ceph存储集群,最好给定一个不同的集群名称。 至少两个Ceph对象网关实例,每个Ceph存储集群一个。

本指南假定至少两个Ceph存储群集位于不同的地理位置; 但是,该配置可以在同一物理站点上工作。 本指南还假设了四个分别名为rgw1,rgw2,rgw3和rgw4的Ceph对象网关服务器。

多站点配置需要一个master zone group 和一个master zone。 此外,每个zone group都需要一个master zone。 zone groups可以具有一个或多个secondary或non-master zones。

重要事项

一个realm的master zone group中的master zone负责存储realm元数据的主副本,包括用户,配额和桶(由radosgw-admin CLI创建)。 此元数据自动同步到secondary zones和secondary zone groups。 必须使用radosgw-admin CLI执行的元数据操作必须在master zone group的master zone内的主机上执行,以确保它们与secondary zone groups和zones同步。 当前,可以在secondary zones和zone groups上执行元数据操作,但是不建议这样做,因为它们将不同步,从而导致元数据碎片化。

在以下示例中,rgw1主机将用作master zone group的master zone。 rgw2主机将充当master zone group的secondary zone; rgw3主机将充当secondary zone group的master zone; 并且rgw4主机将充当secondary zone group的secondary zone。

存储池

红帽建议使用 Ceph Placement Group’s per Pool Calculator 为ceph-radosgw守护程序将创建的池计算合适数量的pg。 在Ceph配置文件中将计算出的值设置为默认值。 例如:

osd pool default pg num = 50
osd pool default pgp num = 50

对存储集群上的Ceph配置文件进行此更改; 然后,对配置进行运行时更改,以便在网关实例创建池时使用那些默认设置。

或者,手动创建池。 有关创建池的详细信息,请参见《存储策略》指南中的“存储池”一章。

特定于zone的池名遵循命名约定{zone-name}. pool -name。例如,一个名为us-east的zone将有以下池:

  • .rgw.root
  • us-east.rgw.control
  • us-east.rgw.meta
  • us-east.rgw.log
  • us-east.rgw.buckets.index
  • us-east.rgw.buckets.data
  • us-east.rgw.buckets.non-ec
  • us-east.rgw.meta:users.keys
  • us-east.rgw.meta:users.email
  • us-east.rgw.meta:users.swift
  • us-east.rgw.meta:users.uid

安装对象网关

要安装Ceph对象网关,请参阅Red Hat Ceph Storage 4 {install-rhel-guide} [Red Hat Enterprise Linux安装指南]。

所有Ceph对象网关节点必须遵循“安装Red Hat Ceph存储的要求”部分中列出的任务。

Ansible可以安装和配置Ceph对象网关,以与Ceph存储群集一起使用。 对于多站点和多站点组部署,每个zone都应具有Ansible配置。

如果使用Ansible安装Ceph Object Gateway,Ansible playbooks将处理初始配置。 要使用Ansible安装Ceph对象网关,请将主机添加到/etc/ansible/hosts文件中。 在[rgws]部分下添加Ceph对象网关主机,以将其角色标识给Ansible。 如果主机具有顺序命名,则可以使用范围。 例如:

[rgws]
<rgw-host-name-1>
<rgw-host-name-2>
<rgw-host-name[3..10]>

添加主机后,可以重新运行Ansible playbooks。

Ansible将确保您的网关正在运行,因此可能需要手动删除默认zone和池。 本指南提供了这些步骤。

使用异步更新更新现有的多站点集群时,请按照安装说明进行更新。 然后,重启网关实例。

没有重启实例所需的顺序。Red Hat建议首先重新启动master zone group和master zone,然后重启次secondary zone group和secondary zone。

建立多站点REALM

集群中的所有网关均具有配置。 在多站点realm中,这些网关可能位于不同的zone group和zone中。 但是,他们必须在realm内共同努力。 在多站点realm中,所有网关实例都必须从master zone group和master zone内主机上的ceph-radosgw守护程序中检索其配置。

因此,创建多站点集群的第一步是建立realm、master zone group和master zone。要在多站点配置中配置网关,请选择一个ceph radosgw实例,该实例将包含realm配置、master zone group和master zone。

创建realm

一个realm包含zone groups和zones的多站点配置,还用于在该realm中强制执行全局唯一的名称空间。

通过在标识为可在master zone group和zone中使用的主机上打开CLI,为多站点配置创建新realm。 然后,执行以下操作:

[root@master-zone]# radosgw-admin realm create --rgw-realm={realm-name} [--default]

例如:

[root@master-zone]# radosgw-admin realm create --rgw-realm=movies --default

如果集群只有一个realm,请指定–default标志。 如果指定–default,则radosgw-admin将默认使用此realm。 如果未指定–default,则添加zone group和zone时需要指定–rgw-realm标志或–realm-id标志,以在添加zone group和zone时标识realm。

创建realm之后,radosgw-admin将回显realm配置。 例如:

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

Ceph会为realm生成唯一的ID,如果需要,它可以重命名realm。

创建Master Zone Group

一个realm必须至少有一个zone group,它将用作该realm的master zone group。

通过在标识为可在master zone group和zone中使用的主机上打开命令行界面,为多站点配置创建新的master zone group。 然后,执行以下操作:

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

例如:

[root@master-zone]# radosgw-admin zonegroup create --rgw-zonegroup=us --
endpoints=http://rgw1:80 --rgw-realm=movies --master --default

创建master zone group后,radosgw-admin将回显zone group配置。 例如:

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

创建Master Zone

重点

必须在将位于zone内的Ceph Object Gateway节点上创建zone。

通过在标识为可在master zone group和zone中使用的主机上打开命令行界面,为多站点配置创建master zone。 然后,执行以下操作:

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

例如:

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

未指定–access key和–secret。在下一节中创建用户后,这些设置将添加到zone中。

重点

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

删除Default Zone Group and Zone

删除 default zone(如果存在)。 确保首先将其从default zone group中删除。

root@master-zone]# radosgw-admin zonegroup remove --rgw-zonegroup=default --rgw-zone=default
[root@master-zone]# radosgw-admin period update --commit
[root@master-zone]# radosgw-admin zone delete --rgw-zone=default
[root@master-zone]# radosgw-admin period update --commit
[root@master-zone]# radosgw-admin zonegroup delete --rgw-zonegroup=default
[root@master-zone]# radosgw-admin period update --commit

最后,删除Ceph存储集群中的default池(如果存在)。

以下步骤假定使用尚未安装数据的新安装系统进行多站点配置。 如果已经使用default zone来存储数据,请不要删除它。

# rados rmpool default.rgw.control default.rgw.control --yes-i-really-really-mean-it
# rados rmpool default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
# rados rmpool default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
# rados rmpool default.rgw.log default.rgw.log --yes-i-really-really-mean-it
# rados rmpool default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it

创建系统用户

ceph-radosgw守护程序必须在提取realm和period信息之前进行身份验证。 在master zone中,创建一个系统用户以促进守护程序之间的认证。

[root@master-zone]# radosgw-admin user create --uid="{user-name}" --display-name="{Display Name}" --system

例如:

[root@master-zone]# radosgw-admin user create --uid="synchronization-user" --display-name="Synchronization User" --system

记下access_key和secret_key,因为secondary zones 要用它们向master zone进行身份验证。

最后,将系统用户添加到master zone。

[root@master-zone]# radosgw-admin zone modify --rgw-zone=us-east --access-key={access-key} --secret={secret}
[root@master-zone]# radosgw-admin period update --commit

更新Period

更新master zone配置后,请更新period。

# radosgw-admin period update --commit

更新period会更改epoch,并确保其他zone将接收已经更新的配置。

更新Ceph配置文件

通过在实例条目中添加rgw_zone配置选项和master zone的名称来更新master zone主机上的Ceph配置文件。

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

例如:

[client.rgw.rgw1.rgw0]
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`

如果该服务已经在运行,请重启该服务,而不是启动并启用它:

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

建立SECONDARY ZONE

一个中zone group的zones将复制所有数据,以确保每个zone都具有相同的数据。 创建secondary zone时,请在标识为服务于secondary zone的主机上执行所有radosgw-admin zone操作。

要添加其他zone,请遵循与添加secondary zone相同的过程。

使用其他区域名称。

重点

必须在master zonegroup的master zone内的主机上执行元数据操作,例如用户创建和配额。master zone和 secondary zone可以从RESTful API接收桶操作,但是 secondary zone将桶操作重定向到master zone。 如果master zone down掉,则桶操作将失败。 如果使用radosgw-admin CLI创建桶,则必须在master zone group的master zone内的主机上执行该桶,否则桶将不会与zone groups和zones同步。

拉取realm

使用master zonegroup中master zone的URL路径,access_key和secret_key,将realm拉到主机。 要拉出非默认realm,请使用–rgw-realm或–realm-id配置选项指定realm。

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

如果此realm是默认realm或唯一realm,请将该realm设置为默认realm。

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

拉取Period

使用master zonegroup中master zone的URL路径,access_key和secret_key,将period拉到主机上。 要从非默认realm拉一个period,请使用–rgw-realm或-realm-id配置选项指定该realm。

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

拉取period将检索realm中zonegroup和zone配置的最新版本。

创建Secondary Zone

重点

必须在将位于zone内的Ceph Object Gateway节点上创建zones。

通过在标识为secondary zone提供服务的主机上打开CLI,为多站点配置创建secondary zone。 指定zonegroup ID,新的zone名称和该zone的endpoint。 不要使用 –master–default 标志。 在Red Hat Ceph Storage 2中,默认情况下所有zone都以双活配置运行; 也就是说,网关客户端可以将数据写入任何zone,并且该zone会将数据复制zone group内的所有其他zones。 如果为secondary zone不需要接受写操作,请指定 –read-only 标志以在master zone和secondary zone之间创建主动-被动配置。 此外,提供存储在master zonegroup的master zone中的生成的系统用户的access_keysecret_key。 执行以下命令:

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

例如:

[root@second-zone]# radosgw-admin zone create --rgw-zonegroup=us \
--rgw-zone=us-west \
--access-key={system-key} --secret={secret} \
--endpoints=http://rgw2:80

重点

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

如果需要,请删除default zone。

[root@second-zone]# radosgw-admin zone delete --rgw-zone=default

最后,如果需要,请删除Ceph存储集群中的default池。

# rados rmpool default.rgw.control default.rgw.control --yes-i-really-really-mean-it
# rados rmpool default.rgw.data.root default.rgw.data.root --yes-i-really-really-mean-it
# rados rmpool default.rgw.gc default.rgw.gc --yes-i-really-really-mean-it
# rados rmpool default.rgw.log default.rgw.log --yes-i-really-really-mean-it
# rados rmpool default.rgw.users.uid default.rgw.users.uid --yes-i-really-really-mean-it

更新Period

更新secondary zone配置后,请更新period。

# radosgw-admin period update --commit

更新period会更改epoch,并确保其他zone将接收已经更新的配置。

更新Ceph配置文件

通过在实例条目中添加rgw_zone配置选项和secondary zone的名称来更新secondary zone主机上的Ceph配置文件。

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

例如:

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

启动网关

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

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

如果该服务已经在运行,请重启该服务,而不是启动并启用它:

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

故障转移和灾难恢复

如果master zone出现故障,请故障切换到secondary zone进行灾难恢复。

  1. 将secondary zone设置为master zone和默认zone。 例如:

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

    默认情况下,Ceph Object Gateway在双活配置中运行。如果集群配置为在主动被动配置中运行,则secondary zone是只读zone。请删除–read-only,以允许该区域接收写入操作。例如:

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

    # radosgw-admin period update --commit
    
  3. 重启Ceph对象网关。

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

如果以前的master zone恢复,请还原操作。

  1. 从已恢复的zone中,从当前master zone中拉取realm。

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

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

    # radosgw-admin period update --commit
    
  4. 在已恢复的zone中重启Ceph对象网关。

    # systemctl restart ceph-radosgw@rgw.`hostname -s`
    
  5. 如果secondary zone需要为只读配置,请更新secondary zone。

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

    # radosgw-admin period update --commit
    
  7. 在 secondary zone中重启Ceph对象网关。

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

将单站点系统迁移到多站点系统

要从具有default zonegroup和zone的单站点系统迁移到多站点系统,请使用以下步骤

  1. 创建一个realm。 将 替换为realm名称。

    [root@master-zone]# radosgw-admin realm create --rgw-realm=<name> --default
    
  2. 重命名默认zone和zonegroup。 将 替换为zonegroup或zone名称。

    [root@master-zone]# radosgw-admin zonegroup rename --rgw-zonegroup default --
    zonegroup-new-name=<name>
    [root@master-zone]# radosgw-admin zone rename --rgw-zone default --zone-new-name us-east-1 --rgw-zonegroup=<name>
    
  3. 配置master zonegroup。 将 替换为ralm或zonegroup名称。 将 替换为zonegroup中的完全限定域名。

    [root@master-zone]# radosgw-admin zonegroup modify --rgw-realm=<name> --rgw-
    zonegroup=<name> --endpoints http://<fqdn>:80 --master --default
    
  4. 配置master zone。 将 替换为ralm、zonegroup或zone名称。 将 替换为zonegroup中的完全限定域名。

    [root@master-zone]# 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
    
  5. 创建系统用户。 将 替换为用户名。 将 替换为显示名称。 它可能包含空格。

    [root@master-zone]# radosgw-admin user create --uid=<user-id> \
    --display-name="<display-name>" \
    --access-key=<access-key> --secret=<secret-key> \ --system
    
  6. 提交已更新的配置。

    # radosgw-admin period update --commit
    
  7. 重启动Ceph 对象网关。

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

完成此过程后,继续建立secondary zone以在 master zone group中创建secondary zone。

多站点命令行用法

Realms

ralm代表一个全局唯一的命名空间,该命名空间由一个或多个包含一个或多个zones的zonegroups和包含桶的zones组成,桶又包含对象。 realm使 Ceph 对象网关能够在同一硬件上支持多个命名空间及其配置。

realm包含periods的概念。 每个period代表 zone group和zone配置的时间状态。 每次对zone group或zone进行更改时,请更新period并提交。

默认情况下,Ceph 对象网关版本 2 不会创建与版本 1.3 及更早版本向后兼容的realm。 但是,作为最佳实践,红帽建议为新集群创建realm。

创建Realm

要创建realm,请执行realm create并指定realm名称。 如果realm是默认值,请指定 –default

[root@master-zone]# radosgw-admin realm create --rgw-realm={realm-name} [--default]

例如

[root@master-zone]# radosgw-admin realm create --rgw-realm=movies --default

通过指定--default,除非显式提供了 –rgw-realm 和realm名称,否则每次radosgw-admin调用都会隐式调用该realm。

将 Realm 设为默认值

realm列表中的一个realm应该是默认realm。可能只有一个默认realm。如果只有一个realm,并且在创建时没有指定为默认realm,则将其设为默认realm。或者,要更改默认的realm,请执行:

root@master-zone]# radosgw-admin realm default --rgw-realm=movies

当realm为默认时,命令行假定 --rgw-realm= 作为参数。

删除Realm

要删除realm,请执行realm delete并指定realm名称。

[root@master-zone]# radosgw-admin realm delete --rgw-realm={realm-name}

例如

[root@master-zone]# radosgw-admin realm delete --rgw-realm=movies
查看realm信息

要查看realm信息,请执行realm get并指定realm名称。

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

例如

# radosgw-admin realm get --rgw-realm=movies [> filename.json]

CLI将回显一个带有realm属性的JSON对象。

{
"id": "0a68d52e-a19c-4e8e-b012-a8f831cb3ebc",
"name": "movies",
"current_period": "b0c5bbef-4337-4edd-8184-5aeab2ec413b",
"epoch": 1
}

使用>和输出文件名将JSON对象输出到文件中。

设置realm

要设置realm,请执行realm set,指定realm名称,并使用输入文件名指定–infile =。

[root@master-zone]# radosgw-admin realm set --rgw-realm=<name> --infile=<infilename>

例如

[root@master-zone]# 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

要将realm从包含master zone group和master zone的节点拉到包含secondary zone group或zone的节点,请在将接收realm配置的节点上执行realm pull

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

realm不是period的一部分。 因此,重命名realm仅适用于本地,不能通过realm pull被拉取。 重命名具有多个zone的realm时,请在每个zone上运行该命令。 要重命名realm,请执行以下操作:

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

不要使用realm set更改name参数。那样仅更改内部名称。指定**–rgw realm**仍将使用旧的realm名称。

Zone Groups

Ceph 对象网关通过使用zone groups的概念支持多站点部署和全局命名空间。 以前在 Red Hat Ceph Storage 1.3 中称为region,zone group定义了一个或多个zones内的一个或多个对象网关实例的地理位置。

配置zone group不同于典型的配置过程,因为并非所有设置都以 Ceph 配置文件结束。 可以列出zone group、获取zone group配置并设置zone group配置。

radosgw-admin zone group操作也许可以在realm内的任何主机上执行,因为更新period 的步骤会将更改传播到整个集群。但是, radosgw-admin zone操作必须在zone内的主机上执行。

创建Zone Group

创建zone group包括指定zone group名称。 除非指定了 --rgw-realm= ,否则创建zone假定它将存在于默认realm中。 如果zone group是默认zone group,请指定 –default 标志。 如果zone group是master zone group,请指定 –master 标志。 例如:

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

使用 zonegroup modify --rgw-zonegroup= 修改现有zone group的设置。

设置zone group为默认zonegroup

zonegroups 列表中的一个 zonegroup 应该是默认 zonegroup。 可能只有一个默认zone group。 如果只有一个zone group,并且在创建时没有指定为默认zone group,请将其设为默认zone group。 或者,要更改默认zone group,请执行:

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

当zonegroup为默认值时,命令行将**–rgw-zonegroup = **用作参数。

然后,更新period:

# radosgw-admin period update --commit
向zone group添加zone

要将zone添加到zone group,必须在位于该zone中的主机上执行此步骤。要将zone添加到zone group,请执行以下操作:

# radosgw-admin zonegroup add --rgw-zonegroup=<name> --rgw-zone=<name>

然后,更新period:

# radosgw-admin period update --commit
从zone group中删除zone

要从zone group中删除zone,请执行以下操作:

# radosgw-admin zonegroup remove --rgw-zonegroup=<name> --rgw-zone=<name>

然后,更新period:

# radosgw-admin period update --commit
重命名zone group

要重命名zone group,请执行以下操作:

# radosgw-admin zonegroup rename --rgw-zonegroup=<name> --zonegroup-new-name=<name>

然后,更新period:

# radosgw-admin period update --commit
删除zone group

要删除zone group,请执行以下操作:

# radosgw-admin zonegroup delete --rgw-zonegroup=<name>

然后,更新period:

# radosgw-admin period update --commit
列出zone groups

Ceph 集群包含zone group列表。 要列出zone group,请执行:

# radosgw-admin zonegroup list

radosgw-admin 返回一个 JSON 格式的zone group列表。

{
"default_info": "90b28698-e7c3-462c-a42d-4aa780d24eda",
"zonegroups": [
"us"
]
}
查看zone group信息

要查看zone group的配置,请执行:

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

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": 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"
}
设置Zone Group

定义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. endpoints: zone group中所有endpoints的列表。例如,可以使用多个域名来引用同一zone group。请记住对正斜杠 (/) 进行转义。也可以为每个endpoint指定端口**(fqdn:port**)。可选。
  5. hostnames: zone group中所有主机名的列表。 例如,可以使用多个域名来引用同一个zone group。 可选。 rgw dns name设置将自动包含在此列表中。 更改此设置后,应该重启网关守护程序。
  6. master_zone: zone group的master zone。 可选。 如果未指定,则使用默认zone。 **注意:**每个zone group只能有一个master zone。
  7. zones: zone group内所有zone的列表。 每个zone都有一个名称(必需)、一个endpoint列表(可选)以及网关是否记录元数据和数据操作(默认情况下为 false)。
  8. placement_targets:放置目标的列表(可选)。每个放置目标都包含放置目标的名称(必需)和标签列表(可选),以便只有具有标签的用户才能使用放置目标(即用户信息中的placement_tags字段)。
  9. default_placement:对象索引和对象数据的默认放置目标。默认设置为default-placement。还可以在“用户信息”中为每个用户设置每个用户的默认位置。

要设置zone group,需创建一个由必填字段组成的JSON对象,然后将该对象保存到文件(例如zonegroup.json)中; 然后,执行以下命令:

# radosgw-admin zonegroup set --infile zonegroup.json

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

默认情况下,default zone group is_master 设置为 true。 如果创建一个新的zone group并希望使其成为master zone group,必须将default zone group is_master 设置设置为 false,或者删除default zone group。

最后,更新period:

# radosgw-admin period update --commit
设置Zone Group Map

设置zone group map包括创建一个包含一个或多个zone group的 JSON 对象,并为集群设置 master_zonegroup。 zone group map中的每个zone group由一个键/值对组成,其中key设置等效于单个zone group配置的name设置,而 val 是由单个zone group配置组成的 JSON 对象。

可能只有一个 is_master 等于 true 的zone group,并且必须在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": 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
}
}

要设置zone group map,请执行以下操作:

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

其中 zonegroupmap.json 是创建的 JSON 文件。 确保为zone group map中指定的zone创建了zone。 最后,更新period。

# radosgw-admin period update --commit

Zones

对象网关支持zone的概念。 zone定义了一个由一个或多个对象网关实例组成的逻辑组。

配置zone与典型的配置过程不同,因为并非所有设置都以 Ceph 配置文件结束。 可以列出zone、查看zone配置以及设置zone配置。

重点

所有的radosgw-admin zone 操作必须在该zone内运行或将运行的主机上执行。

创建Zone

要创建zone,请指定zone名称。如果是master zone,请指定**–master选项。zone group中只有一个zone可以是master zone。要将zone添加到zone group,请使用zone group名称指定–rgw zonegroup**选项。

重点

必须在将在zone内的对象网关节点上创建zone。

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

然后,更新period:

# radosgw-admin period update --commit
删除Zone

要删除zone,首先将其从zone group中删除。

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

然后,更新period:

# radosgw-admin period update --commit

接下来,删除zone。

重点

此过程必须在zone内的主机上执行。

执行以下操作:

[root@zone]# radosgw-admin zone delete --rgw-zone<name>

最后,更新period:

# radosgw-admin period update --commit

重点

如果不先从zone group中删除zone,请不要删除该zone。否则,更新period将失败。

如果已删除zone的池不会在其他任何地方使用,请考虑删除池。 将下面示例中的 替换为已删除zone的名称。

重点

一旦Ceph删除了zone池,它就会以不可恢复的方式删除其中的所有数据。仅当Ceph客户端不再需要池内容时才删除zone池。

重点

在多realm集群中,删除 .rgw.root 池和zone池将删除集群的所有realm信息。在删除 .rgw.root池之前,请确保 .rgw.root不包含其他活动realm。

# rados rmpool <del-zone>.rgw.control <del-zone>.rgw.control --yes-i-really-really-mean-it
# rados rmpool <del-zone>.rgw.data.root <del-zone>.rgw.data.root --yes-i-really-really-mean-it
# rados rmpool <del-zone>.rgw.gc <del-zone>.rgw.gc --yes-i-really-really-mean-it
# rados rmpool <del-zone>.rgw.log <del-zone>.rgw.log --yes-i-really-really-mean-it
# rados rmpool <del-zone>.rgw.users.uid <del-zone>.rgw.users.uid --yes-i-really-really-mean-it
修改Zone

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

重点

应该在zone内的 对象网关节点上修改zone。

[root@zone]# radosgw-admin zone modify [options]

–access-key=–secret/–secret-key=–master–default–endpoints=

然后,更新period:

# radosgw-admin period update --commit
列出Zones

作为root用户,要列出集群中的zone,请执行:

# radosgw-admin zone list
查看zone信息

作为root用户,要获取zone的配置,请执行:

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

default zone如下所示:

{ "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"}
}
]
}
设置zone

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

重点

应该在zone内的Ceph对象网关节点上设置zone。

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

[root@zone]# radosgw-admin zone set --rgw-zone={zone-name} --infile zone.json

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

然后,以 root 用户更新period:

# radosgw-admin period update --commit
重命名zone

要重命名zone,请指定zone名称和新的zone名称。 在zone内的主机上执行以下操作:

[root@zone]# radosgw-admin zone rename --rgw-zone=<name> --zone-new-name=<name>

然后,更新period:

# radosgw-admin period update --commit

zone group和zone配置设置

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

  • default.rgw.control

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

名称描述类型默认值
rgw_zone网关实例的zone的名称。字符串None
rgw_zonegroup网关实例的zone group的名称。字符串None
gw_zonegroup_root
_pool
zone group的根池。字符串.rgw.root
rgw_zone_root_poolzone的根池。字符串.rgw.root
rgw_default_zone_gr
oup_info_oid
用于存储默认zone group的OID。不建议更改此设置。字符串default.zonegro
up
rgw_num_zone_opst
ate_shards
保持zone group同步进度的最大shard数。整型128

多站点配置下手动resharding

Red Hat Ceph Storage 3.1 及更早版本不支持多站点集群的动态bucket resharding。 要在多站点集群中手动reshard buckets,请使用以下过程。

手动 resharding是一个非常昂贵的过程,尤其是对于需要手动 resharding的巨大桶。 每个secondary zone都会删除所有对象,然后从master zone重新同步它们。

先决条件

  • 停止所有对象网关实例。

过程

  1. 在 master zone group的 master zone 中的一个节点上,执行以下命令:

    # radosgw-admin bucket sync disable --bucket=<bucket-name>
    

    等待所有zone的sync status报告数据同步是最新的。

  2. 停止所有zone中的所有ceph-radosgw 守护进程。

  3. 在master zone group的 master zone 内的节点上,对桶进行重新分片。 例如:

    # radosgw-admin bucket reshard --bucket=<bucket_name> --num-shards=
    <new_shards_number>
    
  4. 每个secondary zone上,执行以下操作:

    # radosgw-admin bucket rm --purge-objects --bucket=<bucket-name>
    
  5. 在master zone上,执行:

    # radosgw-admin bi purge --bucket-id=<old-bucket-id>
    
  6. 最后,重启所有zone中的所有 ceph-radosgw 守护进程。

元数据同步过程将获取更新的bucket入口点和bucket实例元数据。数据同步过程将执行完全同步。

配置不带复制的多个zone

可以配置多个不会互相复制的zone。 例如,可以为公司中的每个团队创建一个专用zone。

先决条件

  • 安装了 Ceph 对象网关的 Ceph 存储集群。

过程

  1. 创建realm。

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

    例如:

    [root@master-zone]# radosgw-admin realm create --rgw-realm=movies --default
    {
    "id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62",
    "name": "movies",
    "current_period": "1950b710-3e63-4c41-a19e-46a715000980",
    "epoch": 1
    }
    
  2. 创建zone group。

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

    例如:

    [root@master-zone]# radosgw-admin zonegroup create --rgw-zonegroup=us --
    endpoints=http://rgw1:80 --rgw-realm=movies --master --default
    {
    "id": "f1a233f5-c354-4107-b36c-df66126475a6",
    "name": "us",
    "api_name": "us",
    "is_master": "true",
    "endpoints": [
    "http:\/\/rgw1:80"
    ],
    "hostnames": [],
    "hostnames_s3webzone": [],
    "master_zone": "",
    "zones": [],
    "placement_targets": [],
    "default_placement": "",
    "realm_id": "0956b174-fe14-4f97-8b50-bb7ec5e1cf62"
    }
    
  3. 根据用例创建一个或多个zone。

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

    例如:

    [root@master-zone]# radosgw-admin zone create --rgw-zonegroup=us \
    --rgw-zone=us-east \
    --master --default \
    --endpoints=http://rgw1:80
    
  4. 获取带有zone group配置的 JSON 文件。

    radosgw-admin zonegroup get --rgw-zonegroup=zone-group-name > zonegroup.json
    

    例如:

    [root@master-zone]# radosgw-admin zonegroup get --rgw-zonegroup=us > zonegroup.json
    
  5. 在该文件中,将 log_metalog_datasync_from_all 参数设置为 false

    {
    "id": "72f3a886-4c70-420b-bc39-7687f072997d",
    "name": "default",
    "api_name": "",
    "is_master": "true",
    "endpoints": [],
    "hostnames": [],
    "hostnames_s3website": [],
    "master_zone": "a5e44ecd-7aae-4e39-b743-3a709acb60c5",
    "zones": [
    {
    "id": "975558e0-44d8-4866-a435-96d3e71041db",
    "name": "testzone",
    "endpoints": [],
    "log_meta": "false",
    "log_data": "false",
    "bucket_index_max_shards": 0,
    "read_only": "false",
    "tier_type": "",
    "sync_from_all": "false",
    "sync_from": []
    },
    {
    "id": "a5e44ecd-7aae-4e39-b743-3a709acb60c5",
    "name": "default",
    "endpoints": [],
    "log_meta": "false",
    "log_data": "false",
    "bucket_index_max_shards": 0,
    "read_only": "false",
    "tier_type": "",
    "sync_from_all": "false",
    "sync_from": []
    }
    ],
    "placement_targets": [
    {
    "name": "default-placement",
    "tags": []
    }
    ],
    "default_placement": "default-placement",
    "realm_id": "2d988e7d-917e-46e7-bb18-79350f6a5155"
    }
    
  6. 使用更新的 JSON 文件。

    # radosgw-admin zonegroup set --rgw-zonegroup=zone-group-name --infile=zonegroup.json
    

    例如:

    [root@master-zone]# radosgw-admin zonegroup set --rgw-zonegroup=us --
    infile=zonegroup.json
    
  7. 更新period。

    # radosgw-admin period update --commit
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值