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进度

主从复制总结

相关推荐
小马爱打代码6 分钟前
Spring源码中的设计模式实战:从理论到源码的深度解析
java·spring·设计模式
老码观察8 分钟前
数环通iPaaS架构设计的结构化与模块化方法论——从高内聚低耦合到工程落地的完整指南
java·服务器·网络
Devin~Y19 分钟前
智慧物流+AIGC客服Java大厂面试:Spring Boot、Kafka、Redis、JVM与RAG Agent实战
java·jvm·spring boot·redis·spring cloud·kafka·rag
todoitbo19 分钟前
一台 2C2G 服务器上的 KingbaseES 安装记录
运维·服务器·数据库·国产数据库
Demon1_Coder22 分钟前
智能体的自定义工具
java·linux·前端
mN9B2uk1722 分钟前
SQL Server 数据库设计
数据库·oracle
Elastic 中国社区官方博客24 分钟前
使用 Jina CLIP v2 和 Elasticsearch 实现多语言图片搜索
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·jina
原创小甜甜28 分钟前
OOM 排查复盘:Hutool 序列化 Request 导致 Java Heap Space
java·开发语言·python
列星随旋28 分钟前
矩阵快速幂
java·算法·矩阵
闪电悠米29 分钟前
黑马点评-分布式锁-02_simple_redis_lock_setnx
java·数据库·spring boot·redis·分布式·缓存·wpf