5.8. bucket 粒度同步策略
现在支持以下功能:
- greenfield 部署 :此发行版本支持新的多站点部署。要设置存储桶粒度同步复制,必须至少配置一个新的 zonegroup/zone。
- brownfield 部署 :将 Ceph 对象网关多站点复制配置迁移到新功能的 Ceph 对象网关 bucket 粒度同步策略复制。
在升级过程中,确保存储集群中的所有节点都位于同一 schema。
- 数据流 - 方向、对称 :可以配置单向和双向/符号链接复制。
在这个发行版本中,不支持以下功能:
- 源过滤器
- Storage class
- 目标所有者转换
- 用户模式
当存储桶或 zonegroup 的同步策略时,从 disabled
状态移到 enabled
状态,观察以下行为更改:
正常场景 :
- zonegroup 级别:当同步策略被禁用后,当它被启用时会写入数据,无需额外的步骤。
bucket 级别:当 禁用 同步策略时写入的数据 在启用 策略时不会捕获。在这种情况下,可以应用以下两个临时解决方案之一:
- 向存储桶写入新数据会重新同步旧数据。
-
执行
bucket sync run
命令同步所有旧数据。
当您要从同步策略切换到旧策略时,您需要首先运行 sync init
命令,后跟 radosgw-admin bucket sync run
命令来同步所有对象。
重新定义场景 :
-
zonegroup 级别:
禁用
策略时发生的任何重新划分,同步会在策略再次启用后卡住。此时,新对象也不会同步。作为临时解决方案运行
bucket sync run
命令。 -
bucket 级别:如果在策略
被禁用时
重新分片任何存储桶,则同步会在策略再次启用后卡住。此时,新对象也不会同步。作为临时解决方案运行bucket sync run
命令。
当为 zonegroup 设置为 enabled
且策略被设置为 enabled
或 allowed
bucket 时,管道配置会从 zonegroup 级别而不是 bucket 级别生效。这是一个已知问题 BZ#2240719。
5.8.1. 为 zonegroups 设置双向策略
使用新的同步策略引擎创建 zonegroup 同步策略。对 zonegroup 同步策略的任何更改都需要一个周期更新和提交。
在以下示例中,创建一个组策略,并定义一个数据流,用于将数据从一个区域移动到另一个区域。配置 zonegroups 的管道,以定义可使用此数据流的存储桶。以下示例中的系统包括 3 个区域: us-east (master zone)、us-west 和 us-west-2。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
流程
创建新的同步组,并将状态设置为 允许。
示例
[ceph: root@host01 /]# radosgw-admin sync group create --group-id=group1 --status=allowed
注意在创建完全配置的 zonegroup 复制策略前,建议将 --status 设置为
allowed
,以防止复制启动。为新创建的组创建一个流策略,并将 --flow-type 设置为
symmetrical
来启用双向复制。示例
[ceph: root@host01 /]# radosgw-admin sync group flow create --group-id=group1 \ --flow-id=flow-mirror --flow-type=symmetrical \ --zones=us-east,us-west
创建名为
pipe
的新管道。示例
[ceph: root@host01 /]# radosgw-admin sync group pipe create --group-id=group1 \ --pipe-id=pipe1 --source-zones='*' \ --source-bucket='*' --dest-zones='*' \ --dest-bucket='*'
注意使用 * 通配符用于区,使其包含之前流策略中设置的所有区域,而 * 用于存储桶在区域中复制所有现有存储桶。
配置存储桶同步策略后,将 --status 设置为 enabled。
示例
[ceph: root@host01 /]# radosgw-admin sync group modify --group-id=group1 --status=enabled
更新并提交新周期。
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
注意对于 zonegroup 策略,更新和提交周期是强制的。
可选:检查特定存储桶的同步源和目的地。区域 us-east 和 us-west 中的所有存储桶都以双向方式复制。
示例
[ceph: root@host01 /]# radosgw-admin sync info -bucket buck { "sources": [ { "id": "pipe1", "source": { "zone": "us-east", "bucket": "buck:115b12b3-....4409.1" }, "dest": { "zone": "us-west", "bucket": "buck:115b12b3-....4409.1" }, ... } ], "dests": [ { "id": "pipe1", "source": { "zone": "us-west", "bucket": "buck:115b12b3-....4409.1" }, "dest": { "zone": "us-east", "bucket": "buck:115b12b3-....4409.1" }, ... } ], ... }
以上输出中的 id 字段反映了生成该条目的管道规则。单个规则可以生成多个同步条目,如以下示例中所示。
5.8.2. 为 zonegroups 设置方向策略
使用同步策略引擎以方向方式设置 zone group 的策略。
在以下示例中,创建一个组策略,并配置数据流,以便将数据流从一个区域移动到另一个区域。另外,为 zonegroups 配置管道,以定义可使用此数据流的存储桶。以下示例中的系统包括 3 个区域: us-east
(主区域)、us-west
(secondary zone)和 us-west-2
(备份区域)。在这里,us-west-2
是 us-west
的副本,但数据不会从其中复制。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
流程
在 primary zone 上,创建一个新的同步组,并将状态设置为 允许。
语法
radosgw-admin sync group create --group-id=GROUP_ID --status=allowed
示例
[ceph: root@host01 /]# radosgw-admin sync group create --group-id=group1 --status=allowed
注意在创建完全配置的 zonegroup 复制策略前,建议将
--status
设置为allowed
,以防止复制启动。创建流。
语法
radosgw-admin sync group flow create --group-id=GROUP_ID --flow-id=FLOW_ID --flow-type=directional --source-zone=SOURCE_ZONE_NAME --dest-zone=DESTINATION_ZONE_NAME
示例
[ceph: root@host01 /]# radosgw-admin sync group flow create --group-id=group1 --flow-id=us-west-backup --flow-type=directional --source-zone=us-west --dest-zone=us-west-2
创建管道。
语法
radosgw-admin sync group pipe create --group-id=GROUP_ID --pipe-id=PIPE_ID --source-zones='SOURCE_ZONE_NAME' --dest-zones='DESTINATION_ZONE_NAME'
示例
[ceph: root@host01 /]# radosgw-admin sync group pipe create --group-id=group1 --pipe-id=pipe1 --source-zones='us-west' --dest-zones='us-west-2'
更新并提交新周期。
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
注意对于 zonegroup 策略,更新和提交周期是强制的。
使用两个站点的同步信息,验证 zonegroup 的源和目的地。
语法
radosgw-admin sync info
5.8.3. 为存储桶设置方向策略
使用同步策略引擎以说明方式设置 bucket 的策略。
在以下示例中,创建一个组策略,并配置数据流,以便将数据流从一个区域移动到另一个区域。另外,为 zonegroups 配置管道,以定义可使用此数据流的存储桶。以下示例中的系统包括 3 个区域: us-east
(主区域)、us-west
(secondary zone)和 us-west-2
(备份区域)。在这里,us-west-2
是 us-west
的副本,但数据不会从其中复制。
为 zonegroups 和 bucket 设置方向策略之间的区别是您需要指定 --bucket
选项。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
流程
在 primary zone 上,创建一个新的同步组,并将状态设置为 允许。
语法
radosgw-admin sync group create --group-id=GROUP_ID --status=allowed --bucket=BUCKET_NAME
示例
[ceph: root@host01 /]# radosgw-admin sync group create --group-id=group1 --status=allowed --bucket=buck
注意在创建完全配置的 zonegroup 复制策略前,建议将
--status
设置为allowed
,以防止复制启动。创建流。
语法
radosgw-admin sync group flow create --bucket-name=BUCKET_NAME --group-id=GROUP_ID --flow-id=FLOW_ID --flow-type=directional --source-zone=SOURCE_ZONE_NAME --dest-zone=DESTINATION_ZONE_NAME
示例
[ceph: root@host01 /]# radosgw-admin sync group flow create --bucket-name=buck --group-id=group1 --flow-id=us-west-backup --flow-type=directional --source-zone=us-west --dest-zone=us-west-2
创建管道。
语法
radosgw-admin sync group pipe create --group-id=GROUP_ID --bucket-name=BUCKET_NAME --pipe-id=PIPE_ID --source-zones='SOURCE_ZONE_NAME' --dest-zones='DESTINATION_ZONE_NAME'
示例
[ceph: root@host01 /]# radosgw-admin sync group pipe create --group-id=group1 --bucket-name=buck --pipe-id=pipe1 --source-zones='us-west' --dest-zones='us-west-2'
使用两个站点的同步信息,验证 zonegroup 的源和目的地。
语法
radosgw-admin sync info --bucket-name=BUCKET_NAME
5.8.4. 为存储桶设置双向策略
bucket 级别策略的数据流继承自 zonegroup 策略。bucket 级别策略不需要更改数据流和管道,因为 bucket 级别策略流和管道只是 zonegroup 策略中定义的流的子集。
- 存储 同级别策略可以启用还没有启用的管道,但在 zonegroup 策略中被禁止的除外。
- bucket 级别策略不需要周期更新。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
- 已创建一个同步流。
流程
将 zonegroup 策略
--status
设置为allowed
per-bucket 复制。示例
[ceph: root@host01 /]# radosgw-admin sync group modify --group-id=group1 --status=allowed
修改 zonegroup 策略后更新周期。
示例
[ceph: root@host01 /]# radosgw-admin period update --commit
为要同步到的存储桶创建同步组,并将
--status
设置为enabled
。示例
[ceph: root@host01 /]# radosgw-admin sync group create --bucket=buck \ --group-id=buck-default --status=enabled
为上一步中创建的组创建管道。流继承自 zonegroup 级别策略,其中数据流是对称的。
示例
[ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck \ --group-id=buck-default --pipe-id=pipe1 \ --source-zones='*' --dest-zones='*'
注意使用通配符 * 为存储桶复制指定源和目标区域。
可选: 要检索有关同步策略定义的预期存储桶同步源和目标的信息,请使用
--bucket
标志运行radosgw-admin bucket sync info
命令。示例
[ceph: root@host01 /]# radosgw-admin bucket sync info --bucket buck realm 33157555-f387-44fc-b4b4-3f9c0b32cd66 (india) zonegroup 594f1f63-de6f-4e1e-90b6-105114d7ad55 (shared) zone ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5 (primary) bucket :buck[ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1] source zone e0e75beb-4e28-45ff-8d48-9710de06dcd0 bucket :buck[ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1]
可选: 要检索同步策略定义的预期同步源和目标的信息,请使用 --bucket 标志运行
radosgw-admin sync info
命令。示例
[ceph: root@host01 /]# radosgw-admin sync info --bucket buck { "id": "pipe1", "source": { "zone": "secondary", "bucket": "buck:ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1" }, "dest": { "zone": "primary", "bucket": "buck:ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1" }, "params": { "source": { "filter": { "tags": [] } }, "dest": {}, "priority": 0, "mode": "system", "user": "" } }, { "id": "pipe1", "source": { "zone": "primary", "bucket": "buck:ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1" }, "dest": { "zone": "secondary", "bucket": "buck:ffaa5ba4-c1bd-4c17-b176-2fe34004b4c5.16191.1" }, "params": { "source": { "filter": { "tags": [] } }, "dest": {}, "priority": 0, "mode": "system", "user": "" } }
5.8.5. 在存储桶间同步
您可以在区域间同步源和目标存储桶之间的数据,但不能在同一区中同步。请注意,内部,数据仍然从目标区的源中拉取。
通配符存储桶名称表示当前的存储桶位于 bucket 同步策略上下文中。
bucket 之间有两种同步:
- 从存储桶同步 - 您需要指定源存储桶。
- 同步到存储桶 - 您需要指定目标存储桶。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
从不同的存储桶同步
创建同步组,从另一个区域的存储桶中提取数据。
语法
radosgw-admin sync group create --bucket=BUCKET_NAME --group-id=GROUP_ID --status=enabled
示例
[ceph: root@host01 /]# radosgw-admin sync group create --bucket=buck4 --group-id=buck4-default --status=enabled
拉取镜像。
语法
radosgw-admin sync group pipe create --bucket-name=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --source-zones=SOURCE_ZONE_NAME --source-bucket=SOURCE_BUCKET_NAME --dest-zones=DESTINATION_ZONE_NAME
示例
[ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck4 \ --group-id=buck4-default --pipe-id=pipe1 \ --source-zones='*' --source-bucket=buck5 \ --dest-zones='*'
在本例中,您可以看到源存储桶为
buck5
。可选:从特定区域中的存储桶同步。
示例
[ceph: root@host01 /]# radosgw-admin sync group pipe modify --bucket=buck4 \ --group-id=buck4-default --pipe-id=pipe1 \ --source-zones=us-west --source-bucket=buck5 \ --dest-zones='*'
检查同步状态。
语法
radosgw-admin sync info --bucket-name=BUCKET_NAME
示例
[ceph: root@host01 /]# radosgw-admin sync info --bucket=buck4 { "sources": [], "dests": [], "hints": { "sources": [], "dests": [ "buck4:115b12b3-....14433.2" ] }, "resolved-hints-1": { "sources": [], "dests": [ { "id": "pipe1", "source": { "zone": "us-west", "bucket": "buck5" }, "dest": { "zone": "us-east", "bucket": "buck4:115b12b3-....14433.2" }, ... }, { "id": "pipe1", "source": { "zone": "us-west", "bucket": "buck5" }, "dest": { "zone": "us-west-2", "bucket": "buck4:115b12b3-....14433.2" }, ... } ] }, "resolved-hints": { "sources": [], "dests": [] }
请注意,有
resolved-hints
,这意味着存储桶buck5
发现了它间接的buck4
同步,而不是其自身的策略。buck5
本身的策略为空。
同步到不同的存储桶
创建同步组。
语法
radosgw-admin sync group create --bucket=BUCKET_NAME --group-id=GROUP_ID --status=enabled
示例
[ceph: root@host01 /]# radosgw-admin sync group create --bucket=buck6 \ --group-id=buck6-default --status=enabled
推送数据。
语法
radosgw-admin sync group pipe create --bucket-name=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --source-zones=SOURCE_ZONE_NAME --dest-zones=DESTINATION_ZONE_NAME --dest-bucket=DESTINATION_BUCKET_NAME
示例
[ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck6 \ --group-id=buck6-default --pipe-id=pipe1 \ --source-zones='*' --dest-zones='*' --dest-bucket=buck5
在本例中,您可以看到目标存储桶为
buck5
。可选:与特定区中的存储桶同步。
示例
[ceph: root@host01 /]# radosgw-admin sync group pipe modify --bucket=buck6 \ --group-id=buck6-default --pipe-id=pipe1 \ --source-zones='*' --dest-zones='us-west' --dest-bucket=buck5
检查同步状态。
语法
radosgw-admin sync info --bucket-name=BUCKET_NAME
示例
[ceph: root@host01 /]# radosgw-admin sync info --bucket buck5 { "sources": [], "dests": [ { "id": "pipe1", "source": { "zone": "us-west", "bucket": "buck6:c7887c5b-f6ff-4d5f-9736-aa5cdb4a15e8.20493.4" }, "dest": { "zone": "us-east", "bucket": "buck5" }, "params": { "source": { "filter": { "tags": [] } }, "dest": {}, "priority": 0, "mode": "system", "user": "s3cmd" } }, ], "hints": { "sources": [], "dests": [ "buck5" ] }, "resolved-hints-1": { "sources": [], "dests": [] }, "resolved-hints": { "sources": [], "dests": [] } }
5.8.6. 过滤对象
使用前缀和标签过滤存储桶中的对象。您还可以在 zonegroup 级别策略上设置对象过滤器。如果使用 --bucket
选项,则在存储桶的存储桶级别上设置它。
在以下示例中,从一个区的 buck1
bucket 同步到另一个区域中的 buck1
存储桶,带有以 foo/
前缀的对象。同样,您可以过滤具有 color=blue
等标签的对象。前缀和标签可以合并,其中对象需要同时同步。priority 参数也可以传递,它用于确定是否有多个匹配的不同规则。此配置决定了要使用的规则。
- 如果同步策略中的标签有多个标签,同时同步对象,它会同步与至少一个标签匹配的对象,键值对。对象可能与所有标签集不匹配。
- 如果设置了 prefix 和 tag,则要将对象同步到另一个区域,对象必须具有前缀,任何一个标签应匹配。只有这样,它会相互同步。
先决条件
- 至少两个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
- bucket 已创建。
流程
创建新的同步组。如果要在存储桶级别创建,请使用
--bucket
选项。语法
radosgw-admin sync group create --bucket=BUCKET_NAME --group-id=GROUP_ID --status=enabled
示例
[ceph: root@host01 /]# radosgw-admin sync group create --bucket=buck1 --group-id=buck8-default --status=enabled
对象与标签匹配的 bucket 之间的同步。流继承自 zonegroup 级别策略,其中数据流是对称的。
语法
radosgw-admin sync group pipe create --bucket=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --tags-add=KEY1=VALUE1,KEY2=VALUE2 --source-zones='ZONE_NAME1','ZONE_NAME2' --dest-zones='ZONE_NAME1','ZONE_NAME2'
示例
[ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck1 \ --group-id=buck1-default --pipe-id=pipe-tags \ --tags-add=color=blue,color=red --source-zones='*' \ --dest-zones='*'
在对象与前缀匹配的 bucket 之间进行同步。流继承自 zonegroup 级别策略,其中数据流是对称的。
语法
radosgw-admin sync group pipe create --bucket=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --prefix=PREFIX --source-zones='ZONE_NAME1','ZONE_NAME2' --dest-zones='ZONE_NAME1','ZONE_NAME2'
示例
[ceph: root@host01 /]# radosgw-admin sync group pipe create --bucket=buck1 \ --group-id=buck1-default --pipe-id=pipe-prefix \ --prefix=foo/ --source-zones='*' --dest-zones='*' \
检查更新的同步。
语法
radosgw-admin sync info --bucket=BUCKET_NAME
示例
[ceph: root@host01 /]# radosgw-admin sync info --bucket=buck1
注意在示例中,只有两个不同的目的地,没有源反映,每个源进行配置。当同步过程发生时,它会为其同步的每个对象选择相关规则。
5.8.7. 禁用存储桶之间的策略
您可以禁用存储桶之间的策略,以及与 禁止
或允许
的状态同步信息。
有关可用于 zonegroup 和 bucket 级别同步策略的不同组合,请参阅多站点同步策略 状态。
在某些情况下,若要中断两个存储桶之间的复制,您可以将存储桶的组策略设置为 禁止
。如果任何存储桶没有发生同步,您也可以在 zonegroup 级别禁用策略。
您还可以使用 radosgw-admin sync group create
命令在禁用状态下创建一个同步策略,并具有 禁止
状态。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 已安装 Ceph 对象网关。
流程
运行
sync group modify
命令,将允许 的状态更改为 禁止。示例
[ceph: root@host01 /]# radosgw-admin sync group modify --group-id buck-default --status forbidden --bucket buck { "groups": [ { "id": "buck-default", "data_flow": {}, "pipes": [ { "id": "pipe1", "source": { "bucket": "*", "zones": [ "*" ] }, "dest": { "bucket": "*", "zones": [ "*" ] }, "params": { "source": { "filter": { "tags": [] } }, "dest": {}, "priority": 0, "mode": "system", } } ], "status": "forbidden" } ] }
在本例中,存储桶
buck
的复制在区域us-east
和us-west
之间中断。注意不需要在周期内更新和提交,因为这是存储桶同步策略。
可选:运行
sync info 命令检查
存储桶buck
的同步状态。示例
[ceph: root@host01 /]# radosgw-admin sync info --bucket buck { "sources": [], "dests": [], "hints": { "sources": [], "dests": [] }, "resolved-hints-1": { "sources": [], "dests": [] }, "resolved-hints": { "sources": [], "dests": [] } }
注意因为复制中断,所以没有源和目标目标。