1. Redis主从复制核心机制解析
Redis主从复制是分布式系统中常见的数据同步方案,其核心设计目标是实现数据的最终一致性。当我在生产环境首次配置主从复制时,发现其内部工作机制远比表面看到的replicaof命令复杂得多。主从复制过程可分为三个阶段:连接建立阶段、数据同步阶段和命令传播阶段。
在连接建立阶段,从节点会保存主节点的地址信息到masterhost和masterport字段。我曾在测试环境遇到过因网络策略导致连接失败的情况,后来通过redis-cli的info replication命令确认了连接状态。当从节点执行replicaof命令后,会建立与主节点的socket连接(默认端口6379),此时主节点会将该连接标识为从节点连接。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 全量同步与部分同步的抉择
全量同步(RDB同步)是主从复制中最关键的环节。当新的从节点加入集群或从节点与主节点差异过大时,主节点会执行bgsave生成RDB快照。这里有个重要细节:主节点在生成RDB文件期间,会将新写入命令缓存到复制缓冲区(replication buffer)。我曾配置过16MB的缓冲区,但在写入量大的场景下仍然出现了溢出,导致不得不重新全量同步。
部分同步(PSYNC)则依赖三个核心要素:
- 复制偏移量(offset):主从节点各自维护的写入字节计数器
- 复制积压缓冲区(backlog):主节点维护的固定大小环形队列
- 服务器运行ID(run_id):用于识别主节点身份
当网络闪断后重连时,从节点会发送PSYNC <runid> <offset>命令。如果主节点的backlog中仍存有该offset之后的数据,则只发送差异部分。在我的运维记录中,合理设置repl-backlog-size(建议为平均网络流量×断线最大时长×2)可以减少90%的全量同步。
3. 命令传播阶段的优化实践
当完成初始同步后,主节点会将每个写命令发送给从节点。这里有几个值得注意的实现细节:
- 主节点发送的是Redis协议格式的原始命令,而非处理后的数据
- 从节点接收命令后会先存入缓冲区,再顺序执行
- 默认采用异步复制,主节点不等待从节点响应
在电商秒杀场景中,我们曾遇到主从延迟过高的问题。通过以下优化显著改善了性能:
- 调整`
