MST

星途 面试题库

面试题:Redis旧版复制功能在集群中应用时的主从数据同步机制

请阐述Redis旧版复制功能在集群应用场景下,主节点与从节点之间是如何进行数据同步的?详细说明同步过程中的关键步骤和消息交互。
19.1万 热度难度
数据库Redis

知识考点

AI 面试

面试题答案

一键面试

旧版复制功能主从数据同步过程

  1. 同步初始化
    • 从节点通过 SLAVEOF 命令(或者在配置文件中设置 slaveof 相关配置)指定主节点的地址和端口,发起复制请求。
    • 主节点收到请求后,为从节点创建相应的数据结构,准备进行数据同步。
  2. 全量同步
    • 步骤一:发送 SYNC 命令:从节点向主节点发送 SYNC 命令,请求进行全量同步。
    • 步骤二:生成 RDB 文件:主节点收到 SYNC 命令后,执行 BGSAVE 命令,在后台生成一个 RDB 文件,这个文件包含了主节点当前的所有数据。
    • 步骤三:发送 RDB 文件和缓冲区数据:主节点将生成的 RDB 文件发送给从节点,同时在生成 RDB 文件期间,主节点会将新收到的写命令缓存到缓冲区。当 RDB 文件发送完毕后,主节点接着将缓冲区中的写命令发送给从节点。
    • 步骤四:加载 RDB 文件和执行写命令:从节点收到 RDB 文件后,会先清空自身的数据,然后加载 RDB 文件,将数据恢复到主节点执行 BGSAVE 时的状态。接着从节点执行主节点发送过来的缓冲区中的写命令,使自身数据状态与主节点保持一致。
  3. 部分同步(若支持)
    • 步骤一:断线重连:如果在同步过程中或同步完成后,从节点与主节点之间的连接断开,从节点重新连接主节点时,会尝试进行部分同步。
    • 步骤二:发送 PSYNC 命令:从节点向主节点发送 PSYNC 命令(Redis 2.8 之前使用 SYNC 命令,2.8 之后使用 PSYNC 命令进行部分同步尝试),携带从节点的复制偏移量(记录从节点已经复制的数据量)和主节点的 run ID(标识主节点的唯一 ID)。
    • 步骤三:判断是否可以部分同步:主节点收到 PSYNC 命令后,根据从节点发送的 run ID 和复制偏移量判断是否可以进行部分同步。如果主节点保存的 run ID 与从节点发送的一致,且偏移量在主节点的复制积压缓冲区(一个环形缓冲区,记录主节点最近发送的写命令)范围内,则主节点向从节点发送 CONTINUE 消息,告知从节点可以进行部分同步。
    • 步骤四:部分同步数据:主节点将复制积压缓冲区中从节点缺少的数据发送给从节点,从节点接收并执行这些数据,完成部分同步。如果主节点判断不能进行部分同步(如 run ID 不一致或偏移量超出范围),则主节点会向从节点发送 FULLRESYNC 消息,要求从节点进行全量同步,流程又回到全量同步的步骤。

消息交互

  1. 从节点 -> 主节点
    • SLAVEOF 命令:用于指定主节点,开启复制过程。
    • SYNC 命令(旧版全量同步)或 PSYNC 命令(部分同步尝试):请求数据同步。
  2. 主节点 -> 从节点
    • RDB 文件数据:全量同步时发送。
    • 缓冲区写命令数据:全量同步时,RDB 文件发送完毕后发送。
    • CONTINUE 消息:告知从节点可以进行部分同步。
    • FULLRESYNC 消息:告知从节点需要进行全量同步。