- Master:负责写操作,同时也能处理读请求。
- Slave:从 Master 同步数据,默认只能读,保证数据副本的冗余和读能力扩展。
Redis 主从同步大致分为 全量同步 和 增量同步:
全量复制(初次复制或网络中断后的重连)
-
Slave 连接 Master,发送
PSYNC(Redis 2.8 之后)或SYNC命令。 -
Master 执行 RDB 快照,把快照文件通过网络传给 Slave。
-
在传输 RDB 的过程中,Master 会把新的写命令放到复制缓冲区。
-
Slave 加载 RDB 文件后,再应用缓冲区中的命令,保证与 Master 一致。
增量复制
-
如果 Slave 因网络抖动中断连接,它会带着 复制偏移量 和 runId 向 Master 请求同步。
-
Master 根据 复制积压缓冲区(replication backlog) 中是否还保留着缺失的数据:
-
如果数据在缓冲区中 → 直接发送缺失部分(增量复制)。
-
如果不在 → 退化为全量复制。
-
- 复制偏移量:主节点和从节点都会维护一个偏移量(offset),主节点每次传播 N 个字节的数据,偏移量就增加 N。从节点接收后,自己的偏移量也增加 N。通过对比偏移量,就能知道数据是否一致。
- 服务器运行 ID(Run ID):每个 Redis 节点启动时都会生成一个唯一的 Run ID。