Redis全量复制的核心是通过RDB文件实现主从数据同步。主节点生成RDB快照,从节点接收并加载该快照,从而实现初始数据一致性。学习路径:1.理解RDB持久化机制;2.配置slaveof命令启动从节点;3.观察复制偏移量同步过程;4.处理全量复制后的增量日志psync。
全量复制流程详解
当从节点连接主节点时,如果发现数据不一致,主节点会执行BGSAVE命令后台生成RDB文件。同时,主节点将此期间的新命令追加到repl_backlog_buffer中。从节点接收RDB文件后,加载数据并从backlog拉取遗漏命令,实现无缝同步。全量复制适合大数据量初次同步场景。
配置Redis主从复制
在redis.conf中设置slaveof 127.0.0.1 6379,从节点自动发起全量复制。主节点无需额外配置。若需只读从节点,添加slave-read-only yes。重启后复制状态恢复,通过INFO replication查看repl_offset确保同步完成。
RDB在复制中的作用
全量复制依赖RDB快照传输,主节点fork子进程生成dump.rdb,从节点fsync接收文件并清空旧数据后加载。传输完成后,主节点发送repl_id和offset,从节点进入增量复制阶段。此机制保证了数据一致性,但大实例可能导致网络阻塞。
全量复制优化技巧
为减少全量复制时间,可预先生成RDB文件并分发到从节点目录,手动触发LOADING状态加载。监控repl_diskless_sync yes开启无盘复制,直接通过网络流传输快照,适合云环境。结合repl-backlog-size调整backlog缓冲区大小。
常见全量复制问题排查
如果全量复制卡住,检查主节点fork时间过长或网络带宽不足。日志中FULLRESYNC表示全量复制触发。解决方案:增加repl-timeout参数,分离读写流量,或使用哨兵模式动态切换主从。
从源码看全量复制
Redis源码中,replication.c处理复制逻辑。acceptTcpHandler接受从节点连接,replicationFeedSlavesToPendingQueue向从节点发送RDB。无盘复制通过aeCreateFileEvent监听传输事件。学习源码有助于深入理解数据同步奥秘。
Q: 全量复制什么时候触发?
A: 当从节点repl_id不匹配或offset落后太多时,主节点触发BGSAVE进行全量复制。
Q: 全量复制对性能影响大吗?
A: 是的,会消耗CPU fork和网络IO,建议在低峰期或使用无盘复制优化。
Q: 如何监控复制状态?
A: 使用INFO replication命令查看role、offset、lag等指标。
Q: 主从复制支持多少从节点?
A: 无硬限制,但过多从节点会增加主节点负担,建议分层复制架构。