Redis Centinelアーキテクチャの原理の詳細(二)

3225 ワード

前言
Redis Centinelアーキテクチャの原理詳細(一)では,redis哨兵における主従スイッチング原理を学び,sentinelクラスタのredis高可用性アーキテクチャにおける役割も知った.ここではsentinelクラスタがノードモニタリングをどのように実現しているかを皆さんと一緒に学びます.
sentinelクラスタのモニタリング機能の詳細
sentinelクラスタは,3つのタイミングモニタリングタスクにより,各ノードの発見とモニタリングを完了する.
1.各sentinelノードは、10秒ごとにプライマリノードとスレーブノードにinfoコマンドを送信してredisスレーブアーキテクチャの最新状況を取得します.例えば、info replicationコマンドを送信すると、以下の情報が得られる.
node01:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=192.168.239.102,port=6379,state=online,offset=18621889,lag=1
slave1:ip=192.168.239.103,port=6379,state=online,offset=18621889,lag=1

これにより、sentinelクラスタはmasterとslaveの基本情報を知ることができ、メインノードにinfoコマンドを実行することで、ノードからの情報を取得するので、sentinelノードは明示的に監視スレーブノードを構成する必要がなく、新しいスレーブノードが追加されたときにすぐに感知することができ、masterノードが故障したり故障したりした後、infoコマンドでredisスレーブ情報をリアルタイムで更新することができる.
2.2秒ごとに、各sentinelノードはredisデータノードの__sentinel__:helloというchannel(チャンネル)にメッセージを送信し、メッセージの内容は以下の通りである.
   
   

各sentinelノードはchannelを購読し、他のsentinelノードとプライマリノードの判断を理解するため、このタイミングタスクは次の2つの作業を完了することができます.
  • 新しいsentinelノードを発見する:マスターノードの__sentinel__:helloを購読することによって他のsentinelノード情報を理解し、新しく追加されたsentinelノードであれば、sentinelノード情報を保存し、sentinelノードと接続
  • を作成する.
  • sentinelノード間でプライマリノードの状態を交換し、masterのオフラインと障害処理のleader選択を確認します.

  • 3.1秒ごとに、各sentinelノードは、プライマリノード、スレーブノード、残りのsentinelノードにpingコマンドを送信して心拍検出を行い、これらのノードが到達できるかどうかを確認します.タイミングでpingコマンドを送信することで、sentinelノードはメインノード、スレーブノード、残りのsentinelノードに接続を確立し、各ノードの監視を実現し、このタイミングタスクはノードのオフライン判定の重要な根拠である.
    sdown(主観下線)とodown(客観下線)
  • 主観ダウンライン各sentinelノードは1秒おきにメインノード、スレーブノード、他のsentinelノードからpingコマンドを送信して心拍検出を行い、これらのノードがdown-after-millisecondsを超えて有効な返信を行わない場合、sentinelノードはそのノードがダウンラインしていると考え、この行為をメインダウンラインと呼ぶ.主観的なラインオフはあるsentinelノードの判断であり,sentinelクラスタの判断ではないため,誤審の可能性がある.
  • 客観ダウンラインsentinel主観ダウンラインのノードがメインノードである場合、このsentinelノードはsentinel ismaster-down-by-addr命令により他のsentinelノードにメインノードに対する判断を尋ね、個数を超えるsentinelノードがメインノードに確かに問題があると判断した場合、このsentinelノードは客観ダウンラインの決定を下すので、客観ダウンラインの意味は比較的明らかである.つまりsentinelノードの大部分がメインノードのラインオフに同意した判定をしているので,この判定は客観的である.
  • sentinel is-master-down-by-addrコマンドについて説明します.
    sentinel is-master-down-by-addr    

    ip、port:このip:portのredisプロセスがcurrent_をオフラインにするかどうかを尋ねるepoch:現在の構成バージョンrunid:現在のsentinelノードのrunidの場合、このコマンドは、*の場合、masterがダウンラインしているかどうかを他のsentinelノードに確認するために使用されます.
    このコマンドの結果には、次の3つの情報が含まれます.
  • down_state:ターゲットsentinelノードはメインノードの下線判断に対して,1は下線,0はオンラインである.
  • leader_runid:leader_runidが*に等しい場合、返される結果は、leader_runidは特定のrunidに等しく、ターゲットノードを代表してrunid sentinelノードがleaderになることに同意する.
  • leader_epoch:leaderバージョン.

  • まとめ
    上記では、redisクラスタにおけるsentinelの3つのタイミングモニタリングタスクを紹介し、主観的なオフライン、客観的なオフラインの概念、およびsentinel is-master-down-by-addr , フェイルオーバ前のsentinelがどのようにleaderを選択するか、およびredisクラスタにおける新しいmasterがどのように選択するかを理解した.