调研Redis高可用两种方案
这样,哨兵节点就能从info命令中自动获取到从节点信息,因此那些后续才加入的从节点信息不需要显式配置就能自动感知。 每隔2秒,每个哨兵节点将会向Redis数据节点的__sentinel__:hello频道同步自身得到的主节点信息以及当前哨兵节点的信息,由于其他哨兵节点也订阅了这个频道,因此实际上这个操作可以交换哨兵节点之间关于主节点以及哨兵节点的信息。 这一操作实际上完成了两件事情: * 发现新的哨兵节点:如果有新的哨兵节点加入,此时保存下来这个新哨兵节点的信息,后续与该哨兵节点建立连接。 * 交换主节点的状态信息,作为后续客观判断主节点下线的依据。 每隔1秒,每个哨兵节点向主、从数据节点以及其他sentinel节点发送ping命令做心跳探测,这个心跳探测是后续主观判断数据节点下线的依据。 上面三个监控任务中的第三个探测心跳任务,如果在配置的down-after-milliseconds之后没有收到有效回复,那么就认为该数据节点“主观下线(sdown)”。 为什么称为“主观下线”?因为在一个分布式系统中,有多个机器在一起联动工作,网络可能出现各种状况,仅凭一个节点的判断还不足以认为一个数据节点下线了,这就需要后面的“客观下线”。 客观下线当一个哨兵节点认为主节点主观下线时,该哨兵节点需要通过”sentinel is-master-down-by addr”命令向其他哨兵节点咨询该主节点是否下线了,如果有超过半数的哨兵节点都回答了下线,此时认为主节点“客观下线”。 当主节点客观下线时,需要选举出一个哨兵节点做为哨兵领导者,以完成后续选出新的主节点的工作。 这个选举的大体思路是:
可以看到,这个选举领导者的流程很像raft中选举leader的流程。 在剩下的Redis从节点中,按照以下顺序来选择新的主节点:
选择了新的主节点之后,还需要最后的流程让该节点成为新的主节点:
原文地址: https://www.codedump.info/post/20190409-redis-sentinel/ 参考阅读:
【编辑推荐】
点赞 0 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |