Redis Sentinel 的根本实现原理,具体蕴含以下几个方面:
- 三个定时工作
- 主管下线
- 主观下线
- Sentinel 领导者选举
- 故障转移
本节对 三个定时工作 开展阐明。
Redis Sentinel 通过三个定时工作实现对各个节点发现和监控:
- 每隔 10 秒;
- 每隔 2 秒;
- 每隔 1 秒;
每隔 10 秒
每隔 10 秒,每隔 Sentinel 节点会向主节点和从节点发送 info 命令获取最新的拓扑图。
作用体现
- 通过向主节点执行 info 命令,获取从节点信息,这也是为什么 Sentinel 节点不须要显示配置监控从节点;
- 当有新的从节点退出时能够立刻感知到;
- 节点不可达或故障转移后,能够通过 info 命令实时更新节点拓扑信息;
每隔 2 秒
每隔 2 秒,每个 Sentinel 节点会向 Redis 数据节点的 __sentinel__:hello
频道发送该 Sentinel 节点对于主节点的判断以及以后 Sentinel 节点的信息,同时每个 Sentinel 节点也会订阅该频道,来理解其余 Sentinel 节点以及它们对主节点的判断。
工作内容
- 发现新的 Sentinel 节点:通过订阅主节点的
__sentinel__:hello
理解其余 Sentinel 节点信息,如果是新退出的 Sentinel 节点,将该 Sentinel 节点信息保存起来,并于该 Sentinel 节点创立连贯。 - Sentinel 节点之间替换主节点的状态,作为前面主观下线以及领导者选举的根据。
每隔 1 秒心跳检测
每隔 1 秒,每个 Sentinel 节点会向主节点、从节点、其余 Sentinel 节点发送一条 ping 命令做一次心跳检测,来确认这些节点以后是否可达。
作用体现
通过每 1 秒定时工作,Sentinel 节点对主节点、从节点、其余 Sentinel 节点都建设起连贯,实现了对每个节点的监控,这个定时工作是判断节点是否可用的重要依据。
参考:《Redis 开发与运维》