ホームページ  >  記事  >  データベース  >  Redis クラスターはデータを失いますか?

Redis クラスターはデータを失いますか?

藏色散人
藏色散人転載
2021-09-21 17:09:172065ブラウズ

Redis クラスターは強整合性を保証しません。一部の特殊なシナリオでは、書き込み確認を受け取った場合でもクライアントがデータを失う可能性があります。

シナリオ 1: 非同期レプリケーション

Redis クラスターはデータを失いますか?

  • クライアントがマスター 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

Redis クラスターはデータを失いますか?

ネットワーク分割が発生した後、2 つのゾーン (A、C、A1、B1、C1) が形成されました。および B Z1

Redis クラスターはデータを失いますか?

#現時点では、Z1 はまだ B に書き込むことができます。パーティションが短時間で復元される場合は問題ありません。クラスターは引き続き正常に動作しますが、時間が経過すると、B1 がそれ​​が配置されているパーティションのマスターになり、Z1 によって B に書き込まれたデータは失われます。

maximum window (最大時間ウィンドウ) は、データ損失を削減し、Z1 から B への合計書き込み数を制御できます。

一定の時間が経過すると、パーティションのほとんどのエッジで選挙が行われ、スレーブがマスターになります。このとき、パーティションの少数派側のマスターは書き込みリクエストの受信を拒否します。
この

時間 は非常に重要であり、 ノード有効期限 と呼ばれます。

マスターが有効期限に達すると、障害があるとみなされ、エラー状態になり、書き込み要求の受信が停止され、スレーブに置き換えることができます。

概要

Redis クラスターは強整合性を保証しておらず、データ損失のシナリオがあります:

    非同期レプリケーション
書き込みマスターでは成功しましたが、スレーブの同期が完了する前にマスターがクラッシュし、スレーブがマスターになり、データが失われます。

wait コマンドは同期レプリケーションに使用できますが、データが失われないことを完全に保証することはできず、パフォーマンスに影響します。

    ネットワーク パーティション
パーティション分割後、マスターは書き込みリクエストを受信し続けます。パーティションの回復後、マスターはスレーブになる可能性があり、以前に書き込まれたデータは失われます。

ノードの有効期限を設定して、パーティション中にマスターが受信する書き込み数を減らし、データ損失のコストを削減できます。

推奨される調査: 「redis チュートリアル

以上がRedis クラスターはデータを失いますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。