重点回顾
- Sentinel 只是一个运行在特殊模式下的 Redis 服务器,
它使用了和普通模式不同的命令表,
所以 Sentinel 模式能够使用的命令和普通 Redis 服务器能够使用的命令不同。
- Sentinel 会读入用户指定的配置文件,
为每个要被监视的主服务器创建相应的实例结构,
并创建连向主服务器的命令连接和订阅连接,
其中命令连接用于向主服务器发送命令请求,
而订阅连接则用于接收指定频道的消息。
- Sentinel 通过向主服务器发送 INFO 命令来获得主服务器属下所有从服务器的地址信息,
并为这些从服务器创建相应的实例结构,
以及连向这些从服务器的命令连接和订阅连接。
- 在一般情况下,
Sentinel 以每十秒一次的频率向被监视的主服务器和从服务器发送 INFO 命令,
当主服务器处于下线状态,
或者 Sentinel 正在对主服务器进行故障转移操作时,
Sentinel 向从服务器发送 INFO 命令的频率会改为每秒一次。
- 对于监视同一个主服务器和从服务器的多个 Sentinel 来说,
它们会以每两秒一次的频率,
通过向被监视服务器的
__sentinel__:hello
频道发送消息来向其他 Sentinel 宣告自己的存在。
- 每个 Sentinel 也会从
__sentinel__:hello
频道中接收其他 Sentinel 发来的信息,
并根据这些信息为其他 Sentinel 创建相应的实例结构,
以及命令连接。
- Sentinel 只会与主服务器和从服务器创建命令连接和订阅连接,
Sentinel 与 Sentinel 之间则只创建命令连接。
- Sentinel 以每秒一次的频率向实例(包括主服务器、从服务器、其他 Sentinel)发送 PING 命令,
并根据实例对 PING 命令的回复来判断实例是否在线:
当一个实例在指定的时长中连续向 Sentinel 发送无效回复时,
Sentinel 会将这个实例判断为主观下线。
- 当 Sentinel 将一个主服务器判断为主观下线时,
它会向同样监视这个主服务器的其他 Sentinel 进行询问,
看它们是否同意这个主服务器已经进入主观下线状态。
- 当 Sentinel 收集到足够多的主观下线投票之后,
它会将主服务器判断为客观下线,
并发起一次针对主服务器的故障转移操作。