redisクラスタ選挙メカニズムを詳細に説明する。


概要
Redisクラスタのマスタノードが故障した場合、Sentinelクラスタは残りのノードから新しいマスタノードを選択し、次のステップがある。
  • 故障ノード主観的下線
  • 故障ノード
  • Sentinelクラスタ選挙Leader
  • Sentinel Leaderは、新しいプライマリノード
  • を決定する。
    選挙の過程
    1、主観的なアンダーライン
    Sentinelクラスタの各Sentinelノードは、redisクラスタのすべてのノードに対してタイミングよく心拍パケットを送信し、ノードが正常かどうかを検出する。ノードがdown-after-milliseconds時間内にSentinelノードの心拍パケットに応答しない場合、redisノードはSentinelノードによって主観的に下線される。
    2、客観的にオフラインする
    ノードが1つのSentinelノードによって主観的にアンダーラインと表記される場合、ノードが障害を肯定するという意味ではなく、Sentinelクラスタの他のSentinelノードが共に主観的にアンダーラインと判断する必要がある。
    このSentinelノードは、他のSentinelノードに問い合わせることができ、もしSentinelクラスタ中のquorum数を超えるSentinelノードがredisノードが主観的に下線していると考えるなら、redisは客観的に下線する。
    客観的に下部のredisノードがノードまたはSentinelノードである場合、動作はここまでで、後続の動作はない。客観的に下部のredisノードがマスタノードである場合、障害転送が開始され、ノードの中から一つのノードを選択してプライマリノードにアップグレードする。
    3、Sentinelクラスタ選挙リーダー
    redisクラスタからマスタノードを選択する必要がある場合、まず、SentinelクラスタからLeaderとしてSentinelノードを選択する必要がある。
    各SentinelノードはLeaderとなり、一つのSentinelノードがredisクラスタのマスタノードが主観的にオフラインしていることを確認すると、他のSentinelノードに要求される。要求されたSentinelノードが他のSentinelノードの選挙要求に同意していない場合は、その要求(選挙票+1)に同意する。
    Sentinelノードが獲得した選挙の投票数がLeaderの最低数(quorum及びSentinel /2+1の最大値)に達した場合、このSentinelノードはLeaderとして選出される。そうしないと選挙を再開します。
    在这里插入图片描述
    4、Sentinel Leaderが新しいマスターノードを決定する。
    SentinelクラスタがSentinel Leaderを選択した後、Sentinel Leaderによってredisからノードの中から一つのredisノードをマスタノードとして選択する。
  • は、故障したノード
  • をフィルタリングする。
  • は、優先度slave-priorityの最大のスレーブノードをプライマリノードとして選択し、存在しない場合は
  • を継続する。
  • は、コピーオフセット量(データ書き込み量のバイトを選択し、どのぐらいのデータが書き込まれているかを記録します。ホストサーバは、オフセット量をサーバから同期し、マスタのオフセット量が一致すると、データは完全同期である)最大のスレーブノードをマスタノードとして、存在しない場合は
  • を継続する。
  • は、runid(Redisが起動する度にランダムなrunidをredisの識別として生成する)の最小のスレーブノードをプライマリノード
  • として選択する。

    なぜSentinelクラスタが少なくとも3ノードであるか?
    一つのSentinel節の選挙がリーダーの最低投票数となるquorumSentinel /2+1の最大値が、Sentinelクラスタが二つのSentinelノードしかない場合、
    
    Sentinel   /2 + 1
    = 2/2 + 1
    = 2
    つまり、リーダの最低票数は少なくとも2であり、このSentinelクラスタの中で一つのSentinelノードによって故障した後、残された一つのSentinelノードは永遠にリーダになれない。
    このように、Sentinelクラスタが1つのSentinelノードの障害を可能にするには3つのノードのクラスターが必要であると式から導出することもできる。2つのノードの障害を許可するには、5つのノードクラスタが必要である。
    これまでのレポートを検索したり、下記の関連記事を閲覧したりしてください。これからもよろしくお願いします。