面试题答案
一键面试主节点失效判定标准
- 主观下线(SDOWN):
- 每个 Sentinel 节点会定期向主节点和从节点发送
PING
命令。 - 如果在
down-after-milliseconds
配置的时间内,没有收到有效回复(回复PONG
、LOADING
或MASTERDOWN
视为有效回复),则该 Sentinel 节点会将此主节点标记为SDOWN
(主观下线)。这只是单个 Sentinel 节点的“主观”判断。
- 每个 Sentinel 节点会定期向主节点和从节点发送
- 客观下线(ODOWN):
- 当一个 Sentinel 节点将主节点标记为
SDOWN
后,会向其他 Sentinel 节点发送SENTINEL is-master-down-by-addr
命令,询问其他 Sentinel 节点是否也认为该主节点下线。 - 当同意该主节点下线的 Sentinel 节点数量达到
quorum
(配置的法定人数)时,这个主节点就会被标记为ODOWN
(客观下线),即多个 Sentinel 节点都认为主节点已失效。
- 当一个 Sentinel 节点将主节点标记为
选择新主节点的条件
- 从节点优先级:
- 每个从节点都有一个
slave-priority
配置参数,数值越低优先级越高。在故障转移时,Sentinel 会优先选择优先级高的从节点提升为主节点。例如,如果一个从节点优先级为 50,另一个为 100,优先选择优先级为 50 的从节点。
- 每个从节点都有一个
- 复制偏移量:
- 如果多个从节点优先级相同,Sentinel 会选择复制偏移量最大的从节点。复制偏移量表示从节点复制数据的进度,偏移量越大说明从节点的数据越新。因为选择数据最新的从节点提升为主节点,可以最大程度减少数据丢失。
- 运行 ID:
- 如果优先级和复制偏移量都相同,Sentinel 会选择运行 ID 较小的从节点。运行 ID 是 Redis 实例启动时生成的唯一标识,这种选择方式只是一种随机的兜底策略,确保总能选出一个从节点提升为主节点。
配置传播与通知
- 配置传播:
- 当一个 Sentinel 完成故障转移,将某个从节点提升为主节点后,它会向其他 Sentinel 节点发送
SENTINEL failover
命令,通知其他 Sentinel 更新配置,将新的主节点信息传播出去。 - 同时,新的主节点会向所有从节点发送
SLAVEOF NO ONE
命令,让它们开始从新主节点进行复制。
- 当一个 Sentinel 完成故障转移,将某个从节点提升为主节点后,它会向其他 Sentinel 节点发送
- 通知:
- Sentinel 会通过发布订阅机制,向客户端发送关于主节点故障转移等事件的通知。客户端可以订阅
__sentinel__:hello
、__sentinel__:master-down
等频道,获取 Sentinel 相关事件信息,以便应用程序做出相应处理。
- Sentinel 会通过发布订阅机制,向客户端发送关于主节点故障转移等事件的通知。客户端可以订阅