10.5. 在 Multicloud Object Gateway bucket 复制中同步版本
先决条件
从对象存储桶声明(OBC)和任何 MCG 目标存储桶创建的 Multicloud Object Gateway (MCG)源存储桶。例如,您可以使用 MCG 命令行界面(CLI)使用 OBC 创建两个存储桶:
使用 OBC 创建源存储桶:
$ mcg-cli obc create source-bucket --exact $ mcg-cli obc create target-bucket --exactwhere
--exact是可选的。
确保设置了带有 MCG 凭证和端点的 S3 客户端别名。
$ NOOBAA_ACCESS_KEY=$(oc extract secret/noobaa-admin -n openshift-storage --keys=AWS_ACCESS_KEY_ID --to=- 2>/dev/null); \ NOOBAA_SECRET_KEY=$(oc extract secret/noobaa-admin -n openshift-storage --keys=AWS_SECRET_ACCESS_KEY --to=- 2>/dev/null); \ S3_ENDPOINT=https://$(oc get route s3 -n openshift-storage -o json | jq -r ".spec.host")$ alias common_s3='AWS_ACCESS_KEY_ID=$NOOBAA_ACCESS_KEY AWS_SECRET_ACCESS_KEY=$NOOBAA_SECRET_KEY aws --endpoint $S3_ENDPOINT --no-verify-ssl'; \ alias s3_alias='common_s3 s3'; \ alias s3api_alias='common_s3 s3api'在 AWS S3 客户端中使用
put-bucket-versioning命令,确保在源和目标存储桶上启用版本控制:$ s3api_alias put-bucket-versioning --bucket source-bucket --versioning-configuration Status=Enabled$ s3api_alias put-bucket-versioning --bucket target-bucket --versioning-configuration Status=Enabled流程
对源存储桶的 OBC 进行补丁或编辑带有
sync_versions: true的复制策略:$ oc patch obc source-bucket -n openshift-storage --type=merge -p '{"spec": {"additionalConfig": {"replicationPolicy": "{\"rules\":[{\"rule_id\":\"replication-rule-a\",\"destination_bucket\":\"target-bucket\", \"sync_versions\": true}]}"}}}'普通存储桶复制仅复制最新版本,而
sync_versions的使用会添加复制至旧版本的功能,并根据原始顺序复制。
注意
- 如果配置和使用日志基础复制,则会复制删除标记。
- 删除版本 ID 不会复制,以避免人为错误。
验证步骤
通过在对象键下添加几个版本并等待它们复制到目标存储桶,来验证到目标存储桶的复制:
$ echo 'version_a' | s3_alias cp - s3://source-bucket/versioned_obj.txt$ echo 'version_b' | s3_alias cp - s3://source-bucket/versioned_obj.txt$ echo 'version_c' | s3_alias cp - s3://source-bucket/versioned_obj.txt几分钟后,比较两个存储桶上的对象版本:
$ s3api_alias list-object-versions --bucket source-bucket --prefix versioned_obj.txt | jq -r ".Versions[].ETag" "aaabf266d38a8e995cef03c13ee9a7f1" "181d8a23f59939c0cddec1692e05cdf3" "ebc538cc6ffa04a39263f4b1be2f832f"$ s3api_alias list-object-versions --bucket target-bucket --prefix versioned_obj.txt | jq -r ".Versions[].ETag" "aaabf266d38a8e995cef03c13ee9a7f1" "181d8a23f59939c0cddec1692e05cdf3" "ebc538cc6ffa04a39263f4b1be2f832f"