沈秋彬的技术博客 Full Stack Coder

Redis哨兵模式

2019-12-06
shenqb


什么是哨兵

  • 哨兵模式是一种架构模式,是Redis集群主从切换技术,是保证其主从架构高可用的解决方案。
  • Redis的哨兵是一个独立的进程,其通过发送命令,等待Redis服务器响应,从而监控运行的多个Redis实例。

为什么用哨兵

这里的哨兵有两个作用:

  1. 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  2. 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。

哨兵的原理

哨兵原理图

主要分为两种情况:

  1. 从Redis宕机 这个相对而言比较简单,在Redis中从库重新启动后会自动加入到主从架构中,自动完成同步数据。在Redis2.8版本后,主从断线后恢复的情况下实现增量复制。
  2. 主Redis宕机 这个相对而言就会复杂一些,需要以下2步才能完成 a. 在从数据库中执行SLAVEOF NO ONE命令,断开主从关系并且提升为主库继续服务 b. 第二步,将主库重新启动后,执行SLAVEOF命令,将其设置为其他库的从库,这时数据就能更新回来 由于这个手动完成恢复的过程其实是比较麻烦的并且容易出错,所以Redis提供的哨兵(sentinel)的功能来解决

哨兵的实现

主要是基于定时监控机制和故障自动转移机制实现。

哨兵的定时监控

* 任务1:每个哨兵节点每10秒会向主节点和从节点发送info命令获取最拓扑结构图,哨兵配置时只要配置对主节点的监控即可,通过向主节点发送info,获取从节点的信息,并当有新的从节点加入时可以马上感知到

* 任务2:每个哨兵节点每隔2秒会向redis数据节点的指定频道上发送该哨兵节点对于主节点的判断以及当前哨兵节点的信息,同时每个哨兵节点也会订阅该频道,来了解其它哨兵节点的信息及对主节点的判断,其实就是通过消息publish和subscribe来完成的

* 任务3:每隔1秒每个哨兵会向主节点、从节点及其余哨兵节点发送一次ping命令做一次心跳检测,这个也是哨兵用来判断节点是否正常的重要依据

哨兵的故障自动转移

  1. 在从节点中选择新的主节点:选择的原则是,首先过滤掉不健康的从节点;然后选择优先级最高的从节点(由slave-priority指定);如果优先级无法区分,则选择复制偏移量最大的从节点;如果仍无法区分,则选择runid最小的从节点。
  2. 更新主从状态:通过slaveof no one命令,让选出来的从节点成为主节点;并通过slaveof命令让其他节点成为其从节点。
  3. 将已经下线的主节点(即6379)设置为新的主节点的从节点,当6379重新上线后,它会成为新的主节点的从节点。

参考:

https://www.jianshu.com/p/06ab9daf921d


Similar Posts

Comments