Redis 主从复制

当我们服务器只有一台时,可能会出现单点问题,当这台服务器挂了,或者需求量超出主机所支持,那么我们的服务就会受到大的影响

为了解决问题 我们引入了分布式系统

在分布式系统中,在多服务器上部署Redis,存在以下几种方式

1.主从模式

2.主从+哨兵模式

3.集群模式

主从模式

我们将服务器区分为 主节点和从节点。

当主节点中存在的数据时,我们引入从节点,就会使主节点将数据拷贝到从节点中,后续主节点的数据修改,会及时同步拷贝到从节点中

当我们修改从节点的数据时 会不会主节点会改变?

不会,从节点顾名思义是主节点的小弟,Redis规定了从节点数据不允许直接修改,从节点只具有读取数据的能力

当引入这样的 模式后,主节点和从节点中的数据本身是一样的,所以访问主节点和从节点读取数据都是可以的,这样 引入了更多的 计算资源那么 所能支撑的并发量就大大提升了。

但其实我们不难发现 这样主从模式存在弊端,由于一山不容二虎,主节点不能创建多个,因此呢当主节点挂了,我们是无法进行写操作的,所以主从模式 更多的是针对于读操作的可用性提升,而对于写操作仍会受到限制

主从复制拓扑结构

1.一主一从结构

这种结构下只有主节点可以进行写操作,如果写请求 过多,就会给主节点带来压力

可以通过关闭主节点的AOF,只在从节点上开启AOF

但是这种设定有一个严重的缺陷 ,当 主节点挂掉之后,不能让它自动重启,(如果让它自动重启,此时没有 AOF文件,就会丢失数据,进一步的主从复制,就会把从节点上的数据也给删了)

改进方法,就是当主节点挂了之后,需要让主节点从从节点中获取到AOF的文件,在启动~

实际开发 中 读操作多于写操作

如上图所示 主节点连接四个从节点,但当主节点数据进行修改时**,随着从节点数的增加,数据从主节点同步到从节点就会 给主节点的 带宽造成压力**

2.树形结构

这样的结构呢 就会使主节点数据更新时,数据同步给从节点的网卡带宽就会减轻

但是 它的缺点就是数据同步的延迟要比上面的高

所以我们在 选取时要根据实际情况做出取舍

主从复制的基本流程

补充一下上图

offset (偏移量 )

主节点和从节点都会维护offset

主节点 会收到数据修改命令 命令转化为 字节数,offset就会累加这些 字节

从节点 offset表示 对主节点数据的同步量

当offset相同时表名 从节点已同步完 主节点数据修改

replication id 和 offset 共同描述了一个"数据集合 "

如果发现两个机器 两者一样,就可以认为两个Redis 机器上存储的数据 是完全一样的

全量复制/增量复制

全量复制的流程

全量复制的无硬盘模式

主节点生成的rdb的二进制数据 ,不是直接 保存到文件中,而是直接进行网络传输(省下一系列读硬盘和 写硬盘的操作

从节点 也可以忽略这个过程,直接把收到的数据 进行加载了

即使引入无硬盘模式 仍然整个操作是 比较耗时的 网络传输是 没法省 的相比于网络传输 来说,读写硬盘是小事

所以无硬盘模式能提升效率但效果不大

runid 与replid id

部分复制的流程

replid id 作为"数据来源"依据来看是否从节点是隶属于主节点的 如果 是 那么就可 进行部分复制,否则就进行全量复制

offset 代表数据复制进度

实时复制

当主节点与从节点数据同步好之后,主节点仍会源源不断 收到请求,此时 主节点就会与从节点建立长长的TCP连接

主节点将收到的 请求 同步给从节点 从而进行实时数据的修改

在保持主次 节点的连接中引入了一个机制 心跳包 机制

主节点 每隔一段时间(10s)就会向从节点发送一段ping命令,从节点接受到就会回复一个pong

从节点 每时每刻(1s)向主节点发送一个请求,汇报offset进度

主从复制总结

相关推荐
小猿姐16 分钟前
实测对比:哪款开源 Kubernetes MySQL Operator 最值得用?(2026 深度评测)
数据库·mysql·云原生
一灯架构2 小时前
90%的人答错!一文带你彻底搞懂ArrayList
java·后端
倔强的石头_2 小时前
从 “存得下” 到 “算得快”:工业物联网需要新一代时序数据平台
数据库
Y4090013 小时前
【多线程】线程安全(1)
java·开发语言·jvm
TDengine (老段)3 小时前
TDengine IDMP 可视化 —— 分享
大数据·数据库·人工智能·时序数据库·tdengine·涛思数据·时序数据
布局呆星3 小时前
SpringBoot 基础入门
java·spring boot·spring
风吹迎面入袖凉4 小时前
【Redis】Redisson的可重入锁原理
java·redis
GottdesKrieges4 小时前
OceanBase数据库备份配置
数据库·oceanbase
w6100104664 小时前
cka-2026-ConfigMap
java·linux·cka·configmap