Redis 哨兵模式

本文将介绍 Redis 中的哨兵模式,它相当于主从模式的升级。

一、主从模式的缺点

主从模式存在 “没有自动纠错机制,主节点宕机后需要人工恢复” 的问题。

二、哨兵模式

哨兵模式通过持续监控的方式判断主机是否工作正常,并且能够在主机发生故障时自动选择新的主机。

哨兵模式有两个核心功能:

  • 持续监控:哨兵会持续与每个 Redis 节点进行通信,获取节点的运行状态

    哨兵会周期性给所有的节点发送 PING 命令,如果节点没有在规定时间内响应 PING 命令,则标记为 “下线”,如果节点是主服务器,还会进入 “选取主机” 的流程

  • 选取主机:当检测到主机发生故障时,会选取一个合适的从机,并将其提升为新的主机,然后通过订阅模式通知其它从机跟随

    • 筛选:从多个从机中,按照一定的筛选条件(是否在线、网络情况是否良好),将不符合条件的从机去除
    • 打分:根据一定的规则(配置项中的优先级、与旧主库的同步程度、ID 号),给从机逐一打分
    • 选取:选择分数最高的从机,提升为新的主机

三、哨兵集群

1. 为什么需要哨兵集群?

在 “持续监控” 的过程中,节点可能并没有下线,但是由于网络拥塞、压力过大等原因没有及时响应哨兵的 PING 请求,导致被误判为下线。

如果对从机误判,那么影响并不会太大,只需要重新上线后同步数据即可;如果对主机误判,”选择主机” 和 “主从切换” 将带来额外的计算和通信开销。

因此,通常采用 “哨兵集群” 的方式,通过多个哨兵共同维护 “主从结构”。

2. 工作模式

在哨兵集群的模式中,哨兵的工作模式如下:

  • 哨兵会监控各个服务器和其它哨兵

  • 持续监控:

    • 主观下线:如果哨兵发现某个主机、从机异常,它可以 “主观” 认为其已下线

    • 客观下线:如果哨兵发现主机异常,它需要和其它哨兵一起判断它是否 “客观” 下线

      • 哨兵会向其它哨兵发送 is-master-down-by-addr 命令
      • 其它哨兵自行判断并响应 Y 或 N
      • 当赞成票数满足要求后,主机便会被 “客观下线”,失去主机身份
  • 选取主机:

    • 哨兵会进行投票以选出 Leader 节点
    • Leader 节点会 全权负责 “选取主机”

参考