Redis 主从同步

75 阅读1分钟
  • Master:负责写操作,同时也能处理读请求。
  • Slave:从 Master 同步数据,默认只能读,保证数据副本的冗余和读能力扩展。

Redis 主从同步大致分为 全量同步 和 增量同步:

全量复制(初次复制或网络中断后的重连)

  1. Slave 连接 Master,发送 PSYNC(Redis 2.8 之后)或 SYNC 命令。

  2. Master 执行 RDB 快照,把快照文件通过网络传给 Slave。

  3. 在传输 RDB 的过程中,Master 会把新的写命令放到复制缓冲区。

  4. Slave 加载 RDB 文件后,再应用缓冲区中的命令,保证与 Master 一致。

增量复制

  • 如果 Slave 因网络抖动中断连接,它会带着 复制偏移量runId 向 Master 请求同步。

  • Master 根据 复制积压缓冲区(replication backlog) 中是否还保留着缺失的数据:

    • 如果数据在缓冲区中 → 直接发送缺失部分(增量复制)。

    • 如果不在 → 退化为全量复制。

  • 复制偏移量:主节点和从节点都会维护一个偏移量(offset),主节点每次传播 N 个字节的数据,偏移量就增加 N。从节点接收后,自己的偏移量也增加 N。通过对比偏移量,就能知道数据是否一致。
  • 服务器运行 ID(Run ID):每个 Redis 节点启动时都会生成一个唯一的 Run ID。