Redis Sentinel 哨兵 的架构 主要 包括 主节点存活检测、主从运行情况检测、 自动故障转移、主从切换。Redis Sentinel 最小配置是一主一从。
Redis Sentinel 系统可以用来管理 多个 Redis 服务器, 该系统可以执行以下四个任务:
1、 监控:不断检查主服务器和从服务器是否正常运行
2、通知:当被监控的某个redis 服务器出现问题, Sentinel 通过API 脚本向管理员或者其他应用程序发出通知
3、自动故障转移:当主节点不能正常工作时,Sentinel 会开始一次自动的故障转移操作,它会将与失效主节点是主从关系的其中一个从节点升级为新的主节点,并且将其他的从节点指向新的主节点,这样人工干预就可以免了。
4、配置提供者:在Redis Sentinel 模式下, 客户端应用在初始化时连接的是Sentinel 节点集合,从中获取主节点的信息。
哨兵的工作原理
1、每个Sentinel 节点都需要定期执行以下任务:每个Sentinel 以每秒一次的频率,向它所知的主服务器、从服务器以及其他的Sentinel实例发送一个 PING 命令 (如上图)
2、如果一个实例距离最后一次有效回复PING命令的时间超过 down-after-milliseconds 所指定的值,那么这个实例会被Sentinel标记为主观下线(如上图)
3、如果一个主服务器被标记为主观下线,那么正在监视这个服务器的所有Sentinel 节点,要以每秒一次的频率确认主服务器 的确 进入了 主观下线 状态 (如上图)
4、如果一个主服务器被标记为主观下线, 并且有足够数量的Sentinel (至少要达到配置文件指定的数量) 在指定的时间范围内同意这一判断, 那么 这个 主服务器 被 标记为 客观下线 (如上图)
5、一般情况下,每个Sentinel 会以每 10 秒 一次的频率向它已知的所有主服务器和从服务器发送 INFO 命令,当一个主服务器被标记为客观下线时, Sentinel 向下线主服务器的所有 从服务器 发送INFO 命令的频率, 会从 10秒一次 改为 每秒一次
6、Sentinel 和 其他 Sentinel 协商客观下线 的 主节点 的状态, 如果处于 SDOWN(降支斜率) 状态,则投票自动选出新的主节点, 将剩余从节点指向新的主节点 进行 数据复制
7、当没有足够数量的Sentinel 同意主服务器下线时, 主服务器 的客观下线状态就会被移除。当主服务器重新向 Sentinel 的 PING 命令返回 有效 回复时, 主服务器 的 主观下线状态就会被移除。