面试题答案
一键面试- 心跳检测机制:
- 主节点和从节点之间会定期发送PING和PONG消息进行心跳检测。主节点默认每秒向从节点发送PING命令,从节点收到PING命令后,回复PONG消息。通过这种方式,主从节点可以及时感知对方是否在线。如果主节点长时间(可配置)没有收到某个从节点的PONG回复,就会认为该从节点失联。
- 自动重连机制:
- 当从节点因为网络分区等原因与主节点失联后,从节点会不断尝试重新连接主节点。它会根据配置的重连策略,在一定时间间隔后发起重连操作,直到成功连接上主节点。
- 部分重同步机制:
- 当网络分区恢复,从节点重新连接主节点后,Redis支持部分重同步。主节点会记录最近一段时间内执行的写命令操作(在复制积压缓冲区中)。从节点重连后,会向主节点发送PSYNC命令,包含自己的复制偏移量等信息。主节点判断从节点的偏移量在复制积压缓冲区范围内,就可以只将从节点缺少的那部分写命令同步给从节点,而不是全量重新同步,大大减少了数据传输量和同步时间,提高了恢复效率。
- 哨兵(Sentinel)机制:
- 监控:哨兵节点会定期监控主节点和从节点的运行状态,通过向主从节点发送PING命令来判断其健康状况。如果主节点在一定时间内没有响应PING命令,哨兵节点会标记主节点为疑似下线(PFAIL)。
- 主观下线和客观下线:单个哨兵节点标记主节点为疑似下线后,会询问其他哨兵节点。如果达到一定数量(可配置)的哨兵节点都认为主节点疑似下线,就会将主节点标记为客观下线(FAIL)。
- 故障转移:当主节点被标记为客观下线后,哨兵节点会进行协商,选举出一个领头哨兵节点,由领头哨兵节点负责在从节点中选举一个新的主节点。然后,将其他从节点重新配置为新主节点的从节点,从而恢复Redis集群的正常工作,保证高可用性。
- 集群模式(Cluster)下的处理:
- 节点握手和故障发现:在Redis Cluster中,节点之间通过Gossip协议进行信息交换。每个节点每秒会随机选择几个节点发送PING消息,并接收其他节点的PONG消息。通过这种方式,节点可以了解集群中其他节点的状态。如果某个节点在一定时间内没有收到来自另一个节点的PONG消息,就会标记该节点为疑似下线。然后通过Gossip协议,向其他节点传播这个疑似下线信息。当大多数节点都认为该节点疑似下线时,就会将其标记为客观下线。
- 故障转移:对于主节点的故障,集群会从该主节点的从节点中选举一个来替代它成为新的主节点。选举过程类似哨兵机制,通过投票等方式进行。新的主节点选举出来后,集群会自动调整内部的配置,将其他相关节点与新主节点进行重新关联,以保证集群的高可用性和数据的正常读写。