StorageGRID がオブジェクトと削除マーカーを削除する方法
StorageGRID は、クライアントからのリクエストに直接応答してオブジェクトを削除することも、S3 バケットのライフサイクルの期限切れや ILM ポリシーの要件の結果として自動的に削除することもできます。オブジェクトが削除されるさまざまな方法、StorageGRID による削除リクエストの処理方法、および期限切れの削除マーカーを削除する方法を理解することで、オブジェクトをより効果的に管理できるようになります。
StorageGRID では、次のいずれかの方法でオブジェクトを削除できます。
-
同期削除:StorageGRID がクライアントから削除要求を受信すると、すべてのオブジェクトコピーが直ちに削除されます。コピーが削除された後、クライアントに削除が成功した旨が通知されます。
-
オブジェクトが削除キューに追加されます:StorageGRID が削除要求を受け取ると、オブジェクトは削除キューに追加され、削除が成功したことがクライアントに即座に通知されます。オブジェクトのコピーは、後でバックグラウンドの ILM 処理によって削除されます。
StorageGRID では、オブジェクトを削除する際に、削除のパフォーマンスを最適化し、削除のバックログを最小限に抑え、スペースを最も早く解放する方法を使用します。
次の表は、 StorageGRID がどのような場合に各メソッドを使用するかを
| 削除方法 | 使用時 |
|---|---|
オブジェクトは削除キューに登録されます |
次の条件のいずれか * が当てはまる場合:
|
オブジェクトをただちに削除(同期削除) |
S3クライアントが削除要求を実行し、次の条件*すべて*が満たされている場合:
|
S3クライアントが削除要求を行うと、StorageGRIDはまずオブジェクトを削除キューに追加します。その後、同期削除の実行に切り替えます。処理対象となるオブジェクトがバックグラウンド削除キューに含まれていることを確認することで、 StorageGRID は、クライアントによる削除のバックログが発生しないようにしつつ、特に同時実行性の低いクライアントに対してより効率的に削除を処理できます。
オブジェクトの削除に必要な時間
StorageGRID によるオブジェクトの削除方法は、システムの動作に影響を及ぼす可能性があります。
-
StorageGRID StorageGRID で同期削除が実行されると、結果がクライアントに返されるまでに最大 30 秒かかることがあります。つまり、実際には StorageGRID がオブジェクトを削除キューに登録する場合よりも短時間でコピーが削除されるにもかかわらず、より長くかかっているという印象をクライアントに与える可能性があります。
-
一括削除中に削除パフォーマンスを綿密に監視している場合、一定数のオブジェクトが削除された後、削除速度が遅くなることに気づくかもしれません。この変化は、StorageGRID が削除対象オブジェクトをキューに入れる方式から同期削除を実行する方式へと移行する際に発生します。削除率の見かけ上の低下は、オブジェクトのコピーの削除速度が低下していることを意味するものではありません。それどころか、平均的に見て、現在ではより速いペースでスペースが解放されていることを示しています。
大量のオブジェクトを削除する場合に、スペースを短時間で解放することが優先されるのであれば、 ILM などの方法を使用してオブジェクトを削除するのではなく、クライアント要求を使用することを検討してください。一般に、クライアントによって削除が実行された場合、 StorageGRID は同期削除を使用できるため、スペースはより短時間で解放されます。
オブジェクトの削除後にスペースを解放するために必要な時間は、いくつかの要因によって異なります。
-
オブジェクトコピーが同期的に削除されるか、またはキューに登録されたあとで削除されるか(クライアントの削除要求の場合)。
-
グリッド内のオブジェクトの数や、オブジェクトコピーが削除対象キューに登録される場合のグリッドリソースの可用性などのその他の要因(クライアントによる削除およびその他の方法の場合)。
S3 バージョン管理オブジェクトの削除方法
S3 バケットでバージョン管理が有効になっている場合、StorageGRID は、オブジェクト削除要求への応答時に Amazon S3 の動作に従います。これらの要求が S3 クライアントからのものか、S3 バケットのライフサイクルの期限切れか、または ILM ポリシーの要件によるものかを問わず。
|
|
ストレージ容量を解放するためにオブジェクトを削除することは、永続的かつ復元不可能な操作とみなされます。 |
StorageGRID が、S3クライアントリクエスト などのバージョン ID を指定するオブジェクト削除リクエストと、バージョン ID を指定しないオブジェクト削除リクエストをどのように処理するかを理解することが重要です。バージョン ID のないオブジェクト削除リクエストでは、オブジェクトの現在のバージョンは削除されず、ストレージ容量も解放されません。代わりに、オブジェクトの現在のバージョンとしてゼロバイトの 削除マーカー が作成され、オブジェクトの以前のバージョンは「非現行」となります。非現行オブジェクトはバージョン ID を使用して識別されます。
オブジェクトがストレージから削除されていなくても、StorageGRID はオブジェクトの現在のバージョンが利用できなくなったかのように動作します。そのオブジェクトへのリクエストは 404 NotFound を返します。ただし、非現行オブジェクトのデータは削除されていないため、非現行オブジェクトのバージョン ID を指定したリクエストは成功する場合があります。
バージョン管理が一時停止されているバケット内のオブジェクトに対してバージョン ID を指定せずに削除オブジェクト要求を発行した場合、StorageGRID はオブジェクトに対して null versionId を含む削除マーカーを作成します。オブジェクトが持つことができる null バージョンは 1 つのみであるため、これにより以前の null バージョンが置き換えられ、完全に削除されます。
クライアントがバージョン ID を持つオブジェクトバージョンを"ブランチバケット"から削除すると、StorageGRID はオブジェクトバージョンの存在を隠蔽しますが、ブランチバケットに削除マーカーは作成されません。クライアントがブランチバケットからバージョン ID のないオブジェクトを削除した場合、StorageGRID は標準の S3 動作に従って、ブランチバケットに削除マーカーを作成します。
オブジェクトデータは旧バージョンとして保持されるため、バージョン管理されたバケット内のオブジェクトを削除しても、通常はストレージ容量は解放されません。保持されている非現行オブジェクトバージョンを完全に削除し、空き領域を確保するには、以下のいずれかの方法を使用してください。
-
S3クライアントリクエスト:S3 DELETE ObjectリクエストでオブジェクトバージョンIDを指定します((
DELETE /object?versionId=ID)。このリクエストは、指定されたバージョンIDのオブジェクトコピーのみを削除することに注意してください。複数の旧バージョンが存在する場合は、必要に応じて各旧バージョンに対してこの手順を繰り返します。 -
バケットのライフサイクル:バケットライフサイクル設定の `NoncurrentVersionExpiration`アクションを使用します。指定した NoncurrentDays の数に達すると、StorageGRID は最新でないオブジェクトバージョンのすべてのコピーを完全に削除します。
バケットライフサイクル設定のアクションは、
NewerNoncurrentVersions`バージョン管理されたS3バケットに保持する最新でないバージョンの数を指定します。指定した数よりも最新でないバージョンが多い場合は `NewerNoncurrentVersions`StorageGRID、NoncurrentDaysの値が経過すると古いバージョンが削除されます。しきい値は `NewerNoncurrentVersions、ILMが提供するライフサイクルルールよりも優先されます。つまり、ILMが削除を要求した場合、しきい値内のバージョンが最新でないオブジェクトが `NewerNoncurrentVersions`保持されます。 -
ILM: 参照時間として「非現行時間」を使用し、古いオブジェクトバージョンのみに適用される ILM ルールを設定します。指定された保存期間が満了すると、StorageGRID は一致する非現行のオブジェクトバージョンを削除します。"ILMルールの作成ウィザードの手順1(詳細を入力)" で、「このルールを古いオブジェクトバージョンのみに適用しますか(バージョン管理が有効になっている S3 バケット内)?」という質問に対して「はい」を選択します。
-
バケット内のオブジェクトを削除する: テナントマネージャーを使用して"すべてのオブジェクトバージョンを削除"。
S3 のバージョン管理の期限切れ削除マーカーはどのように削除されるのか
S3バケットでバージョン管理が有効になっている場合、オブジェクトの削除リクエストでは、オブジェクトの現在のバージョンは削除されず、ストレージ容量も解放されません。その代わりに、オブジェクト削除リクエストは、オブジェクトの現在のバージョンとしてゼロバイトの削除マーカーを作成し、オブジェクトの以前のバージョンを「非現行」にします。
削除マーカーが現在のバージョンであり、かつ以前のバージョンが存在しない場合、その削除マーカーは期限切れの削除マーカーになります。期限切れの削除マーカーにはオブジェクトデータは含まれませんが、バケット一覧やメトリクスに表示され、バケットの削除を妨げます。
期限切れの削除マーカーを削除するように StorageGRID を設定する方法は、バケットが長期使用を目的としているか(バージョン管理が有効または一時停止されているか)、削除の準備中であるかによって異なります。
-
既存のバケット内の期限切れの削除マーカーの自動クリーンアップ:オブジェクトのバージョンを保持したまま、バケット(バージョニング有効)から期限切れの削除マーカーを自動的に削除するには、 `Expiration`アクションと `ExpiredObjectDeleteMarker`構成を使用してバケットライフサイクルルールを設定する必要があります。この操作は、期限切れの削除マーカーにのみ適用されます。削除マーカーの有効期限が切れると、"バケットライフサイクルルールを使用して期限切れオブジェクトの削除マーカーを削除する例"に示すように、自動的に削除されます。
ILMポリシーでは、現在のオブジェクトバージョンと期限切れの削除マーカーを区別できません。オブジェクトのバージョンを保持したまま期限切れの削除マーカーのみを削除することが目的の場合は、ILMポリシーではなく、バケットライフサイクル内で `ExpiredObjectDeleteMarker`を使用してください。 バージョン管理が一時停止されているバケット内のオブジェクトに対してバージョン ID を指定せずに削除オブジェクト要求を発行した場合、StorageGRID はバージョン ID `NULL`を持つオブジェクトの削除マーカーを作成します。オブジェクトには null バージョンが 1 つしか存在しないため、これにより以前の `NULL`バージョン ID が置き換えられ、完全に削除されます。期限切れの null バージョン削除マーカーを削除するには、 `ExpiredObjectDeleteMarker`に示すように、バケットのライフサイクルで"バージョン管理を一時停止した後に、非現行バージョンと期限切れの削除マーカーを削除する例"を使用する必要があります。
-
バケットの削除準備:バケットを削除する場合で、バケット内のすべてのコンテンツが不要になったことが確実であるにもかかわらず、期限切れのマーカーによって削除が妨げられている場合は、テナントマネージャを使用して"削除マーカー、現在のバージョン、および以前のバージョンを含む、すべてのオブジェクトバージョンを削除します。"、バケットから実行してください。
バケットから削除マーカーが削除される方法は、StorageGRID のバージョンによって異なります。
-
StorageGRID 11.8以降で作成されたバケットの削除マーカーは、ILM、バケットライフサイクルルール、バケット処理のオブジェクトの削除、またはS3クライアントの明示的な削除によって削除できます。
-
StorageGRID 11.7 以前で作成された削除マーカーは、S3 クライアントリクエストによってのみ削除できます。ILM、バケットライフサイクルルール、またはバケット内のオブジェクトの削除操作によっては削除されません。