目录
Redis在主从复制模式下,如果主节点出现故障,需要人工将从节点晋升为主节点,还需要通知从节点更新新的主节点信息。从Redis的2.8版本开始引入Redis Sentinel(哨兵),Sentinel模式当主节点出现故障时,Redis Sentinel能自动完成故障发现和故障转移并通知应用方,实现了高可用。
一、Redis Sentinel架构
Redis Sentinel包含了多个Sentinel节点(多个是为了防止误判)和Redis数据节点,主节点写数据同步到从节点,从节点可当作备份也可以提供读(分担读压力)。每个Sentinel节点会对数据节点和其余Sentinel节点进行监控,当它发现节点不可达时,会对节点做下线标识。如果被标识的是主节点,它还会和其他Sentinel节点进行“协商”,大多数Sentinel节点都认为主节点不可达时,它们会选举出一个Sentinel节点来完成自动故障转移的工作,同时会将这个变化实时通知给Redis应用方。自动完成故障发现和故障转移。Redis Sentinel中的Sentinel节点个数应该为大于等于3且最好为奇数(便于选举)。
二、Redis Sentinel故障转移过程
1.主节点出现故障,从节点与主节点失去联系,导致主从复制失败。
2.每个Sentinel节点通过定期监控发现了主节点出现故障。
3.多个Sentinel节点都认为主节点故障,选举出sentinel-1节点作为负责故障转移的领导者。
4.sentinel-1节点执行故障转移。
故障转移步骤:
- 执行命令slaveof no one关闭复制,从节点变更为主节点。
- 其余从节点slaveof new master变更成新的master的从节点。
- notice client:故障转移后sentinel结点会将结果通知给客户端(应用方)。
- 原主节点恢复后变成从节点去复制新的主节点信息。
从节点变为主节点的选取规则:
- 过滤掉断线或者主观下线、5秒内没回复过Sentinel节点ping响应、与主节点失联超过down-after-milliseconds*10秒。
- 选择从节点优先级最高的从节点列表,如果存在则返回不存在则继续。
- 选择复制偏移量最大的从节点(复制的最完整),如果存在则返回不存在则继续。
- 选择runid最小的从节点。
5.故障转移后的结构
三、Sentinel主要功能介绍
1.监控:Redis Sentinel通过三个定时监控任务完成对各个节点发现和监控:
- 每隔10秒每个Sentinel节点会向主、从节点发送info命令获取最新的结构。
- 每隔1秒每个Sentinel节点会向主、从节点、其余Sentinel节点发送一条ping命令做一次心跳检测,来确认这些节点当前是否可达。
- 每隔2秒每个Sentinel节点会向Redis数据节点的__sentinel__:hello频道上发送该Sentinel节点对于主节点的判断以及当前Sentinel节点的信息。Sentinel节点之间交换主节点的状态,作为后面客观下线以及领导者选举的依据。
2.通知:Sentinel会把故障转移的结果通知给应用方。
3.主节点故障转移:从节点自动晋升为主节点并维护后续正确的关系。
4.配置提供者:客户端在初始化的时候链接的是Sentinel节点集合,从Sentinel节点集合中获取主节点信息。