哨兵:
- Redis主从复制模式下,一旦主节点故障不能提供服务,哨兵架构可解决此类问题,自动完成故障发现和故障转移,并通知应用方,实现真正的高可用。
- 逻辑架构上Redis Sentinel只是新增了多个Sentinel节点,这些节点集合会定期对所有节点进行监控,特别是对主几点的故障实现自动转移。
- 安装和部署:
- 启动主节点;
- 启动两个从节点(配置文件中加slaveof);
- 配置Sentinel节点;
- 启动Sentinel节点;(redis-sentinel命令);
- 部署技巧:
- 不应将Sentinel节点部署到同一物理机上,防止硬件故障导致整体异常;
- 部署三个以上奇数个Sentinel节点;
- 实现原理
- 三个定时监控任务:
- 每隔10s,每隔Sentinel节点会想主节点和从节点发送info命令获取最新的拓扑结构。
- 每隔2s,每个Sentinel节点会向Redis数据节点的__sentinel__:hello频道上发送该Sentinel节点对于主节点的判断以及当前Sentinel节点的信息,同时每个Sentinel节点也会订阅该频道,了解其他Sentinel节点以及它们对主节点的判断。
- 每隔1s,每个Sentinel节点会向主节点、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达。
- 主观下线客观下线:
- 主观下线:
- 当心跳检测超过down-after-milliseconds没有进行有效回复,Sentinel节点会判定该节点下线,所谓主观下线。
- 客观下线:
- 当主观下线的节点是主节点时,该节点会通过sentinel is-master-down-by-addr命令向其他Sentinel节点询问对主节点的判断,当超过<quorum>个数,会做出客观下线的决定。
- 主观下线:
- 领导者Sentinel节点选举:
- 三个定时监控任务: