Redis 哨兵模式
本文将介绍 Redis 中的哨兵模式,它相当于主从模式的升级。
一、主从模式的缺点
主从模式存在 “没有自动纠错机制,主节点宕机后需要人工恢复” 的问题。
二、哨兵模式
哨兵模式通过持续监控的方式判断主机是否工作正常,并且能够在主机发生故障时自动选择新的主机。
哨兵模式有两个核心功能:
持续监控:哨兵会持续与每个 Redis 节点进行通信,获取节点的运行状态
哨兵会周期性给所有的节点发送 PING 命令,如果节点没有在规定时间内响应 PING 命令,则标记为 “下线”,如果节点是主服务器,还会进入 “选取主机” 的流程
选取主机:当检测到主机发生故障时,会选取一个合适的从机,并将其提升为新的主机,然后通过订阅模式通知其它从机跟随
- 筛选:从多个从机中,按照一定的筛选条件(是否在线、网络情况是否良好),将不符合条件的从机去除
- 打分:根据一定的规则(配置项中的优先级、与旧主库的同步程度、ID 号),给从机逐一打分
- 选取:选择分数最高的从机,提升为新的主机
三、哨兵集群
1. 为什么需要哨兵集群?
在 “持续监控” 的过程中,节点可能并没有下线,但是由于网络拥塞、压力过大等原因没有及时响应哨兵的 PING 请求,导致被误判为下线。
如果对从机误判,那么影响并不会太大,只需要重新上线后同步数据即可;如果对主机误判,”选择主机” 和 “主从切换” 将带来额外的计算和通信开销。
因此,通常采用 “哨兵集群” 的方式,通过多个哨兵共同维护 “主从结构”。
2. 工作模式
在哨兵集群的模式中,哨兵的工作模式如下:
哨兵会监控各个服务器和其它哨兵
持续监控:
主观下线:如果哨兵发现某个主机、从机异常,它可以 “主观” 认为其已下线
客观下线:如果哨兵发现主机异常,它需要和其它哨兵一起判断它是否 “客观” 下线
- 哨兵会向其它哨兵发送 is-master-down-by-addr 命令
- 其它哨兵自行判断并响应 Y 或 N
- 当赞成票数满足要求后,主机便会被 “客观下线”,失去主机身份
选取主机:
- 哨兵会进行投票以选出 Leader 节点
- Leader 节点会 全权负责 “选取主机”
参考
- Redis
- Redis 教程 | 菜鸟教程
- Redis数据库学习教程(快速入门版)
- Redis 核心技术与实战