Redis大乱探------哨兵(二)

1.1前言

        前一篇文章中,咱们分析了主从复制的原理,可是在该模式下,一旦主节点因为故障没法提供服务,须要人工干预才能将从节点变为主节点,所以该模式不是高可用的。欣慰的是,Redis从2.8开始正式提供哨兵架构来解决这个问题。算法

1.2哨兵

        当主节点出现故障时,哨兵(Redis Sentinel)模式下能自动完成故障发现和故障转移,并通知应用方,从而实现真正的高可用。架构

1.2.1故障发现

  • Sentinel节点每隔1秒钟向主节点发动ping命令判断其存活状态,当主节点在down-after-milliseconds时间内没有正确的响应,则Sentinel将此主节点置为“主观下线”。主观即当前Sentinel节点单方面认为主节点不可用,并无获得其余Sentinel节点的确认。
  • 随后该Sentinel节点会经过 is-master-down-by-addr命令向其余Sentinel节点进行确认。当确认的Sentinel节点数>=quorum时,则该Sentinel节点认定该主节点“客观下线”。
  • 当断定主节点为客观下线时,须要选取一个Sentinel节点做为领导者来处理故障转移工做。Redis使用了Raft算法实现领导者选举。大体选举流程以下:首先Sentinel节点确认主节点主观下线时,会像其余Sentinel节点发送is-master-down-by-addr命令,要求将本身设置为领导者。而后收到该命令的Sentinel节点,若是没有赞成过其余Sentinel节点的命令,则赞成该请求,不然拒绝。最后若是该Sentinel节点若是收到超过一半的意向赞成,则成为领导者,若是本回合没有选出领导者,则开启下一回合。

1.2.2故障转移

        步骤以下:spa

  • 在从节点列表中选出一个节点做为新的主节点(1.先过滤掉不健康节点。2.选择从节点优先级最高的从节点,最在则返回,不然继续第三步。3.选择复制偏移量最大的节点,即复制最完整的节点,不存在则继续第四步。4.选择runid最小的从节点)。
  • 将上面选出来的从节点执行slaveof no one  命令,让其成为主节点。
  • Sentinel领导者节点向剩余的从节点发送命令,让他们成为新主节点的从节点。

1.3总结

        哨兵机制可以自动完成故障发现和故障转移,有效的解决了Redis的高可用问题。ast

相关文章
相关标签/搜索