MST

星途 面试题库

面试题:Redis Sentinel 从服务器信息拓扑异常处理与修复

假设 Redis Sentinel 在获取从服务器信息时,由于网络分区等异常情况导致拓扑信息混乱。请详细说明如何检测这种异常,并给出恢复正确拓扑信息的完整方案和具体操作步骤。
15.0万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

检测异常

  1. 监控心跳信息
    • Redis Sentinel 通过定期向主从节点发送PING命令来检测节点的存活状态。若从节点在规定时间(如 down-after-milliseconds 配置的时间)内没有响应,Sentinel 会标记该从节点主观下线(SDOWN)。可以通过查看 Sentinel 日志(如 /var/log/redis-sentinel.log),若出现类似 “[sentinel] +sdown master <master - name> ` 以及从节点相关的下线记录,可能是网络分区等导致从节点失联。
  2. 拓扑结构检查
    • Sentinel 内部维护着主从节点的拓扑关系。可以使用 SENTINEL GET - MASTERS 命令获取所有被监控的主节点信息,再对每个主节点使用 SENTINEL get - slaves <master - name> 命令获取其从节点列表。
    • 对比获取到的拓扑结构与预期的拓扑结构。如果从节点数量异常减少,或者某些从节点显示连接状态异常(如 flags 字段中 S_DOWNO_DOWN 标识异常),可能存在拓扑信息混乱。例如,正常应该有3个从节点,但获取到只有2个,就需要进一步排查。
  3. 查看选举状态
    • Sentinel 通过选举来确定主节点故障时的新主节点。如果在没有明显主节点故障的情况下频繁发生选举(可通过查看日志中的 +election 相关记录),可能是拓扑信息混乱导致 Sentinel 误判主节点状态,进而触发选举。

恢复正确拓扑信息的方案和操作步骤

  1. 确认网络问题解决
    • 首先排查网络分区等底层网络问题,确保各个 Redis 节点之间网络连通正常。可以使用 ping 命令检查节点之间的网络可达性,使用 traceroute 命令查看网络路由路径是否存在异常。如果发现网络设备(如路由器、交换机)配置错误或网络线路故障,及时进行修复。
  2. 手动重置 Sentinel
    • 对于每个 Sentinel 节点,使用 SENTINEL RESET <pattern> 命令,这里 <pattern> 可以使用 * 表示重置所有被监控的主节点。例如,在 Redis 客户端连接到 Sentinel 节点后执行:
    redis - cli - p <sentinel - port> SENTINEL RESET *
    
    • 该命令会清除 Sentinel 对主从节点的当前认知,重新开始监控和发现节点。Sentinel 会重新发现主从节点,并重新建立拓扑关系。
  3. 等待 Sentinel 重新发现拓扑
    • 执行 SENTINEL RESET 命令后,Sentinel 会按照配置的规则重新发现主从节点。Sentinel 配置文件(如 sentinel.conf)中的 sentinel monitor <master - name> <ip> <port> <quorum> 等配置决定了它如何发现和监控主节点,进而发现其从节点。
    • 等待一段时间(通常根据网络状况和节点数量,可能需要几分钟),期间可以通过 SENTINEL GET - MASTERSSENTINEL get - slaves <master - name> 命令持续查看拓扑结构的恢复情况。当看到从节点数量和状态恢复正常,且拓扑结构符合预期时,说明恢复成功。
  4. 配置持久化和重启
    • 为了保证恢复后的拓扑信息在 Sentinel 重启后依然有效,确保 Sentinel 配置文件(sentinel.conf)中的配置正确且已持久化。如果在恢复过程中对配置进行了修改,要确保这些修改保存到配置文件中。
    • 重启所有 Sentinel 节点,验证重启后拓扑信息依然正确。可以在重启后再次使用 SENTINEL GET - MASTERSSENTINEL get - slaves <master - name> 命令检查拓扑结构。