Redis クラスターは強整合性を保証しません。一部の特殊なシナリオでは、書き込み確認を受け取った場合でもクライアントがデータを失う可能性があります。
シナリオ 1: 非同期レプリケーション
- クライアントがマスター B に書き込み
- マスター B が OK
- master に応答B はスレーブ B1 B2 B3
B と同期し、B1 B2 B3 からの確認を待たずにクライアントに応答します。スレーブの同期が完了する前にマスターがダウンした場合、スレーブの 1 つがスレーブとして選択されます。このとき、クライアントによって以前に書き込まれたデータは失われます。
wait
コマンドを使用すると、このシナリオでのデータ セキュリティを強化できます。
wait
は、指定された数のスレーブによって前の書き込み操作が正常に同期されるまで、現在のクライアントをブロックします。
wait
はデータのセキュリティを向上させることができますが、強整合性は保証されません。
この同期レプリケーション方法を使用した場合でも、同期が完了していないスレーブがマスターとして選択されるという特殊な状況が発生するためです。
シナリオ 2: ネットワーク パーティション
6 ノードA、B、C、A1、B1、C1
、3 つのマスター、3 つのスレーブ、および 1 つのクライアント , Z1
。
ネットワーク分割が発生した後、2 つのゾーン (A、C、A1、B1、C1
) が形成されました。および B Z1
。
#現時点では、Z1 はまだ B に書き込むことができます。パーティションが短時間で復元される場合は問題ありません。クラスターは引き続き正常に動作しますが、時間が経過すると、B1 がそれが配置されているパーティションのマスターになり、Z1 によって B に書き込まれたデータは失われます。
maximum window (最大時間ウィンドウ) は、データ損失を削減し、Z1 から B への合計書き込み数を制御できます。
時間 は非常に重要であり、 ノード有効期限 と呼ばれます。
マスターが有効期限に達すると、障害があるとみなされ、エラー状態になり、書き込み要求の受信が停止され、スレーブに置き換えることができます。 概要Redis クラスターは強整合性を保証しておらず、データ損失のシナリオがあります:- 非同期レプリケーション
wait コマンドは同期レプリケーションに使用できますが、データが失われないことを完全に保証することはできず、パフォーマンスに影響します。
- ネットワーク パーティション
推奨される調査: 「redis チュートリアル 」