743 字
4 分钟
Redis 主从复制的完整流程是什么?
Redis 主从复制让副本跟随主节点的数据,常用于读扩展与故障转移准备。默认复制是异步的:主节点通常不等待每个副本完成复制就回应客户端,因此它不是强一致性协议,也不是磁盘备份的替代品。
首次同步怎样发生?
副本通过 REPLICAOF 指定主节点,连接后进行认证、能力协商等步骤,再使用 PSYNC 请求同步。首次复制或无法续传时,需要全量同步:
- 主节点为数据集生成一个 RDB 快照,通常由后台进程完成。
- 快照生成和传输期间,主节点仍可接收写入,把这段时间的增量修改保留下来。
- 副本接收并加载快照,建立快照时刻的数据基础。
- 副本接着应用期间的增量命令流,追上主节点,之后持续接收新修改。
RDB 可以通过磁盘文件发送,也可以采用无盘复制直接向副本发送快照。不能一概说复制必须先生成一个落在主节点磁盘上的 RDB 文件。全量复制仍可能带来 fork、网络传输和副本加载的资源压力,应避免故障期间所有副本同时触发大规模同步。
平时如何保持同步?
主节点将更新数据的操作按复制流发送给副本,副本按顺序应用,并报告复制进度。副本短暂断线后,若复制历史仍可用,可以部分重同步;否则回到全量复制。
副本一般配置为只读,减少与复制内容冲突。直接允许副本写入不会自动把修改反向合并到主节点,本地写入还可能在后续同步中丢失,所以不要把主从复制理解成多主写入。
常见追问
主节点关闭 RDB 持久化,还能复制吗?
可以。复制为了同步会使用快照机制,并不要求日常开启 RDB 持久化策略。不过无持久化主节点重启为空后把空数据同步出去存在风险,需要设计启动和故障转移流程。
从副本读取一定最新吗?
不是。复制延迟可能让刚写入的数据暂时读不到。需要读己之写时可读主节点,或设计可验证的复制进度等待机制。
Sentinel 负责复制数据吗?
不负责。数据复制由 Redis 主从节点完成;Sentinel 负责监控、故障判断和切主,它也不会把异步复制变成同步提交。
大实例新增副本为什么可能造成抖动?
全量同步涉及快照、复制缓冲、网络带宽和副本加载。应结合内存余量、复制积压缓冲与同步窗口规划,不能只看平时的 GET 延迟。
Redis 主从复制的完整流程是什么?
https://blog.xqcherry.top/posts/interview/redis/redis-master-replica-synchronization/ 目录