多站点存储桶粒度同步策略提供对不同区域中存储桶之间数据移动的细粒度控制。
在同步策略中,可以定义多个包含数据流配置列表的组,以及管道配置列表。
数据流定义了不同区域之间的数据流。 它可以定义对称数据流,其中多个区域相互同步数据,它可以定义定向数据流,其中数据以一种方式从一个区域移动到另一个区域。
管道定义了可以使用这些数据流的实际存储桶,以及与之关联的属性(例如:源对象前缀)。
同步策略组可以处于 3 种状态:
enabled:允许并启用同步
allowed:允许同步
forbidden:同步(由该组定义)不是 允许并且可以覆盖其他组
可以在存储桶级别定义策略。存储桶级同步策略继承了 zonegroup 策略的数据流,并且只能定义 zonegroup 允许的内容的一个子集。
重要:对 zonegroup 策略的任何更改都需要应用于 zonegroup 主区域,并且需要周期更新和提交。改变存储桶策略需要在 zonegroup master 区域上应用。更改由 rgw 动态处理。
S3 存储桶复制 API 也已实现,允许用户在不同存储桶之间创建复制规则。请注意,虽然 AWS 复制功能允许在同一区域内进行存储桶复制,但 rgw 目前不允许这样做。
但是,rgw api 还添加了一个新的“区域”数组,允许用户选择特定存储桶将同步到哪些区域。
示例 1:两个区域,完整镜像
这类似于旧的(pre Octopus) 同步功能,但通过新的同步策略引擎完成。请注意,对 zonegroup 同步策略的更改需要定期更新和提交。
[us-east] $ radosgw-admin sync group create --group-id=group1 --status=allowed
[us-east] $ radosgw-admin sync group flow create --group-id=group1 \
--flow-id=flow-mirror --flow-type=symmetrical \
--zones=us-east,us-west
[us-east] $ radosgw-admin sync group pipe create --group-id=group1 \
--pipe-id=pipe1 --source-zones='*' \
--source-bucket='*' --dest-zones='*' \
--dest-bucket='*'
[us-east] $ radosgw-admin sync group modify --group-id=group1 --status=enabled
[us-east] $ radosgw-admin period update --commit
$ radosgw-admin sync info --bucket=buck
{
"sources": [
{
"id": "pipe1",
"source": {
"zone": "us-west",
"bucket": "buck:115b12b3-....4409.1"
},
"dest": {
"zone": "us-east",
"bucket": "buck:115b12b3-....4409.1"
},
"params": {
...
}
}
],
"dests": [
{
"id": "pipe1",
"source": {
"zone": "us-east",
"bucket": "buck:115b12b3-....4409.1"
},
"dest": {
"zone": "us-west",
"bucket": "buck:115b12b3-....4409.1"
},
...
}
],
...
}
}
示例 2:镜像特定存储桶
使用相同的组配置,但这次将其切换到 allowed state,表示允许同步但未启用。
[us-east] $ radosgw-admin sync group modify --group-id=group1 --status=allowed
[us-east] $ radosgw-admin period update --commit
下面将为现有的存储桶创建存储桶级别的策略规则 buck2。
请注意,存储桶需要存在才能设置此策略,并且修改存储桶策略的管理命令需要在主区域上运行,但是它们不需要周期更新。
无需更改数据流,因为它是从 zonegroup 策略继承的。存储桶策略流将只是区域组策略中定义的流的子集。
管道也是如此,尽管存储桶策略可以启用在 zonegroup 策略中未启用(尽管不是禁止)的管道。
[us-east] $ radosgw-admin sync group create --bucket=buck2 \
--group-id=buck2-default --status=enabled
[us-east] $ radosgw-admin sync group pipe create --bucket=buck2 \
--group-id=buck2-default --pipe-id=pipe1 \
--source-zones='*' --dest-zones='*'