MST

星途 面试题库

面试题:Redis新版复制功能架构设计如何应对复杂网络环境和故障恢复

当处于网络分区、节点故障等复杂网络环境时,Redis新版复制功能架构设计是怎样确保数据一致性和快速恢复的?请详细分析其故障检测、故障转移以及重新同步等机制的设计原理与流程。
33.9万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

故障检测机制

  1. 心跳检测
    • 主从节点之间会定期发送心跳消息(PING/PONG)。主节点默认每秒向从节点发送PING消息,从节点收到PING后回复PONG。
    • 通过这种方式,主从节点可以检测彼此的连接状态。如果主节点在一定时间(默认10秒,可通过repl-ping-slave-period配置)内没有收到从节点的PONG回复,就会判定从节点可能出现故障。
  2. 主观下线(Subjective Down,SDOWN)
    • 单个节点对另一个节点的状态判断。例如,哨兵节点(Sentinel)通过心跳检测,如果在一定时间内(可配置)没有收到被监控节点(主节点或从节点)的响应,该哨兵节点会将其标记为SDOWN状态。
  3. 客观下线(Objective Down,ODOWN)
    • 多个哨兵节点达成共识的故障判定。当多个哨兵节点(超过配置的quorum数量)都认为某个主节点处于SDOWN状态时,它们会通过互相通信达成共识,将该主节点标记为ODOWN状态,意味着主节点确实发生了故障。

故障转移机制

  1. 哨兵选举
    • 当主节点被判定为ODOWN后,哨兵之间会进行选举,选出一个领导者哨兵来执行故障转移操作。选举过程基于Raft算法的简化版本。
    • 每个哨兵节点都有选举权,它会向其他哨兵节点发送选举请求。收到请求的哨兵节点如果还没有投过票,且认为请求者具备一定条件(如运行时长等),就会投出一票。
    • 率先获得超过半数投票的哨兵节点成为领导者哨兵。
  2. 从节点晋升
    • 领导者哨兵从当前存活的从节点中选择一个作为新的主节点。选择规则主要基于从节点的优先级(通过slave - priority配置,值越小优先级越高)、复制偏移量(复制数据越完整优先级越高)以及运行ID(越小越优先)。
    • 领导者哨兵会向选中的从节点发送SLAVEOF NO ONE命令,使其晋升为新的主节点。
  3. 重新配置其他从节点
    • 领导者哨兵会向其他从节点发送SLAVEOF <new - master - ip> <new - master - port>命令,让它们成为新主节点的从节点,从而重新建立复制关系。

重新同步机制

  1. 全量同步
    • 当新的从节点连接到主节点,或者从节点长时间与主节点失去连接后重新连接,通常会进行全量同步。
    • 主节点收到从节点的同步请求后,会执行BGSAVE命令生成RDB文件,并将RDB文件发送给从节点。在发送RDB文件的同时,主节点会将这段时间内产生的写命令缓存起来。
    • 从节点收到RDB文件后,会先清空自身数据,然后加载RDB文件,完成数据初始化。接着,从节点接收主节点缓存的写命令并执行,从而达到与主节点数据一致。
  2. 部分同步
    • 当从节点与主节点之间的连接短暂中断后恢复时,可能会进行部分同步。
    • 主从节点之间通过复制偏移量(replication offset)和复制积压缓冲区(replication backlog)来实现部分同步。主节点会在复制积压缓冲区中记录最近一段时间内的写命令。
    • 从节点在重新连接时,会向主节点发送自己的复制偏移量。主节点检查复制积压缓冲区,如果从节点的偏移量在缓冲区范围内,主节点就只将缓冲区中从该偏移量之后的写命令发送给从节点,从而实现部分同步,减少数据传输量,快速恢复数据一致性。