整合性制御では、アプリケーションでの必要に応じて、ストレージ ノード間およびサイト間でオブジェクトの可用性と整合性のトレードオフを行うことができます。
別の整合性レベルでオブジェクトの処理を実行する場合は、各バケットまたは各API処理に対して、整合性制御を指定できます。
バケットまたはAPI処理の整合性制御は、次のいずれかの値に設定できます。
整合性制御 | 説明 |
---|---|
all | すべてのノードが即座にデータを受け取り、受け取れない場合は要求が失敗します。 |
strong-global | すべてのサイトのすべてのクライアント要求について、リードアフターライト整合性が保証されます。 |
strong-site | あるサイト内のすべてのクライアント要求について、リードアフターライト整合性が保証されます。 |
read-after-new-write | (デフォルト)新規オブジェクトにはリードアフターライト整合性を、オブジェクトの更新には結果整合性を提供します。高可用性が確保され、データ保護が保証されます。AWS S3の整合性に相当します。 注:存在しないオブジェクトに対してアプリケーションがHEAD要求を使用すると、使用できないストレージ ノードがある場合に「500 Internal Server Error」が大量に返される可能性があります。このエラーを回避するには、AWS S3と同様の整合性の保証が必要ないかぎり、整合性制御を「available」に設定します。
|
available(HEAD処理は結果整合性) | 「read-after-new-write」整合性レベルと動作は同じですが、HEAD処理については結果整合性のみを提供します。ストレージ ノードを使用できない場合に、HEAD処理に対して「read-after-new-write」よりも高い可用性が提供されます。AWS S3の整合性と異なるのはHEAD処理のみです。 |
weak | 結果整合性と高い可用性を提供し、特にストレージ ノードに障害が発生したりストレージ ノードを使用できない場合のデータ保護の保証は最小限です。高可用性を必要とし、リードアフターライト整合性は必要とせず、ノードに障害が発生した場合のデータ損失を許容できる、書き込み負荷の高いワークロードにのみ適しています。 |
HEAD処理またはGET処理で「read-after-new-write」整合性制御が使用されているが、オブジェクトが存在しない場合は、オブジェクトの検索は常に「all」整合性レベルで実行されます。この整合性レベルでは、オブジェクトのメタデータのすべてのコピーが利用可能である必要があるため、利用できないストレージ ノードがあると、500 Internal Server Errorが大量に発生する場合があります。
AWS S3と同様の整合性の保証が必要ないのであれば、整合性制御を「available」に設定することで、HEAD処理でのこのエラーを防ぐことができます。HEAD処理で「available」整合性制御を使用すると、StorageGRIDでは、結果整合性のみが提供されます。「all」整合性レベルに達するまで失敗した処理を再試行することはないため、オブジェクトのメタデータのすべてのコピーが利用可能である必要はありません。
個々のAPI処理に対して整合性制御を設定するには、その処理でサポートされている整合性制御を要求ヘッダーで指定する必要があります。次の例では、GET Object処理に対して、整合性制御を「strong-site」に設定しています。
GET /bucket/object HTTP/1.1 Date: date Authorization: authorization name Host: host Consistency-Control: strong-site
バケットに対して整合性制御を設定するには、StorageGRIDのPUT Bucket整合性要求およびGET Bucket整合性要求を使用できます。あるいは、Tenant Managerまたはテナント管理APIを使用できます。
バケットの整合性制御を設定する際は、次の点にご注意ください。