MST
星途 面试题库

面试题:Redis复制中如何处理网络分区对高可用性的影响

在Redis复制架构下,如果出现网络分区,可能会导致主从节点失联,简述Redis通常采用哪些机制来应对这种情况,以维持高可用性。
43.3万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

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