面试题答案
一键面试获取从服务器信息的主要命令或方法
- SENTINEL GET-master-addr-by-name 命令:Sentinel 之间可以通过该命令获取主服务器的地址信息。例如,当一个 Sentinel 启动时,它可以向其他已知的 Sentinel 发送这个命令来获取主服务器的地址。一旦获取到主服务器地址,就可以进一步获取其关联的从服务器信息。因为 Redis 主服务器会维护从服务器的连接列表,Sentinel 可以通过与主服务器交互间接获取从服务器信息。
- INFO replication 命令:Sentinel 会定期向主服务器和从服务器发送
INFO replication
命令。主服务器在响应这个命令时,会返回关于自身以及其所有从服务器的详细信息,包括从服务器的 IP 地址、端口号、复制偏移量等。从服务器在响应此命令时,会提供自身关于复制状态的信息,如正在复制的主服务器地址、自身复制偏移量等。
保障获取从服务器信息实时性的常规机制
- 定期心跳检测:
- Sentinel 会以一定的时间间隔(默认每 10 秒)向主服务器和从服务器发送
PING
命令。这个心跳检测不仅用于判断服务器是否存活,还能间接保障信息的实时性。如果某个从服务器在一段时间内没有响应心跳,Sentinel 会标记其为下线状态,并开始尝试获取最新的状态信息。 - 同时,Sentinel 之间也会互相发送
PING
命令来维持连接并同步状态信息,当某个 Sentinel 发现主服务器或从服务器状态变化时,能快速将这个信息传播给其他 Sentinel。
- Sentinel 会以一定的时间间隔(默认每 10 秒)向主服务器和从服务器发送
- 配置更新:
- 当 Sentinel 检测到主从服务器的拓扑结构发生变化(如新增从服务器、从服务器下线等)时,会更新其本地配置,并将这个变化传播给其他 Sentinel。这种配置更新机制确保了所有 Sentinel 对主从服务器信息的一致性和实时性。
- 例如,当一个新的从服务器加入集群时,主服务器会将这个信息包含在
INFO replication
的响应中返回给 Sentinel,Sentinel 会根据这个信息更新自己的配置,并告知其他 Sentinel。
- 事件通知:
- Sentinel 采用事件驱动模型,当主从服务器发生重要事件(如从服务器连接、断开连接等)时,会触发相应的事件。Sentinel 会监听这些事件,并根据事件类型及时更新从服务器信息。这种机制使得 Sentinel 能快速响应服务器状态变化,保障获取信息的实时性。