10.5. Multicloud Object Gateway バケットレプリケーションのバージョンの同期
前提条件
Object Bucket Claim (OBC) と任意の MCG ターゲットバケットから作成される Multicloud Object Gateway (MCG) ソースバケット。たとえば、MCG コマンドラインインターフェイス (CLI) を使用して OBC で 2 つのバケットを作成できます。
OBC を使用してソースバケットを作成します。
$ odf noobaa obc create source-bucket --exact $ odf noobaa obc create target-bucket --exact--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を使用すると、古いバージョンも元の順序でレプリケートする機能が追加されます。
- 設定され、ログベースレプリケーションを使用する場合、Delete マーカーはレプリケートされます。
- 削除バージョン 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"