Redis-Clusterを知っていますか?それが利用できないかもしれない状況について話しなさい

Redisクラスターモードの簡単な紹介

図00に示すように、クラスターモードの公式に推奨される最小のベストプラクティスソリューションは、6ノード、3マスター、3スレーブのモードです。

画像

キースロットと転送メカニズム

Redisは、キースペースを16,384スロットに分割し、次のアルゴリズムを使用して各キーのスロットを決定します。

CRC16(key) mod 16384

16384 = 2の14乗なので、2の余りをn乗することは、2のn乗から1を引くことと同じです。したがって、最適化は次のとおりです。

CRC16(key) & 16383

キーにハッシュタグ(たとえばkey{sub}1が含まれている場合、スロットサブタグ(つまり、sub)で指定された文字列計算されるため、key{sub}1key{sub}2は同じスロットにあります。

クライアントは、任意のスロットを読み取るコマンドを任意のクラスターインスタンスに送信できます。スロットが要求されたインスタンスに属している場合は、それを処理します。それ以外の場合は、スロットの場所をクライアントに通知します。たとえば、次のコマンドがに送信された場合2番目のマスター:

GET key1
返回: MOVED slot ip:port(第一个Master的) 

デフォルトでは、すべての読み取りおよび書き込みコマンドはマスターにのみ送信できますスレーブハンドルを使用して読み取り要求を処理する必要がある場合、クライアントはreadonlyコマンドを実行する必要があります。

マスタースレーブ自動切り替え機構

マスターに障害が発生した場合、スレーブがある場合はマスターに切り替わります。

マスターが失敗したと判断する方法は?Redisクラスター構成には、cluster-node-timeoutクラスターハートビートタイムアウト期間という構成があります。クラスター内のノードが接続を確立すると、スケジュールされたタスクclusterCron関数(ソースコードを参照してください:https://github.com/redis/redis/blob/6.0/src/cluster.c)は、毎秒ハートビートを送信するノードをランダムに選択します。タイムアウト期間(cluster-node-timeout)内にハートビート応答が受信されない場合、ノードはpfailとしてマークされます。

クラスター内のマスターの半分以上がノードのステータスをpfailとしてマークすると、このノードのステータスは失敗になります。

ノードに障害が発生すると、自動マスタースレーブ切り替えがトリガーされます。マスタースレーブ切り替えのプロセスにも、同様の選択が含まれます。

  1. マスターが失敗としてマークされている場合、対応するスレーブノードがスケジュールされたタスクclusterCron関数を実行すると、レプリケーションオフセットが選択されます。つまり、マスターとスレーブの同期の進行状況が最大のスレーブが選択され、最新のデータがマスターになろうとします。
  2. このスレーブは独自のcurrentEpoch + = 1を設定します(通常の状況では、クラスター内のすべてのcurrentEpochは同じであり、各選挙は1ずつ増加し、各currentEpochは1回しか投票できないため、複数のスレーブが同時に選挙を開始することはありません。ほとんどの票を獲得するのは難しい)、そしてすべてのマスターにフェイルオーバー要求を送信し、マスターの過半数が同意した場合、マスタースレーブスイッチが実行されます。

クラスターが利用できない

上記の説明によると、以下の利用できない状況を要約することができます

  1. マスターノードとスレーブノードの両方がダウンしているスロットにアクセスすると、スロットを取得できないことが報告されます。
  2. クラスター内のマスターノードの数が3未満の場合、またはクラスター内の使用可能なノードの数が偶数の場合、この失敗の選択メカニズムに基づく自動マスター/スレーブ切り替えプロセスが正しく機能しない可能性があります。障害をマークするプロセス、およびその他異常な可能性がある新しいマスターを選択するプロセスです。

参照

  1. 公式ドキュメント:https//redis.io/topics/cluster-spec
  2. ソースコード:[ https://github.com/redis/redis

毎日1回スワイプすると、スキルを簡単にアップグレードして、さまざまなオファーを得ることができます。

画像

おすすめ

転載: blog.51cto.com/11418075/2615717