Redis 集群之间是如何复制的?

Redis集群通过主从复制机制实现数据同步,核心包括全量同步和增量同步两种模式,采用异步复制方式保证最终一致性。

一、主从复制的基本架构

Redis集群采用一主多从的架构,每个主节点(Master)可以拥有多个从节点(Slave)。主节点负责处理写操作,从节点通过复制机制同步主节点数据,实现数据备份和读写分离。从节点默认只读,通过配置replicaof命令与主节点建立复制关系。

二、数据同步的核心机制

1. 全量同步(Full Sync)

触发条件

  • 从节点首次连接主节点
  • 主节点Run ID发生变化(如主节点重启)
  • 从节点复制偏移量不在主节点缓冲区范围内

同步流程

  1. 建立连接:从节点发送PSYNC ? -1命令请求全量同步
  2. 生成RDB快照:主节点执行BGSAVE命令,fork子进程生成RDB文件
  3. 传输RDB文件:主节点将RDB文件发送给从节点
  4. 加载数据:从节点清空旧数据,加载RDB文件到内存
  5. 增量补发:主节点将生成RDB期间的新写命令从复制缓冲区发送给从节点
  6. 进入增量同步:完成全量同步后,进入实时命令传播阶段

2. 增量同步(Partial Sync)

触发条件:从节点短暂断开后重连,且复制偏移量仍在主节点的复制积压缓冲区范围内。

同步流程

  1. 从节点发送PSYNC <runid> <offset>命令,携带主节点Run ID和自身复制偏移量
  2. 主节点验证Run ID和偏移量
  3. 若验证通过,主节点从复制积压缓冲区中发送缺失的写命令
  4. 从节点执行增量命令,更新数据

三、关键组件说明

1. 复制偏移量(Replication Offset)

主从节点各自维护一个复制偏移量,记录已处理的字节数。通过对比偏移量可以判断数据是否一致。

2. 复制积压缓冲区(Repl Backlog Buffer)

主节点维护的环形缓冲区,默认1MB,存储最近一段时间内的写命令。用于支持增量同步,避免短暂断连后触发全量复制。

3. 运行ID(Run ID)

每个Redis节点启动时生成的唯一标识。从节点首次连接主节点时会记录主节点的Run ID,用于判断主节点是否重启。

四、异步复制特性

Redis采用异步复制机制,主节点接收到写命令后立即执行并返回响应,然后异步将命令发送给从节点。这种设计保证了高写入性能,但存在短暂的数据不一致窗口期,属于最终一致性模型。

五、故障转移机制

当主节点故障时,集群会自动进行故障转移:

  1. 故障检测:通过心跳检测发现主节点不可用
  2. 故障确认:多数主节点确认后标记为FAIL状态
  3. 选举新主:从节点发起选举,复制偏移量最大的从节点优先成为新主
  4. 数据同步:其他从节点重新指向新主节点进行数据同步

六、配置建议

  • repl-backlog-size:建议设置为2 × 断连平均时间(秒) × 每秒写命令数据量(MB),避免缓冲区覆盖导致全量复制
  • cluster-node-timeout:建议15-60秒,平衡故障检测速度与网络抖动容错
  • 部署建议:生产环境至少部署3主3从,确保每个分片有冗余副本

Redis集群的复制机制通过全量同步和增量同步的结合,在保证数据一致性的同时,最大程度减少了网络开销和同步延迟,为分布式环境提供了高可用和高性能的数据存储方案。


作 者:南烛
链 接:https://www.itnotes.top/archives/1310
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇