Redis 主从复制的原理及演化

本文详细介绍了Redis主从复制的原理,包括全量数据同步和命令传播,以及2.8版后引入的部分重同步来解决网络闪断问题。Redis 4.0的同源增量复制解决了主从切换后的全量同步问题。6.0版引入无盘全量同步提升性能,而7.0版的共享主从复制缓冲区则降低了内存开销。此外,文章讨论了forkless全量同步策略以减少主线程阻塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是主从复制

在数据库语境下,复制( replication)就是将数据从一个数据库复制到另一个数据库中。主从复制,是将数据库分为主节点和从节点,主节点源源不断地将数据复制给从节点,保证主从节点中存有相同的数据。有了主从复制,数据可以有多份副本,这带来了多种好处:

第—,提升数据库系统的请求处理能力。单个节点能够支撑的读流量有限,部多个节点,并构成主从关系,用主从复制保持主从节点数据一致,如此主从节点一起提供服务。

第二,提升整个系统的可用性。因为从节点中有主节点数据的副本,当主节点宕机后,可以立刻提升其中一个从节点为主节点,继续提供服务

二、Redis 主从复制原理

主从复制,直观的做法是主节点产生一份数据的快照发送给从节点,以快照数据为基准,将之后增量的数据变更同步给从节点,如此就能保证主从数据的一致。总体来看,主从复制一般包含全量数据同步、增量同步两个阶段。


在 Redis的主从复制实现中,包含两个类似阶段:全量数据同步和命令传播。


全量数据同步:主节点产生一份全量数据的快照,即RDB文件,并将此快照发送给从节点。且从产生快照时刻起,记录新接收到的写命令。当快照发送完成后,将累积的写命令发送绐从节点,从节点执行这些写命令。此时基准已经建立完成。


·命令传播:全量数据同步完成后,主节点将执行过的写命令源源不断地发送给从节点,从节点执行这些命令,保证主从节点中数据有相同的变更,如此保证主从节点数据的一致。


下图中给出了主从复制的整个过程:

1、主从关系建立后,从节点向主节点发送一个 SYNC 命令请求进行主从同步。

2、主节点收到 SYNC 命令后,执行 fork 创建一个子进程,子进程将所有的数据编码存储到 RDB(Redis Database) 文件中,这就产生了数据库的快照。

3、主节点将此快照发送给从节点,从节点接收快照并载入。

4、主节点接着将生成快照、发送快照期间积压的命令发送给从节点。

5、此后,主节点源源不断地新执行的写命令同步到从节点,从节点执行传播来的命令,命令执行后,从库中的数据也就得到了更新。如此,主从数据保持一致。需要说明的是,命令传播存在时延的,所以任意时刻,不能保证主从节点间数据完全一致。

以上就是 Redis 主从复制的基本原理,很简单很容易理解,但存在一些不美好的地方:

fork 耗时过长࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值