Sentinel(哨兵)模式集群架构图(来自网络)
Redis Sentinel
Sentinel(哨兵)是用于监控 redis 集群中 Master 状态的工具,其已经被集成在 redis2.4+ 的版本中。
Sentinel 作用
- Master 状态检测;
- 如果 Master 异常,则会进行 Master-Slave 切换,将其中一个 Slave 作为 Master,将之前的 Master 作为 Slave;
- Master-Slave 切换后,master_redis.conf、slave_redis.conf 和 sentinel.conf 的内容都会发生改变,即 master_redis.conf 中会多一行 slaveof 的配置,sentinel.conf 的监控目标会随之调换。
Sentinel 工作方式
- 每个 Sentinel 以每秒钟一次的频率向它所知的 Master,Slave 以及其他 Sentinel 实例发送一个
PING
命令; - 如果一个实例(instance)距离最后一次有效回复
PING
命令的时间超过down-after-milliseconds
选项所指定的值, 则这个实例会被 Sentinel 标记为主观下线; - 如果一个 Master 被标记为主观下线,则正在监视这个 Master 的所有 Sentinel 要以每秒一次的频率确认 Master 的确进入了主观下线状态;
- 当有足够数量的 Sentinel(大于等于配置文件指定的值)在指定的时间范围内确认 Master 的确进入了
主观下线
状态,则 Master 会被标记为客观下线
; - 在一般情况下, 每个 Sentinel 会以每 10 秒一次的频率向它已知的所有 Master,Slave 发送
INFO
命令; - 当 Master 被 Sentinel 标记为
客观下线
时,Sentinel 向下线的 Master 的所有 Slave 发送 INFO 命令的频率会从 10 秒一次改为每秒一次; - 若没有足够数量的 Sentinel 同意 Master 已经下线, Master 的
客观下线
状态就会被移除; - 若 Master 重新向 Sentinel 的
PING
命令返回有效回复, Master 的主观下线
状态就会被移除。
主观下线和客观下线
主观下线:Subjectively Down,简称 SDOWN
,指的是当前 Sentinel 实例对某个 redis 服务器做出的下线判断。
客观下线:Objectively Down, 简称 ODOWN
,指的是多个 Sentinel 实例在对 Master Server 做出 SDOWN
判断,并且通过 SENTINEL is-master-down-by-addr
命令互相交流之后,得出的 Master Server 下线判断,然后开启 failover
。
通俗来讲就是
redis 的 sentinel 系统用来管理多个 redis 服务器,可以实现一个功能上实现 HA 的集群。该系统主要执行四个任务:
- 监控( Monitoring ): Redis Sentinel 实时监控主服务器和从服务器运行状态;
- 提醒(notification): 当被监控的某个 Redis 服务器出现问题时, Redis Sentinel 可以向系统管理员发送通知, 也可以通过 API 向其他程序发送通知;
- 自动故障转移:如果一个 master 不正常运行了,哨兵可以启动一个故障转移进程,将一个 slave 升级成为 master,其他的 slave 被重新配置使用新的 master,并且应用程序使用 Redis 服务端通知的新地址;
- 配置提供者:哨兵作为 Redis 客户端发现的权威来源:客户端连接到哨兵请求当前可靠的 master 的地址。如果发生故障,哨兵将报告新地址。