整合性制御

整合性制御では、アプリケーションでの必要に応じて、ストレージ ノード間およびサイト間でオブジェクトの可用性と整合性のトレードオフを行うことができます。

StorageGRID Webscaleでは、デフォルトで、新たに作成したオブジェクトのリードアフターライト整合性が保証されます。正常に完了したPUTに続くGETでは、新しく書き込まれたデータを読み取ることができます。既存のオブジェクトの上書き、メタデータの更新、および削除の整合性レベルは、結果整合性です。上書きは通常であれば数秒から数分で反映されますが、最大で15日かかることもあります。

別の整合性レベルでオブジェクトの処理を実行する場合は、各バケットまたは各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 結果整合性と高い可用性を提供し、特にストレージ ノードに障害が発生したりストレージ ノードを使用できない場合のデータ保護の保証は最小限です。高可用性を必要とし、リードアフターライト整合性は必要とせず、ノードに障害が発生した場合のデータ損失を許容できる、書き込み負荷の高いワークロードにのみ適しています。

「read-after-new-write」および「available」整合性レベルの使用

HEAD処理またはGET処理で「read-after-new-write」整合性制御を使用する場合、またはGET処理で「available」整合性制御を使用する場合は、StorageGRID Webscaleによって、次のように複数の手順で検索が実行されます。
  • まず、低い整合性レベルを使用してオブジェクトを検索します。
  • その検索が失敗すると、次の整合性レベルで再度検索が実行され、最高の整合性レベル(オブジェクトのメタデータのすべてのコピーが使用可能である必要がある「all」)に達するまでそれが繰り返されます。

HEAD処理またはGET処理で「read-after-new-write」整合性制御が使用されているが、オブジェクトが存在しない場合は、オブジェクトの検索は常に「all」整合性レベルで実行されます。この整合性レベルでは、オブジェクトのメタデータのすべてのコピーが利用可能である必要があるため、利用できないストレージ ノードがあると、500 Internal Server Errorが大量に発生する場合があります。

AWS S3と同様の整合性の保証が必要ないのであれば、整合性制御を「available」に設定することで、HEAD処理でのこのエラーを防ぐことができます。HEAD処理で「available」整合性制御を使用すると、StorageGRID Webscaleでは、結果整合性のみが提供されます。「all」整合性レベルに達するまで失敗した処理を再試行することはないため、オブジェクトのメタデータのすべてのコピーが利用可能である必要はありません。

API処理に対する整合性制御の指定

個々のAPI処理に対して整合性制御を設定するには、その処理でサポートされている整合性制御を要求ヘッダーで指定する必要があります。次の例では、GET Object処理に対して、整合性制御を「strong-site」に設定しています。

GET /bucket/object HTTP/1.1
Date: date
Authorization: authorization name
Host: host
Consistency-Control: strong-site
注:PUT Object処理とGET Object処理には、同じ整合性制御を使用する必要があります。たとえば、「weak」を使用して書き込んだオブジェクトを「strong-global」を使用して再度読み取った場合、すべてのサイトにおける強い整合性は保証されません。

バケットに対する整合性制御の指定

バケットに対して整合性制御を設定するには、StorageGRID WebscaleのPUT Bucket整合性要求およびGET Bucket整合性要求を使用できます。または、Tenant Managerまたはテナント管理APIを使用できます。

バケットの整合性制御を設定する際は、次の点にご注意ください。