5.8. バケットの詳細な同期ポリシー
次の機能がサポートされるようになりました。
- グリーンフィールドデプロイメント: このリリースでは、新しいマルチサイトデプロイメントがサポートされています。バケットの詳細な同期レプリケーションを設定するには、少なくとも新しいゾーングループ/ゾーンを設定する必要があります。
- ブラウンフィールドデプロイメント: Ceph Object Gateway のマルチサイトレプリケーション設定を、新しく機能する Ceph Object Gateway バケットの詳細な同期ポリシーレプリケーションに移行またはアップグレードします。
アップグレード中は、ストレージクラスター内のすべてのノードが同じスキーマにあることを確認してください。
- データフロー - 方向性、対称性: 単方向レプリケーションと双方向/対称レプリケーションの両方を設定できます。
次の機能は、このリリースではサポートされていません。
- Source フィルター
- ストレージクラス
- 宛先所有者の翻訳
- User mode
バケットまたはゾーングループの同期ポリシーが disabled
状態から enabled
状態に移行すると、次の動作の変化が見られます。
通常シナリオ:
- ゾーングループレベル: 同期ポリシーが 無効になっている ときに書き込まれたデータは、追加の手順を行わなくても、有効になる とすぐにキャッチアップします。
バケットレベル: 同期ポリシーが 無効な ときに書き込まれたデータは、ポリシーが 有効な ときにはキャッチアップしません。この場合、次の 2 つの回避策のいずれかを適用できます。
- 新しいデータをバケットに書き込むと、古いデータが再同期されます。
-
bucket sync run
コマンドを実行すると、すべての古いデータが同期されます。
同期ポリシーからレガシーポリシーに切り替える場合は、最初に sync init
コマンドを実行し、続いて radosgw-admin bucket sync run
コマンドを実行してすべてのオブジェクトを同期する必要があります。
リシャードシナリオ:
-
ゾーングループレベル: ポリシーが
disabled
なっているときに発生するリシャードは、ポリシーが再度enabled
になった後に同期が停止します。この時点では、新しいオブジェクトも同期しません。回避策としてbucket sync run
コマンドを実行します。 -
バケットレベル: ポリシーが
disabled
のときにバケットがリシャーディングされると、ポリシーが再度 enabled になった後に同期が停止します。この時点では、新しいオブジェクトも同期しません。回避策としてbucket sync run
コマンドを実行します。
ゾーングループに対してポリシーが enabled
に設定され、バケットに対してポリシーが enabled
または allowed
に設定されている場合、パイプ設定はバケットレベルではなくゾーングループレベルから有効になります。これは既知の問題です (BZ#2240719)。
5.8.1. ゾーングループの双方向ポリシーの設定
ゾーングループ同期ポリシーは、新しい同期ポリシーエンジンを使用して作成されます。ゾーングループ同期ポリシーを変更するには、期間の更新とコミットが必要です。
次の例では、グループポリシーを作成し、あるゾーンから別のゾーンにデータを移動するためのデータフローを定義します。ゾーングループのパイプを設定して、このデータフローを使用できるバケットを定義します。以下の例のシステムには、us-east (マスターゾーン)、us-west、および us-west-2 の 3 つのゾーンが含まれています。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
手順
ステータスを allowed に設定して新しい同期グループを作成します。
例
[ceph: root@host01 /]# radosgw-admin sync group create --group-id=group1 --status=allowed
注記完全に設定されたゾーングループレプリケーションポリシーが作成されるまでは、レプリケーションが開始されないように --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
注記期間の更新とコミットは、ゾーングループポリシーでは必須です。
オプション: 特定のバケットの同期元と同期先を確認します。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 フィールドは、そのエントリーを生成したパイプルールを反映しています。以下の例に示すように、1 つのルールで複数の同期エントリーを生成できます。
5.8.2. ゾーングループの方向性ポリシーの設定
同期ポリシーエンジンを使用して、ゾーングループのポリシーを一方向に設定します。
次の例では、グループポリシーを作成し、あるゾーンから別のゾーンにデータを移動するためのデータフローを設定します。ゾーングループのパイプを設定して、このデータフローを使用できるバケットを定義します。次の例のシステムには、us-east
(プライマリーゾーン)、us-west
(セカンダリーゾーン)、および us-west-2
(バックアップゾーン) の 3 つのゾーンが含まれています。ここで、us-west-2
は us-west
のレプリカですが、データはそこから複製されません。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
手順
プライマリーゾーンで、ステータスを allowed に設定して新しい同期グループを作成します。
構文
radosgw-admin sync group create --group-id=GROUP_ID --status=allowed
例
[ceph: root@host01 /]# radosgw-admin sync group create --group-id=group1 --status=allowed
注記完全に設定されたゾーングループレプリケーションポリシーが作成されるまでは、レプリケーションが開始されないように
--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
注記期間の更新とコミットは、ゾーングループポリシーでは必須です。
両方のサイトの同期情報を使用して、ゾーングループの送信元と宛先を確認します。
構文
radosgw-admin sync info
5.8.3. バケットの方向性ポリシーの設定
同期ポリシーエンジンを使用してバケットのポリシーを一方向に設定します。
次の例では、グループポリシーを作成し、あるゾーンから別のゾーンにデータを移動するためのデータフローを設定します。ゾーングループのパイプを設定して、このデータフローを使用できるバケットを定義します。次の例のシステムには、us-east
(プライマリーゾーン)、us-west
(セカンダリーゾーン)、および us-west-2
(バックアップゾーン) の 3 つのゾーンが含まれています。ここで、us-west-2
は us-west
のレプリカですが、データはそこから複製されません。
ゾーングループとバケットの方向ポリシーの設定の違いは、--bucket
オプションを指定する必要があることです。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
手順
プライマリーゾーンで、ステータスを allowed に設定して新しい同期グループを作成します。
構文
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
注記完全に設定されたゾーングループレプリケーションポリシーが作成されるまでは、レプリケーションが開始されないように
--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'
両方のサイトの同期情報を使用して、ゾーングループの送信元と宛先を確認します。
構文
radosgw-admin sync info --bucket-name=BUCKET_NAME
5.8.4. バケットの双方向ポリシーの設定
バケットレベルのポリシーのデータフローは、ゾーングループポリシーから継承されます。バケットレベルのポリシーのフローとパイプは、ゾーングループポリシーで定義されたフローのサブセットにすぎないため、バケットレベルのポリシーのデータフローとパイプを変更する必要はありません。
- バケットレベルのポリシーでは、ゾーングループポリシーで 禁止されている パイプを除き、有効になっていないパイプを 有効にする ことができます。
- バケットレベルのポリシーでは期間の更新は必要ありません。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
- 同期フローが作成されます。
手順
ゾーングループポリシー
--status
をallowed
に設定して、バケットごとのレプリケーションを許可します。例
[ceph: root@host01 /]# radosgw-admin sync group modify --group-id=group1 --status=allowed
ゾーングループポリシーを変更した後、期間を更新します。
例
[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
前の手順で作成したグループのパイプを作成します。フローは、データフローが対称であるゾーングループレベルのポリシーから継承されます。
例
[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. バケット間の同期
ゾーンをまたいでソースバケットと宛先バケットの間でデータを同期することはできますが、同一ゾーン内で同期することはできません。内部では、データは引き続き宛先ゾーンでソースからプルされることに注意してください。
ワイルドカードバケット名は、現在のバケットがバケット同期ポリシーのコンテキスト内にあることを意味します。
バケット間の同期には 2 つのタイプがあります。
- バケットからの同期 - ソースバケットを指定する必要があります。
- バケットへの同期 - 宛先バケットを指定する必要があります。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
別のバケットからの同期
同期グループを作成して、別のゾーンのバケットからデータをプルします。
構文
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. オブジェクトのフィルタリング
接頭辞とタグを使用してバケット内のオブジェクトをフィルターします。ゾーングループレベルのポリシーでもオブジェクトフィルターを設定できます。--bucket
オプションを使用すると、バケットレベルで設定されます。
次の例では、あるゾーンの buck1
バケットからの同期が、接頭辞 foo/
で始まるオブジェクトを持つ別のゾーンの buck1
バケットに同期されます。同様に、color=blue
などのタグを持つオブジェクトをフィルタリングできます。接頭辞とタグは組み合わせることができますが、同期するにはオブジェクトに両方が必要です。priority パラメーターを渡すこともでき、一致する複数の異なるルールが存在するかどうかを判断するために使用されます。この設定により、使用するルールが決まります。
- 同期ポリシーのタグに複数のタグがある場合、オブジェクトの同期中に、少なくとも 1 つのタグ (キーと値のペア) に一致するオブジェクトが同期されます。オブジェクトはすべてのタグセットと一致しない可能性があります。
- 接頭辞とタグが設定されている場合、オブジェクトを別のゾーンに同期するには、オブジェクトに接頭辞があり、いずれかのタグが一致する必要があります。そうして初めて、相互に同期します。
前提条件
- 少なくとも 2 つの実行中の Red Hat Ceph Storage クラスター
- Ceph Object Gateway がインストールされている。
- バケットが作成されます。
手順
新しい同期グループを作成します。バケットレベルで作成する場合は、
--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
オブジェクトがタグと一致するバケット間で同期します。フローは、データフローが対称であるゾーングループレベルのポリシーから継承されます。
構文
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='*'
オブジェクトが接頭辞と一致するバケット間で同期します。フローは、データフローが対称であるゾーングループレベルのポリシーから継承されます。
構文
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
注記この例では、2 つの異なる宛先のみが反映され、ソースは反映されず、それぞれ 1 つが設定用に使用されます。同期プロセスが発生すると、同期する各オブジェクトに関連するルールが選択されます。
5.8.7. バケット間でのポリシーの無効化
forbidden
または allowed
状態の同期情報とともにバケット間のポリシーを無効にすることができます。
ゾーングループおよびバケットレベルの同期ポリシーに使用できるさまざまな組み合わせについては、マルチサイト同期ポリシーグループの状態 を参照してください。
場合によって、2 つのバケット間のレプリケーションを中断するには、バケットのグループポリシーを forbidden
に設定します。設定した同期がどのバケットでも行われない場合は、ゾーングループレベルでポリシーを無効にすることもできます。
radosgw-admin sync group create
コマンドを使用して、allowed
または forbidden
状態で無効状態の同期ポリシーを作成することもできます。
前提条件
- 稼働中の Red Hat Ceph Storage クラスターがある。
- Ceph Object Gateway がインストールされている。
手順
sync group modify
コマンドを実行して、ステータスを allowed から forbidden に変更します。例
[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 command
コマンドを実行して、バケットbuck
の同期のステータスを確認します。例
[ceph: root@host01 /]# radosgw-admin sync info --bucket buck { "sources": [], "dests": [], "hints": { "sources": [], "dests": [] }, "resolved-hints-1": { "sources": [], "dests": [] }, "resolved-hints": { "sources": [], "dests": [] } }
注記レプリケーションが中断されるため、ソースおよび宛先のターゲットは存在しません。