0

次のように3つのredisサーバーがセットアップされています。

Node1: Default Redis Master & Running Redis Sentinel Software
Node2: Redis Slave & Running Redis Sentinel Software
Node3: Redis Slave & Running Redis Sentinel Software

node1 に移動し、redis-server を停止するコマンド (service redis-server stop) を発行すると、センティネルはマスター上の redis がダウンしたことをすぐに検出し、Node2 または Node3 をマスターに昇格させます (まさに私たちが望むもの/予想)。

ここで、ノード 1 に戻って、再び起動したとします (service redis-server start)。「redis-cli info | grep ^role」を発行すると、数秒間 (10 ~ 15 秒) Node1 がまだ自分をマスターと見なしていることがわかります。

その結果、短い期間、マスターが 2 人いることになります。最終的に数秒後、センチネルが状況を整理し、Node1 がスレーブに降格されます。ただし、マスターが 2 つあると (数秒間でも)、データの整合性の問題が発生する可能性があると思います。

ノード 1 がまだマスターであると認識しているときにノード 1 に送信されたデータがスレーブに降格されるとどうなりますか。それに送信されたそのデータは失われますか?

これを回避する方法はありますか?センチナルがスレーブ/マスターであると通知するまで、redis-server が接続を受け入れないようにする設定はありますか? 他にどのように対処できますか?

ありがとうブラッド

4

1 に答える 1

0

私たちがこれにどのように対処したかについて知りたい人のために。github で次の議論を参照してください: https://github.com/antirez/redis/issues/1813

基本的には、センティナルにクエリを実行し、ステータスをロード バランサーに報告する bash シェル スクリプトで構成される xinetd http サービスをセットアップします。

于 2014-06-16T13:42:38.263 に答える