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 小时前
全球化深水区,数据治理成为企业出海 “核心竞争力”
大数据·数据库·人工智能·数据治理·数据中台·全球化
X56617 小时前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务与子服务)
jvm·数据库·python
FQNmxDG4S7 小时前
Java多线程编程:Thread与Runnable的并发控制
java·开发语言
虹科网络安全8 小时前
艾体宝干货|数据复制详解:类型、原理与适用场景
java·开发语言·数据库
2301_771717218 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
axng pmje8 小时前
Java语法进阶
java·开发语言·jvm
rKWP8gKv79 小时前
Java微服务性能监控:Prometheus与Grafana集成方案
java·微服务·prometheus
老前端的功夫9 小时前
【Java从入门到入土】28:Stream API:告别for循环的新时代
java·开发语言·python
qq_435287929 小时前
第9章 夸父逐日与后羿射日:死循环与进程终止?十个太阳同时值班的并行冲突
java·开发语言·git·死循环·进程终止·并行冲突·夸父逐日
小江的记录本9 小时前
【Kafka核心】架构模型:Producer、Broker、Consumer、Consumer Group、Topic、Partition、Replica
java·数据库·分布式·后端·搜索引擎·架构·kafka