5.8. 使用多站点同步策略
作为存储管理员,您可以在存储桶级别使用多站点同步策略来控制不同区域中 bucket 之间的数据移动。这些策略称为存储桶粒度同步策略。在以前的版本中,区中的所有存储桶都是对称的。这意味着每个区域都包含给定存储桶的镜像副本,并且存储桶副本在所有区域中都相同。同步过程假定存储桶同步源和存储桶同步目的地引用同一存储桶。
bucket 同步策略仅适用于数据,无论存在存储桶同步策略,在多站点中的所有区域间同步元数据。当存储桶同步策略处于 allowed
或 forbidden
时,创建、修改或删除的对象,它不会在策略生效时自动同步。运行 bucket sync run
命令来同步这些对象。
如果在 zonegroup 级别定义了多个同步策略,则任何时候都只能有一个策略处于 enabled 状态。如果需要,我们可以切换策略
同步策略替代旧的 zone group coarse 配置(sync_from*
)。同步策略可以在 zone group 级别上配置。如果配置了该配置,它将替换 zone group 级别的旧式配置,但也可在 bucket 级别上进行配置。
bucket 同步策略适用于存档区域。归档区域的移动不是双向的,其中所有对象可以从活跃区域移到存档区域。但是,您无法将对象从存档区域移到活跃区域,因为存档区域是只读的。
zone group 的存储桶同步策略示例
[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": "pipe1", "source": { "zone": "us-west", "bucket": "buck:115b12b3-....4409.1" }, "dest": { "zone": "us-west-2", "bucket": "buck:115b12b3-....4409.1" }, ... } ], ... }
先决条件
- 正在运行的 Red Hat Ceph Storage 集群。
- Ceph 监控节点的根级别访问权限.
- 安装 Ceph 对象网关软件.
5.8.1. 多站点同步策略组状态
在同步策略中,可以定义可以包含 data-flow 配置列表的多个组,以及管道配置列表。data-flow 定义不同区域之间的数据流。它可以定义对称数据流,其中有多个区域同步数据,并且可以定义方向数据流,其中的数据从一个区域移动到另一个区域。
管道定义可以使用这些数据流的实际存储桶,以及与它关联的属性,如源对象前缀。
同步策略组可能处于 3 个状态:
-
已启用并启用了
5-4sync。 -
允许允许
wagon-wagonsync。 -
禁止禁止
由此组定义的 Forbiddensync。
当区域复制时,您可以使用同步策略禁用特定存储桶的复制。以下是解决策略冲突需要遵循的语义:
zonegroup | Bucket | 结果 |
---|---|---|
enabled | enabled | enabled |
enabled | allowed | enabled |
enabled | forbidden | disabled |
allowed | enabled | enabled |
allowed | allowed | disabled |
allowed | forbidden | disabled |
forbidden | enabled | disabled |
forbidden | allowed | disabled |
forbidden | forbidden | disabled |
对于设置为反映任何同步对的多个组策略(SOURCE_ZONE、SOURCE_BUCKET)、(DESTINATION_ZONE,DESTINATION_BUCKET),以下规则按以下顺序应用:
-
即使禁用了一个同步策略
,
同步也会被禁用
。 -
至少应
启用
一个策略,以便允许同步。
此组中的同步状态可以覆盖其他组。
策略可以在 bucket 级别上定义。bucket 级别同步策略继承 zonegroup 策略的数据流,并且只能定义 zonegroup 允许的子集。
通配符区域,策略中的通配符 bucket 参数定义所有相关区域或所有相关存储桶。在 bucket 策略的上下文中,这意味着当前的 bucket 实例。镜像整个区的灾难恢复配置不需要在存储桶上配置任何内容。但是,对于精细的存储桶同步,最好在 zonegroup 级别(例如,使用通配符)允许(status=allowed
)将管道配置为同步。但是,仅在存储桶级别启用特定的同步(status=enabled
)。如果需要,存储桶级别的策略可以将数据移动限制到特定的相关区域。
对 zonegroup 策略的任何更改都需要应用到 zonegroup master zone,并且需要周期更新和提交。对 bucket 策略的更改需要应用到 zonegroup master zone。Ceph 对象网关动态处理这些更改。
S3 存储桶复制 API
S3 bucket 复制 API 已实施,允许用户在不同存储桶之间创建复制规则。请注意,虽然 AWS 复制功能允许在同一区域内复制 bucket,但 Ceph 对象网关目前不允许它。但是,Ceph 对象网关 API 也添加了一个 Zone
数组,允许用户选择要同步特定存储桶的区域。
其它资源
- 如需了解更多详细信息,请参阅 S3 存储桶复制 API。
5.8.2. 检索当前策略
您可以使用 get
命令检索当前 zonegroup 同步策略或特定的存储桶策略。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
流程
检索当前的 zonegroup 同步策略或存储桶策略。要检索特定的存储桶策略,请使用 the-
bucket
选项:语法
radosgw-admin sync policy get --bucket=BUCKET_NAME
Example
[ceph: root@host01 /]# radosgw-admin sync policy get --bucket=mybucket
5.8.3. 创建同步策略组
您可以为当前 zone group 或特定存储桶创建同步策略组。
当为存储桶粒度复制创建同步策略时,已从 禁止
变为 启用的
同步策略组,可能需要手动更新才能完成同步过程。
例如,如果在 禁止
策略将任何数据写入 bucket1
,则在策略更改为 启用
后,数据可能无法在区域间正确同步。要正确同步更改,请在同步策略 上运行 bucket sync
命令。如果在策略被禁止时重新划分存储桶,则需要 这一步
。在这种情况下,在启用策略后,还必须使用 bucket sync run
命令。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
- 为存档区域创建时,请确保在同步策略组之前创建归档区域。
流程
创建同步策略组或存储桶策略。要创建存储桶策略,请使用
--bucket
选项:语法
radosgw-admin sync group create --bucket=BUCKET_NAME --group-id=GROUP_ID --status=enabled | allowed | forbidden
Example
[ceph: root@host01 /]# radosgw-admin sync group create --group-id=mygroup1 --status=enabled
可选:为存储桶粒度复制手动完成同步过程。
注意当将 用作存储桶粒度复制的归档区的一部分时,如果策略已写入,或者策略被禁止,则此步骤是强制的。
语法
radosgw-admin bucket sync run
Example
[ceph: root@host01 /]# radosgw-admin bucket sync run
其它资源
有关配置存档区域和 bucket 粒度复制的更多信息,请参阅配置归档区域。
5.8.4. 修改同步策略组
您可以修改当前 zone group 或特定存储桶的现有同步策略组。
当为已 禁止
的同步策略组修改存储桶的同步策略 时
,可能需要手动更新才能完成同步过程。
例如,如果在 禁止
策略将任何数据写入 bucket1
,则在策略更改为 启用
后,数据可能无法在区域间正确同步。要正确同步更改,请在同步策略 上运行 bucket sync
命令。如果在策略被禁止时重新划分存储桶,则需要 这一步
。在这种情况下,在启用策略后,还必须使用 bucket sync run
命令。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
- 修改存档区域时,请确保在同步策略组之前创建归档区域。
流程
修改同步策略组或存储桶策略。要修改存储桶策略,请使用 the-
bucket
选项。语法
radosgw-admin sync group modify --bucket=BUCKET_NAME --group-id=GROUP_ID --status=enabled | allowed | forbidden
Example
[ceph: root@host01 /]# radosgw-admin sync group modify --group-id=mygroup1 --status=forbidden
可选:为存储桶粒度复制手动完成同步过程。
注意当将 用作存储桶粒度复制的归档区的一部分时,如果策略已写入,或者策略被禁止,则此步骤是强制的。
语法
radosgw-admin bucket sync run
Example
[ceph: root@host01 /]# radosgw-admin bucket sync run
其它资源
有关配置存档区域和 bucket 粒度复制的更多信息,请参阅配置归档区域。
5.8.5. 获取同步策略组
您可以使用 group get
命令来按组 ID 显示当前的同步策略组,或者显示特定的存储桶策略。
如果没有提供-- bucket
选项,则在 zonegroup 级别中创建的组会检索,而不是存储桶级别的组。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
流程
显示当前的同步策略组或存储桶策略。要显示特定的存储桶策略,请使用 the-
bucket
选项:语法
radosgw-admin sync group get --bucket=BUCKET_NAME --group-id=GROUP_ID
Example
[ceph: root@host01 /]# radosgw-admin sync group get --group-id=mygroup
5.8.6. 删除同步策略组
您可以使用 group remove
命令删除按组 ID 的当前同步策略组,或者删除特定的存储桶策略策略。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
流程
删除当前的同步策略组或存储桶策略。要删除特定的存储桶策略,请使用 the-
bucket
选项:语法
radosgw-admin sync group remove --bucket=BUCKET_NAME --group-id=GROUP_ID
Example
[ceph: root@host01 /]# radosgw-admin sync group remove --group-id=mygroup
5.8.7. 创建同步流
您可以为同步策略组或特定存储桶创建两种不同类型的流:
- 方向性同步流
- 对称同步流
group flow create
命令创建一个同步流。如果您为已具有同步流的同步策略组或存储桶发出 group flow create
命令,该命令将覆盖同步流的现有设置,并应用您指定的设置。
选项 | 描述 | 必填/选填 |
---|---|---|
--bucket | 需要配置同步策略的存储桶名称。仅在存储桶级别的同步策略中使用。 | 选填 |
--group-id | 同步组的 ID。 | 必填 |
--flow-id | 流的 ID。 | 必填 |
--flow-type | 同步策略组或特定存储桶的流类型 - 方向或对称。 | 必填 |
--source-zone | 指定应进行同步的源区。将数据发送到同步组的区域。如果同步组的流类型是方向,则需要此项。 | 选填 |
--dest-zone | 指定应进行同步的目标区域。从同步组接收数据的区。如果同步组的流类型是方向,则需要此项。 | 选填 |
--zones | 同步组一部分的区域。区域提到将是发送者和接收器区域。指定由 "," 分隔的区域。如果同步组的流类型是 symmetrical,则需要此项。 | 选填 |
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
流程
创建或更新方向同步流。要为特定存储桶创建或更新同步流,请使用
--bucket
选项。语法
radosgw-admin sync group flow create --bucket=BUCKET_NAME --group-id=GROUP_ID --flow-id=FLOW_ID --flow-type=directional --source-zone=SOURCE_ZONE --dest-zone=DESTINATION_ZONE
创建或更新对称同步流。要为对称流类型指定多个区域,请在
--zones
选项中使用逗号分隔的列表。语法
radosgw-admin sync group flow create --bucket=BUCKET_NAME --group-id=GROUP_ID --flow-id=FLOW_ID --flow-type=symmetrical --zones=ZONE_NAME1,ZONE_NAME2
zones
是需要添加到流中的所有区域的逗号分隔列表。
5.8.8. 删除同步流和区域
group flow remove
命令从同步策略组或存储桶中删除同步流或区域。
对于使用方向流的同步策略组或 bucket,group flow remove
命令会删除流。对于使用对称流的同步策略组或 bucket,您可以使用 group flow remove
命令从流中删除指定区域,或者移除流。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
流程
删除方向同步流。要删除特定存储桶的方向同步流,请使用
--bucket
选项。语法
radosgw-admin sync group flow remove --bucket=BUCKET_NAME --group-id=GROUP_ID --flow-id=FLOW_ID --flow-type=directional --source-zone=SOURCE_ZONE --dest-zone=DESTINATION_ZONE
从对称同步流中删除特定区域。要从对称流中删除多个区域,请对
--zones
选项使用逗号分隔的列表。语法
radosgw-admin sync group flow remove --bucket=BUCKET_NAME --group-id=GROUP_ID --flow-id=FLOW_ID --flow-type=symmetrical --zones=ZONE_NAME1,ZONE_NAME2
移除对称同步流。要删除 zonegroup 级别的同步流,请删除 the-
bucket
选项。语法
radosgw-admin sync group flow remove --group-id=GROUP_ID --flow-id=FLOW_ID --flow-type=symmetrical --zones=ZONE_NAME1,ZONE_NAME2
5.8.9. 创建或修改同步组管道
作为存储管理员,您可以定义管道来指定哪些存储桶可以使用您配置的数据流,以及与这些数据流关联的属性。
sync group pipe create
命令允许您创建管道,它们是特定存储桶或 bucket 组或特定区域组之间的自定义同步组数据流。
这个命令使用以下选项:
选项 | 描述 | 必填/选填 |
---|---|---|
--bucket | 需要配置同步策略的存储桶的名称。仅在存储桶级别的同步策略中使用。 | 选填 |
--group-id | 同步组的 ID | 必填 |
--pipe-id | 管道 ID | 必填 |
--source-zones |
将数据发送到同步组的区域。使用单引号(')作为值。使用逗号分隔多个区域。对于与数据流规则匹配的所有区域,使用通配符 | 必填 |
--source-bucket |
将数据发送到同步组的 bucket 或 bucket。如果没有提到存储桶名称,则将 | 选填 |
--source-bucket-id | 源存储桶的 ID。 | 选填 |
--dest-zones |
接收同步数据的区域或区域。使用单引号(')作为值。使用逗号分隔多个区域。对于与数据流规则匹配的所有区域,使用通配符 | 必填 |
--dest-bucket |
接收同步数据的 bucket。如果没有提到存储桶名称,则将 | 选填 |
--dest-bucket-id | 目标 bucket 的 ID。 | 选填 |
--prefix |
bucket 前缀。使用通配符 | 选填 |
--prefix-rm | 不要使用 bucket 前缀进行过滤。 | 选填 |
--tags-add | 键=值对的逗号分隔列表。 | 选填 |
--tags-rm | 删除一个或多个标签的 key=value 对。 | 选填 |
--dest-owner | 来自源的对象的目的地所有者。 | 选填 |
--storage-class | 来自源的对象的目的地存储类。 | 选填 |
--mode |
将 | 选填 |
--uid | 用于用户模式的权限验证。指定发布同步操作的用户 ID。 | 选填 |
如果要在 zonegroup 级别上为特定存储桶启用/禁用同步,请将 zonegroup 级别同步策略设置为启用/禁用,并为每个 bucket with-source-bucket 和-- dest-
id、i.e、bucket-id
启用/禁用同步,或使用 bucket-
--source-bucket
-id 和--dest-bucket-id
。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
流程
创建同步组管道。
create
命令还用于通过仅创建相关选项的同步组管道来更新命令。语法
radosgw-admin sync group pipe create --bucket=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --source-zones='ZONE_NAME','ZONE_NAME2'... --source-bucket=SOURCE_BUCKET --source-bucket-id=SOURCE_BUCKET_ID --dest-zones='ZONE_NAME','ZONE_NAME2'... --dest-bucket=DESTINATION_BUCKET --dest-bucket-id=DESTINATION_BUCKET_ID --prefix=SOURCE_PREFIX --prefix-rm --tags-add=KEY1=VALUE1,KEY2=VALUE2,.. --tags-rm=KEY1=VALUE1,KEY2=VALUE2, ... --dest-owner=OWNER_ID --storage-class=STORAGE_CLASS --mode=USER --uid=USER_ID
5.8.10. 修改或删除同步组管道
作为存储管理员,您可以使用 sync group pipe modify
命令或 sync group pipe remove
命令,通过删除某些选项来修改同步组管道。您还可以使用 sync group pipe remove
命令删除区域、存储桶或同步组管道。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
流程
使用
modify
参数修改同步组管道选项。语法
radosgw-admin sync group pipe modify --bucket=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --source-zones='ZONE_NAME','ZONE_NAME2'... --source-bucket=SOURCE_BUCKET1 --source-bucket-id=SOURCE_BUCKET_ID --dest-zones='ZONE_NAME','ZONE_NAME2'... --dest-bucket=DESTINATION_BUCKET1 --dest-bucket-id=_DESTINATION_BUCKET-ID
注意确保将区域放在单引号(')中。源存储桶不需要引号。
Example
[root@host01 ~]# radosgw-admin sync group pipe modify --group-id=zonegroup --pipe-id=pipe --dest-zones='primary','secondary','tertiary' --source-zones='primary','secondary','tertiary' --source-bucket=pri-bkt-1 --dest-bucket=pri-bkt-1
使用
remove
参数修改同步组管道选项。语法
radosgw-admin sync group pipe remove --bucket=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID --source-zones='ZONE_NAME','ZONE_NAME2'... --source-bucket=SOURCE_BUCKET, --source-bucket-id=SOURCE_BUCKET_ID --dest-zones='ZONE_NAME','ZONE_NAME2'... --dest-bucket=DESTINATION_BUCKET --dest-bucket-id=DESTINATION_BUCKET-ID
Example
[root@host01 ~]# radosgw-admin sync group pipe remove --group-id=zonegroup --pipe-id=pipe --dest-zones='primary','secondary','tertiary' --source-zones='primary','secondary','tertiary' --source-bucket=pri-bkt-1 --dest-bucket=pri-bkt-1
删除同步组管道。
语法
radosgw-admin sync group pipe remove --bucket=BUCKET_NAME --group-id=GROUP_ID --pipe-id=PIPE_ID
Example
[root@host01 ~]# radosgw-admin sync group pipe remove -bucket-name=mybuck --group-id=zonegroup --pipe-id=pipe
5.8.11. 获取同步操作的信息
sync info
命令可让您获取有关同步策略所定义的预期同步源和目标的信息。
当您为存储桶创建同步策略时,该策略定义数据如何从该存储桶移动到不同区域的不同 bucket。创建策略也会创建一个 bucket 依赖项列表,每当该 bucket 与其他存储桶同步时,它们就可用作提示。请注意,存储桶可以引用另一个存储桶,而无需实际同步,因为同步取决于数据流是否允许同步进行。
--bucket
和 effective-zone-name
参数是可选的。如果您调用 sync info
命令但不指定任何选项,则对象网关会返回所有区域中同步策略定义的所有同步操作。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群。
-
root 或
sudo
访问权限。 - 已安装 Ceph 对象网关。
- 定义了组同步策略。
流程
获取有关存储桶同步操作的信息:
语法
radosgw-admin sync info --bucket=BUCKET_NAME --effective-zone-name=ZONE_NAME
在 zonegroup 级别获取有关同步操作的信息:
语法
radosgw-admin sync info