|
这样,哨兵节点就能从info呼吁中自动获取到从节点信息,因此那些后续才插手的从节点信息不必要显式设置就能自动感知。

向__sentinel__:hello频道同步信息
每隔2秒,每个哨兵节点将会向Redis数据节点的__sentinel__:hello频道同步自身获得的主节点信息以及当前哨兵节点的信息,因为其他哨兵节点也订阅了这个频道,因此现实上这个操纵可以互换哨兵节点之间关于主节点以及哨兵节点的信息。
这一操纵现实上完成了两件工作: * 发明新的哨兵节点:假若有新的哨兵节点插手,此时生涯下来这个新哨兵节点的信息,后续与该哨兵节点成立毗连。 * 互换主节点的状态信息,作为后续客观判定主节点下线的依据。

向数据节点做心跳探测
每隔1秒,每个哨兵节点向主、从数据节点以及其他sentinel节点发送ping呼吁做心跳探测,这个心跳探测是后续主观判定数据节点下线的依据。

主观下线和客观下线
主观下线
上面三个监控使命中的第三个探测心跳使命,假如在设置的down-after-milliseconds之后没有收到有用回覆,那么就以为该数据节点“主观下线(sdown)”。

为什么称为“主观下线”?由于在一个漫衍式体系中,有多个呆板在一路联动事变,收集也许呈现各类状况,仅凭一个节点的判定还不敷以以为一个数据节点下线了,这就必要后头的“客观下线”。
客观下线
当一个哨兵节点以为主节点主观下线时,该哨兵节点必要通过”sentinel is-master-down-by addr”呼吁向其他哨兵节点咨询该主节点是否下线了,假若有高出半数的哨兵节点都答复了下线,此时以为主节点“客观下线”。

推举哨兵率领者
当主节点客观下线时,必要推举出一个哨兵节点做为哨兵率领者,以完成后续选出新的主节点的事变。
这个推举的概略思绪是:
-
每个哨兵节点通过向其他哨兵节点发送”sentinel is-master-down-by addr”呼吁来申请成为哨兵率领者。
-
而每个哨兵节点在收到一个”sentinel is-master-down-by addr”呼吁时,只应承给第一个节点投票,其他节点的该呼吁城市被拒绝。
-
假如一个哨兵节点收到了半数以上的赞成票,则成为哨兵率领者。
-
假如前面三步在一按时刻内都没有选出一个哨兵率领者,将从头开始下一次推举。
可以看到,这个推举率领者的流程很像raft中推举leader的流程。

选出新的主节点
在剩下的Redis从节点中,凭证以下次序来选择新的主节点:
-
过滤掉“不康健”的数据节点:好比主观下线、断线的从节点、五秒内没有回覆过哨兵节点ping呼吁的节点、与主节点失联的从节点。
-
选择slave-priority(从节点优先级)最高的从节点,假如存在则返回不存在则继承后头的流程。
-
选择复制偏移量最大的从节点,这意味着这个从节点上面的数据最完备,假如存在则返回不存在则继承后头的流程。
-
到了这里,全部剩余从节点的状态都是一样的,选择runid最小的从节点。

晋升新的主节点
选择了新的主节点之后,还必要最后的流程让该节点成为新的主节点:
-
哨兵率领者向上一步选出的从节点发出“slaveof no one”呼吁,让该节点成为主节点。
-
哨兵率领者向剩余的从节点发送呼吁,让它们成为新主节点的从节点。
-
哨兵节点荟萃会将原本的主节点更新为从节点,当其规复之后呼吁它去复制新的主节点的数据。

假如进程中哨兵率领者失效怎么办?
原文地点:
https://www.codedump.info/post/20190409-redis-sentinel/
参考阅读:
【编辑保举】
- 微软开源分手式身份辨认器材 ION
- 19款超好用的免费数据发掘器材大汇总!
- 多名中国开拓者入选 FFmpeg 决定委员会
- 开拓者回想:PHP 早已不是十年前的边幅
- 开源建议者忧虑被微软把持开源体系器材
【责任编辑:张燕妮 TEL:(010)68476606】
点赞 0 (编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|