03 主从复制
主从复制
副本通过复制 ID 与 offset 尝试续传;缺失历史不在 backlog 中时,转为全量同步。
版本:Redis Open Source 8.10.3;核实日期:2026-11-12。官方在线文档可能继续更新,源码链接固定到对应发布标签。图为原理抽象,省略非本页重点。
specification {
element actor { style { shape person; color amber } }
element system { style { color muted } }
element component { style { color primary } }
element storage { style { shape storage; color green } }
}
model {
r = system '副本'
m = system '主节点'
back = storage '复制 backlog'
snap = storage 'RDB 快照'
}
views {
dynamic view index {
title '核心链路'
variant sequence
r -> m 'PSYNC 携带复制 ID 与 offset'
m -> back '检查历史是否仍可续传'
alt {
when '复制 ID 与 backlog 范围允许续传' {
m -> r 'CONTINUE 并发送缺口'
}
else '需要全量同步' {
m -> snap '准备全量快照'
snap -> r '传输并加载快照'
}
}
m -> r '持续发送快照之后的写命令流'
r -> m 'REPLCONF ACK 回报已处理 offset'
}
}
关键判断
- 图中按复制 ID 与 backlog 范围选择续传或全量分支;全量时主节点还需保留快照之后的变化。
- 复制默认异步,主节点回复客户端时副本可能尚未跟上;offset 表示复制流位置,不是业务事务号。
- WAIT 可等待指定数量副本确认,但不能单独把系统变成强一致或保证故障转移绝不丢已确认写。
边界
只画单层主从,不展开 Sentinel 选主、Cluster 故障转移及级联副本;断线本身不一定导致全量复制。