Redis主从复制详解(图文全面总结)

Redis是大型架构核心,下面我详解Redis主从复制@mikechen

Redis主从复制

主从复制(Replication), 是 Redis 实现高可用、和读写分离的核心机制。

它允许一个主节点(Master)将数据实时同步给一个或多个从节点(Slave),确保数据的一致性与冗余性。

Redis主从复制详解(图文全面总结)

通俗地说:

主节点负责“写”,从节点负责“读”,主节点的数据变化会自动同步给从节点。

 

Redis主从复制原理

Redis主从之间的复制分为两部分:全量复制和增量复制。

1.Redis全量复制过程

全量复制是主从复制的起点,用于首次建立主从关系或无法进行增量续传的情况。

流程如下:

Redis主从复制详解(图文全面总结)

1)从节点发起同步请求

从节点执行:

replicaof <master_ip> <master_port>

并向主节点发送 PSYNC ? -1 命令,请求全量复制。

2)主节点生成 RDB 快照

主节点执行 BGSAVE,在后台创建 RDB 快照文件,表示当前的完整数据状态。
在生成 RDB 的同时,主节点会将新写入命令暂存到 复制缓冲区。

3)传输 RDB 文件

RDB 文件生成后,主节点通过网络传给从节点;
从节点接收文件、清空旧数据,并加载新的 RDB 数据。

4)发送命令缓冲区数据

RDB 加载完成后,主节点将复制缓冲区中积累的写命令发送给从节点执行,以补齐 RDB 生成过程中的数据差异。

5)进入实时同步阶段

从节点完成全量复制后,主节点会持续将后续写命令实时发送给从节点,保持同步状态。

 

2.Redis增量复制过程

增量复制用于网络短暂中断后快速恢复同步,避免重新执行耗时的全量复制。

流程如下:

Redis主从复制详解(图文全面总结)

(1)断线重连

当从节点与主节点连接中断后重新连接,会发送:

PSYNC <runid> <offset>

其中:

runid:主节点的唯一运行 ID;

offset:从节点上次同步的复制偏移量。

(2)主节点判断是否可续传

主节点维护一个 replication backlog buffer(复制缓冲区),保存最近一段时间的写命令。

如果 backlog 中仍保留从节点上次的 offset 之后的数据:

主节点返回 +CONTINUE

从该偏移量开始发送命令,实现增量同步。

否则(缓冲区已被覆盖或 runid 不匹配):

主节点返回 +FULLRESYNC

回退执行全量复制。

(3)命令流追平

主节点将 backlog 中的命令发送给从节点,从节点执行后数据追平。
此后继续保持实时同步状态。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧