面试题答案
一键面试检测异常
- 监控心跳信息:
- Redis Sentinel 通过定期向主从节点发送PING命令来检测节点的存活状态。若从节点在规定时间(如
down-after-milliseconds
配置的时间)内没有响应,Sentinel 会标记该从节点主观下线(SDOWN)。可以通过查看 Sentinel 日志(如/var/log/redis-sentinel.log
),若出现类似 “[sentinel] +sdown master <master - name> ` 以及从节点相关的下线记录,可能是网络分区等导致从节点失联。
- Redis Sentinel 通过定期向主从节点发送PING命令来检测节点的存活状态。若从节点在规定时间(如
- 拓扑结构检查:
- Sentinel 内部维护着主从节点的拓扑关系。可以使用
SENTINEL GET - MASTERS
命令获取所有被监控的主节点信息,再对每个主节点使用SENTINEL get - slaves <master - name>
命令获取其从节点列表。 - 对比获取到的拓扑结构与预期的拓扑结构。如果从节点数量异常减少,或者某些从节点显示连接状态异常(如
flags
字段中S_DOWN
或O_DOWN
标识异常),可能存在拓扑信息混乱。例如,正常应该有3个从节点,但获取到只有2个,就需要进一步排查。
- Sentinel 内部维护着主从节点的拓扑关系。可以使用
- 查看选举状态:
- Sentinel 通过选举来确定主节点故障时的新主节点。如果在没有明显主节点故障的情况下频繁发生选举(可通过查看日志中的
+election
相关记录),可能是拓扑信息混乱导致 Sentinel 误判主节点状态,进而触发选举。
- Sentinel 通过选举来确定主节点故障时的新主节点。如果在没有明显主节点故障的情况下频繁发生选举(可通过查看日志中的
恢复正确拓扑信息的方案和操作步骤
- 确认网络问题解决:
- 首先排查网络分区等底层网络问题,确保各个 Redis 节点之间网络连通正常。可以使用
ping
命令检查节点之间的网络可达性,使用traceroute
命令查看网络路由路径是否存在异常。如果发现网络设备(如路由器、交换机)配置错误或网络线路故障,及时进行修复。
- 首先排查网络分区等底层网络问题,确保各个 Redis 节点之间网络连通正常。可以使用
- 手动重置 Sentinel:
- 对于每个 Sentinel 节点,使用
SENTINEL RESET <pattern>
命令,这里<pattern>
可以使用*
表示重置所有被监控的主节点。例如,在 Redis 客户端连接到 Sentinel 节点后执行:
redis - cli - p <sentinel - port> SENTINEL RESET *
- 该命令会清除 Sentinel 对主从节点的当前认知,重新开始监控和发现节点。Sentinel 会重新发现主从节点,并重新建立拓扑关系。
- 对于每个 Sentinel 节点,使用
- 等待 Sentinel 重新发现拓扑:
- 执行
SENTINEL RESET
命令后,Sentinel 会按照配置的规则重新发现主从节点。Sentinel 配置文件(如sentinel.conf
)中的sentinel monitor <master - name> <ip> <port> <quorum>
等配置决定了它如何发现和监控主节点,进而发现其从节点。 - 等待一段时间(通常根据网络状况和节点数量,可能需要几分钟),期间可以通过
SENTINEL GET - MASTERS
和SENTINEL get - slaves <master - name>
命令持续查看拓扑结构的恢复情况。当看到从节点数量和状态恢复正常,且拓扑结构符合预期时,说明恢复成功。
- 执行
- 配置持久化和重启:
- 为了保证恢复后的拓扑信息在 Sentinel 重启后依然有效,确保 Sentinel 配置文件(
sentinel.conf
)中的配置正确且已持久化。如果在恢复过程中对配置进行了修改,要确保这些修改保存到配置文件中。 - 重启所有 Sentinel 节点,验证重启后拓扑信息依然正确。可以在重启后再次使用
SENTINEL GET - MASTERS
和SENTINEL get - slaves <master - name>
命令检查拓扑结构。
- 为了保证恢复后的拓扑信息在 Sentinel 重启后依然有效,确保 Sentinel 配置文件(