redisクラスタ選挙メカニズムを詳細に説明する。
概要
Redisクラスタのマスタノードが故障した場合、Sentinelクラスタは残りのノードから新しいマスタノードを選択し、次のステップがある。故障ノード主観的下線 故障ノード Sentinelクラスタ選挙Leader Sentinel Leaderは、新しいプライマリノード を決定する。
選挙の過程
1、主観的なアンダーライン
Sentinelクラスタの各Sentinelノードは、redisクラスタのすべてのノードに対してタイミングよく心拍パケットを送信し、ノードが正常かどうかを検出する。ノードが
2、客観的にオフラインする
ノードが1つのSentinelノードによって主観的にアンダーラインと表記される場合、ノードが障害を肯定するという意味ではなく、Sentinelクラスタの他のSentinelノードが共に主観的にアンダーラインと判断する必要がある。
このSentinelノードは、他のSentinelノードに問い合わせることができ、もしSentinelクラスタ中の
客観的に下部のredisノードがノードまたはSentinelノードである場合、動作はここまでで、後続の動作はない。客観的に下部のredisノードがマスタノードである場合、障害転送が開始され、ノードの中から一つのノードを選択してプライマリノードにアップグレードする。
3、Sentinelクラスタ選挙リーダー
redisクラスタからマスタノードを選択する必要がある場合、まず、SentinelクラスタからLeaderとしてSentinelノードを選択する必要がある。
各SentinelノードはLeaderとなり、一つのSentinelノードがredisクラスタのマスタノードが主観的にオフラインしていることを確認すると、他のSentinelノードに要求される。要求されたSentinelノードが他のSentinelノードの選挙要求に同意していない場合は、その要求(選挙票+1)に同意する。
Sentinelノードが獲得した選挙の投票数がLeaderの最低数(
4、Sentinel Leaderが新しいマスターノードを決定する。
SentinelクラスタがSentinel Leaderを選択した後、Sentinel Leaderによってredisからノードの中から一つのredisノードをマスタノードとして選択する。は、故障したノード をフィルタリングする。は、優先度 を継続する。は、コピーオフセット量(データ書き込み量のバイトを選択し、どのぐらいのデータが書き込まれているかを記録します。ホストサーバは、オフセット量をサーバから同期し、マスタのオフセット量が一致すると、データは完全同期である)最大のスレーブノードをマスタノードとして、存在しない場合は を継続する。は、 として選択する。
なぜSentinelクラスタが少なくとも3ノードであるか?
一つのSentinel節の選挙がリーダーの最低投票数となる
このように、Sentinelクラスタが1つのSentinelノードの障害を可能にするには3つのノードのクラスターが必要であると式から導出することもできる。2つのノードの障害を許可するには、5つのノードクラスタが必要である。
これまでのレポートを検索したり、下記の関連記事を閲覧したりしてください。これからもよろしくお願いします。
Redisクラスタのマスタノードが故障した場合、Sentinelクラスタは残りのノードから新しいマスタノードを選択し、次のステップがある。
選挙の過程
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節の選挙がリーダーの最低投票数となる
quorum
とSentinel /2+1
の最大値が、Sentinelクラスタが二つのSentinelノードしかない場合、
Sentinel /2 + 1
= 2/2 + 1
= 2
つまり、リーダの最低票数は少なくとも2であり、このSentinelクラスタの中で一つのSentinelノードによって故障した後、残された一つのSentinelノードは永遠にリーダになれない。このように、Sentinelクラスタが1つのSentinelノードの障害を可能にするには3つのノードのクラスターが必要であると式から導出することもできる。2つのノードの障害を許可するには、5つのノードクラスタが必要である。
これまでのレポートを検索したり、下記の関連記事を閲覧したりしてください。これからもよろしくお願いします。