Redisセンチネルモードのデータ損失の問題

1データの損失

1.1非同期レプリケーションによるデータ損失

マスター→スレーブの複製は非同期であるため、データの一部がスレーブにコピーされておらず、マスターがダウンしている可能性があります。このとき、データのこれらの部分は失われます。

1.2スプリットブレインによるデータ損失

スプリットブレイン、つまり、マスターが通常のネットワークから突然切断され、他のスレーブマシンに接続できないマシンですが、実際にはマスターはまだ実行されています。

このとき、歩哨はマスターがダウンしていると考え、他のスレーブをマスターに切り替えるための選挙を開始する場合があります。

この時点で、クラスターには2つのマスター、いわゆるスプリットブレインが存在します。

この時点でスレーブはマスターに切り替えられますが、クライアントが新しいマスターに切り替える時間がなかった可能性があり、古いマスターに書き込み続けているデータも失われる可能性があります。

したがって、古いマスターが再度復元されると、新しいマスターのスレーブとして一時停止され、自身のデータがクリアされ、データが新しいマスターから再度コピーされます。

2非同期レプリケーションとスプリットブレインによって引き起こされるデータ損失を解決します

min-slaves-to-write 1
min-slaves-max-lag 10

少なくとも1つのスレーブが必要であり、データの複製と同期の遅延は10秒を超えることはできません。

すべてのスレーブが一度、データ複製と同期の遅延が10秒を超えると、この時点で、マスターはそれ以上要求を受信しなくなります。

上記の2つの構成により、非同期レプリケーションとスプリットブレインによって引き起こされるデータ損失を減らすことができます。

2.1非同期レプリケーションでのデータ損失を減らす

min-slaves-max-lagの構成により、スレーブがデータを複製し、ack遅延が長すぎると、マスターがダウンした後に失われるデータが多すぎる可能性があると見なされ、その後書き込みが行われることが保証されます。要求は拒否されます。マスターがダウンしている場合、データの一部がスレーブに同期されていないために発生するデータ損失は、制御可能な範囲内で減少します。

2.2スプリットブレインによるデータ損失を減らす

マスターにスプリットブレインがあり、他のスレーブとの接続が失われた場合、上記の2つの構成により、指定された数のスレーブを指定された数のスレーブに送信できず、スレーブがそれ以上の確認メッセージを送信しないようにすることができます。 10秒を超えると、クライアントの書き込み要求を直接拒否します。

このようにして、スプリットブレイン後の古いマスターはクライアントからの新しいデータを受け入れず、データの損失が回避されます。

上記の構成により、スレーブとの接続が失われ、10秒後にスレーブがあなたを確認しなかった場合、新しい書き込み要求は拒否されます。

したがって、スプリットブレインシナリオでは、最大10秒のデータが失われます。

3関連情報

  • ブログ投稿は簡単ではありません、注意と賞賛に一生懸命働いたすべての人、ありがとう

おすすめ

転載: blog.csdn.net/qq_15769939/article/details/113861243