Redis-主从复制

leard 发布于 2025-06-09 3 次阅读


是什么?

从一个Redis实例(主节点)将数据复制到其他Redis实例(从节点),从节点数据与主节点数据保存同步。

复制的流程

  1. 从节点向主节点发起同步命令 psync ? -1
  2. 全量复制,主节点会将数据快照RDB文件发给从节点
    • 主节点收到命令后,发现runId没有值,判断是全量复制,返回full sync,并带上主服务器的runId和当前复制进度,从服务器会存储这两个值
    • 主节点执行bgsave,生成RDB文件,生成过程中新操作会存储到replication buffer中,生成完毕发送给从节点,从节点清空数据,加载RDB数据
    • 从节点将RDB文件加载完后,主节点将replication buffer缓存的数据发送给从节点,从节点执行命令
  3. 全量复制完,会保持一个长连接,主节点会将这个连接后续的写操作传递给从节点,用来保证数据一致

增量同步

由于网络可能不稳定,主节点有部分操作没有发送给从节点,如果再来一次全量同步会非常耗时,主节点其实只需要把断开连接期间的数据同步给从节点。

repl_backlog_buffer 是一个环形缓冲区,默认1m。增量同步也是psync命令,主节点会将命令存储存储到这个缓冲区中,然后根据从节点的runId判断,如果runId一致,并且根据offset判断数据在repl_backlog_buffer 中,则可以进行增量同步。repl_backlog_buffer 将对应的命令写到replication buffer中发给从节点去执行。