哨兵会通过心跳包的方式监控所有redis节点同时对主节点发送info命令来获取所有的从节点关系图;
超时则先判定为主观下线,如果其他哨兵也判定其下线并超过一定数量,就会被判定为客观下线;
通过哨兵leader选举实现故障转移,集群中至少有3个哨兵节点(奇数个),只有一个可以实现故障转移;
每个主观下线的哨兵节点向其他节点发送命令,要求设置他为leader,收到命令的哨兵如果没有同意其他节点请求则同意;
票数过半则成为领导者,如有多个领导者,则过一段时间重新选举;
故障转移流程:选择一个从节点作为新的主节点,向其他slave发出通知,让其他slave成为新master的从节点;旧master复活后也将成为新master的从节点,最后向客户端通知master的变化;
选择新master的规则:1.优先级 2.复制偏移量大 3.runid最小