redis主从复制
Redis 主从复制详解(基于 6.0.10 版本)
Redis 主从复制(Master-Slave Replication)是实现高可用和读写分离的核心机制,通过将主节点(Master)的数据同步到从节点(Slave),避免单点故障并分担读压力。本文详细解析主从复制的原理、配置方式、常见模式及哨兵(Sentinel)自动故障转移机制。
主从复制核心原理
主从复制通过 PSYNC 命令 实现数据同步,支持全量同步和部分同步两种模式,兼顾初次复制和断线重连场景。
PSYNC 命令的两种模式
- 全量同步(Full Resync):适用于初次复制(Slave 首次连接 Master)。
流程:- Slave 向 Master 发送
PSYNC ? -1(表示需要全量同步)。 - Master 生成 RDB 快照,发送给 Slave;同时缓存快照生成期间的写命令(复制积压缓冲区)。
- Slave 加载 RDB 快照,再执行缓存的写命令,最终与 Master 数据一致。
- Slave 向 Master 发送
- 部分同步(Partial Resync):适用于断线重连(Slave 短暂断开后重新连接)。
流程:- Slave 重连后,向 Master 发送
PSYNC <master_runid> <offset>(携带上次同步的 Master 标识和偏移量)。 - Master 验证master_runid(自身标识)和offset(同步偏移量):
- 若有效(偏移量在复制积压缓冲区内),仅发送偏移量后的增量写命令。
- 若无效(如 Master 重启或偏移量过期),触发全量同步。
- Slave 重连后,向 Master 发送
核心概念
master_runid:Master 的唯一标识(每次重启会变化),用于 Slave 验证连接的是否为同一 Master。- 复制偏移量(Offset):Master 和 Slave 分别维护的计数器,记录已同步的字节数(确保数据一致性)。
- 复制积压缓冲区:Master 端的环形缓冲区(默认 1MB),存储最近的写命令,用于部分同步。可通过
repl-backlog-size调整大小(如repl-backlog-size 10mb)。
主从复制配置
主从复制采用 “配从不配主” 原则:只需配置 Slave 指向 Master,Master 无需额外配置。