StorageGRID のクロスグリッドレプリケーションについて学ぶ
クロスグリッドレプリケーションとは、"グリッドフェデレーション接続"で接続された 2 つの StorageGRID システム内の選択した S3 バケット間でオブジェクトを自動的にレプリケートする機能です。"アカウントの複製"は、クロスグリッドレプリケーションに必要です。
クロスグリッドレプリケーションのワークフロー
ワークフロー図は、2つのグリッド上のバケット間でクロスグリッドレプリケーションを構成する手順をまとめたものです。

グリッド間レプリケーションの要件
テナントアカウントに グリッドフェデレーション接続を使用する 権限があり、1つ以上の"グリッドフェデレーション接続"を使用できる場合、ルートアクセス権限を持つテナントユーザーは、各グリッド上の対応するテナントアカウントにバケットを作成できます。これらのバケット:
-
それぞれ異なる名前を持つことができます
-
異なるリージョンを持つことができます
-
バージョン管理が有効になっている必要があります
-
空欄にする必要があります
両方のバケットが作成された後、どちらか一方、または両方のバケットに対してクロスグリッドレプリケーションを設定できます。
クロスグリッドレプリケーションの仕組み
クロスグリッドレプリケーションは、一方向または双方向で実行するように設定できます。
一方向への複製
一方のグリッド上のバケットに対してのみクロスグリッドレプリケーションを有効にした場合、そのバケット(ソースバケット)に追加されたオブジェクトは、もう一方のグリッド上の対応するバケット(宛先バケット)に複製されます。ただし、宛先バケットに追加されたオブジェクトは、ソースには複製されません。図では、 `my-bucket`に対してGrid 1からGrid 2へのクロスグリッドレプリケーションが有効になっていますが、逆方向では有効になっていません。

双方向の複製
両方のグリッドで同じバケットに対してクロスグリッドレプリケーションを有効にすると、いずれかのバケットに追加されたオブジェクトは、もう一方のグリッドにも複製されます。図では、 `my-bucket`に対してクロスグリッドレプリケーションが両方向で有効になっています。

オブジェクトが取り込まれると何が起こりますか?
S3クライアントがクロスグリッドレプリケーションが有効になっているバケットにオブジェクトを追加すると、次のことが起こります:
-
StorageGRID は、ソースバケットから宛先バケットへオブジェクトを自動的に複製します。このバックグラウンドレプリケーション操作の実行時間は、保留中の他のレプリケーション操作の数など、いくつかの要因によって異なります。
S3クライアントは、GetObjectまたはHeadObjectリクエストを発行することで、オブジェクトのレプリケーションステータスを確認できます。応答には、StorageGRID固有の `x-ntap-sg-cgr-replication-status`レスポンスヘッダーが含まれており、以下のいずれかの値を持ちます:
Grid レプリケーションステータス ソース
-
完了:すべてのグリッド接続でレプリケーションが正常に完了しました。
-
PENDING:オブジェクトが少なくとも 1 つのグリッド接続にレプリケートされていません。
-
FAILURE: いずれのグリッド接続についてもレプリケーションが保留されておらず、少なくとも1つの接続が永続的な障害で失敗しました。ユーザーはエラーを解決する必要があります。
デスティネーション
レプリカ:オブジェクトはソースグリッドから複製されました。
StorageGRID は `x-amz-replication-status`ヘッダーをサポートしていません。 -
-
StorageGRID は、各グリッドのアクティブな ILM ポリシーを使用してオブジェクトを管理します。これは、他のオブジェクトを管理するのと同様です。例えば、グリッド 1 上のオブジェクト A は 2 つの複製コピーとして保存され、永久に保持される一方、グリッド 2 に複製されたオブジェクト A のコピーは 2+1 イレイジャー コーディングを使用して保存され、3 年後に削除される場合があります。
オブジェクトが削除されるとどうなりますか?
"データフローを削除する"に記載されているとおり、StorageGRID がオブジェクトを削除できる理由は次のとおりです:
-
S3クライアントが削除リクエストを発行します。
-
テナントマネージャーのユーザーが "バケット内のオブジェクトを削除する" オプションを選択して、バケットからすべてのオブジェクトを削除します。
-
バケットにはライフサイクル設定があり、有効期限が設定されています。
-
当該オブジェクトに対するILMルールの最後の期間が終了し、それ以上の配置は指定されていません。
StorageGRID がバケット内のオブジェクトの削除操作、バケットのライフサイクルの期限切れ、または ILM 配置の期限切れによってオブジェクトを削除した場合、グリッドフェデレーション接続内の他のグリッドから複製されたオブジェクトは削除されません。ただし、S3 クライアントによる削除によってソースバケットに追加された削除マーカーは、オプションで宛先バケットに複製することができます。
クロスグリッドレプリケーションが有効になっているバケットから S3 クライアントがオブジェクトを削除した場合の動作を理解するには、バージョン管理が有効になっているバケットから S3 クライアントがオブジェクトを削除する方法を以下のとおり確認してください:
-
S3クライアントがバージョンIDを含む削除リクエストを発行した場合、そのバージョンのオブジェクトは完全に削除されます。バケットに削除マーカーは追加されません。
-
S3クライアントがバージョンIDを含まない削除リクエストを発行した場合、StorageGRID はオブジェクトのバージョンを削除しません。その代わりに、バケットに削除マーカーを追加します。削除マーカーにより、StorageGRID はオブジェクトが削除されたかのように動作します:
-
バージョン ID を指定しない GetObject リクエストは失敗します。
404 No Object Found -
有効なバージョンIDを指定したGetObjectリクエストは成功し、要求されたオブジェクトバージョンを返します。
-
S3クライアントがクロスグリッドレプリケーションが有効になっているバケットからオブジェクトを削除すると、StorageGRID は削除要求を宛先に複製するかどうかを以下のように決定します。
-
削除リクエストにバージョンIDが含まれている場合、そのオブジェクトバージョンはソースグリッドから完全に削除されます。ただし、StorageGRID はバージョンIDを含む削除リクエストをレプリケートしないため、同じオブジェクトバージョンはデスティネーションから削除されません。
-
削除リクエストにバージョン ID が含まれていない場合、StorageGRID はバケットのクロスグリッドレプリケーションの設定方法に応じて、削除マーカーを任意で複製できます。
-
削除マーカーを複製することを選択した場合(デフォルト)、削除マーカーはソースバケットに追加され、宛先バケットに複製されます。事実上、そのオブジェクトは両方のグリッド上で削除されたように見えます。
-
削除マーカーを複製しないように選択した場合、削除マーカーはソースバケットに追加されますが、宛先バケットには複製されません。つまり、ソースグリッドで削除されたオブジェクトは、宛先グリッドでは削除されません。
-
図では、*削除マーカーの複製*は"グリッド間レプリケーションが有効になりました"のときに*はい*に設定されていました。バージョンIDを含むソースバケットへの削除リクエストは、宛先バケットからオブジェクトを削除しません。バージョンIDを含まないソースバケットへの削除リクエストは、宛先バケット内のオブジェクトを削除するように見えます。

|
|
オブジェクトの削除をグリッド間で同期させたい場合は、両方のグリッドのバケットに対応する"S3ライフサイクル構成"を作成してください。 |
暗号化されたオブジェクトがどのように複製されるか
クロスグリッドレプリケーションを使用してグリッド間でオブジェクトを複製する場合、個々のオブジェクトを暗号化したり、デフォルトのバケット暗号化を使用したり、グリッド全体の暗号化を設定したりできます。バケットのクロスグリッドレプリケーションを有効にする前でも後でも、デフォルトのバケットまたはグリッド全体の暗号化設定を追加、変更、または削除できます。
個々のオブジェクトを暗号化するには、オブジェクトをソースバケットに追加する際に、SSE(StorageGRID が管理するキーを使用したサーバー側暗号化)を使用できます。 `x-amz-server-side-encryption`リクエストヘッダーを使用して、 `AES256`を指定します。"サーバー側暗号化を使用する"を参照してください。
|
|
SSE-C(顧客提供の鍵を使用したサーバー側暗号化)は、クロスグリッドレプリケーションではサポートされていません。取り込み処理は失敗します。 |
バケットのデフォルト暗号化を使用するには、PutBucketEncryption リクエストを使用して、 SSEAlgorithm パラメータを AES256 に設定します。バケットレベルの暗号化は、 x-amz-server-side-encryption リクエストヘッダーなしで取り込まれたオブジェクトに適用されます。"バケットに対する操作" を参照してください。
グリッドレベルの暗号化を使用するには、「保存オブジェクトの暗号化」オプションを「AES-256」に設定してください。グリッドレベルの暗号化は、バケットレベルで暗号化されていないオブジェクト、または `x-amz-server-side-encryption`リクエストヘッダーなしで取り込まれたオブジェクトに適用されます。"ネットワークとオブジェクトのオプションを設定する"を参照してください。
|
|
SSEはAES-128をサポートしていません。ソースグリッドで*保存オブジェクトの暗号化*オプションが*AES-128*オプションを使用して有効になっている場合、AES-128アルゴリズムの使用は複製されたオブジェクトには反映されません。代わりに、複製されたオブジェクトは、利用可能であれば、宛先のデフォルトのバケットまたはグリッドレベルの暗号化設定を使用します。 |
ソースオブジェクトを暗号化する方法を決定する際、StorageGRID は以下のルールを適用します。
-
`x-amz-server-side-encryption`取り込みヘッダーが存在する場合は、それを使用します。
-
インジェストヘッダーが存在しない場合は、バケットのデフォルトの暗号化設定が構成されていれば、それを使用します。
-
バケット設定が構成されていない場合は、グリッド全体の暗号化設定が構成されていれば、それを使用します。
-
グリッド全体の設定が存在しない場合は、ソースオブジェクトを暗号化しません。
複製されたオブジェクトを暗号化する方法を決定する際、StorageGRID は以下のルールをこの順序で適用します:
-
ソースオブジェクトがAES-128暗号化を使用していない限り、ソースオブジェクトと同じ暗号化方式を使用してください。
-
ソースオブジェクトが暗号化されていない場合、またはAES-128を使用している場合は、設定されていれば宛先バケットのデフォルトの暗号化設定を使用します。
-
宛先バケットに暗号化設定がない場合は、宛先のグリッド全体の暗号化設定が構成されていれば、それを使用します。
-
グリッド全体の設定が存在しない場合は、宛先オブジェクトを暗号化しません。
S3オブジェクトロックを使用したクロスグリッドレプリケーション
以下の状況下では、S3 オブジェクトロックが有効になっている StorageGRID バケット間のクロスグリッドレプリケーションを設定できます。
| ソースバケットの S3 オブジェクトロックが有効になっている場合… | そして、宛先バケットの S3 オブジェクトロックは… |
|---|---|
有効 |
有効 |
無効 |
有効 |
ソースバケットでS3オブジェクトロックが有効になっている場合:
-
オブジェクトは、以下の順序で宛先の保持設定によりロックされます:
-
ソースオブジェクトの保持ヘッダー値:
x-amz-object-lock-modex-amz-object-lock-retain-until-date -
ソースバケットのデフォルトの保持期間(設定されている場合)。
-
宛先バケットのデフォルトの保持期間(設定されている場合)。
宛先バケットのデフォルトの保持設定は、ソースオブジェクトから複製された保持設定を上書きしません。
-
-
宛先オブジェクトの法的保留ステータスは、オブジェクトをアップロードする際に `x-amz-object-lock-legal-hold`を使用して設定できます。
-
宛先テナントまたはバケットが、ソースオブジェクトの S3 オブジェクトロック設定をサポートしていない場合、エラーが発生します。参照先:"グリッド間レプリケーションに関するアラートとエラー。"
ソースバケットのS3オブジェクトロックが無効になっている場合:
-
宛先バケットのデフォルトの保持期間を設定することで、S3 Object Lockの保持設定を宛先オブジェクトに適用できます。
-
宛先オブジェクトは法的保留状態を設定できません。
PutObjectTagging と DeleteObjectTagging はサポートされていません
PutObjectTagging および DeleteObjectTagging リクエストは、クロスグリッドレプリケーションが有効になっているバケット内のオブジェクトに対してはサポートされていません。
S3クライアントがPutObjectTaggingまたはDeleteObjectTaggingリクエストを発行すると、 `501 Not Implemented`が返されます。メッセージは `Put(Delete) ObjectTagging isn't available for buckets that have cross-grid replication configured`です。
PutObjectRetention と PutObjectLegalHold はサポートされていません
PutObjectRetention および PutObjectLegalHold リクエストは、クロスグリッドレプリケーションが有効になっているバケット内のオブジェクトに対して完全にはサポートされていません。
S3クライアントがPutObjectRetentionまたはPutObjectLegalHoldリクエストを発行すると、ソースオブジェクトの設定は変更されますが、変更内容は宛先には適用されません。
分割されたオブジェクトがどのように複製されるか
ソースグリッドの最大セグメントサイズは、宛先グリッドに複製されるオブジェクトに適用されます。オブジェクトが別のグリッドに複製される場合、ソースグリッドの 最大セグメントサイズ 設定(構成 > システム > ストレージオプション)が両方のグリッドで使用されます。例えば、ソースグリッドの最大セグメントサイズが 1 GB で、宛先グリッドの最大セグメントサイズが 50 MB だとします。ソースグリッド上で 2 GB のオブジェクトを取り込んだ場合、そのオブジェクトは 1 GB のセグメント 2 つとして保存されます。また、宛先グリッドの最大セグメントサイズは 50 MB であるにもかかわらず、データは 2 つの 1 GB セグメントとして宛先グリッドに複製されます。