redis主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。

主从复制的作用主要包括:

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  • 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

主从库之间采用的是读写分离的方式。

  • 读操作:主库、从库都可以接收;
  • 写操作:首先到主库执行,然后,主库将写操作同步给从库。

注意:在2.8版本之前只有全量复制,而2.8版本后有全量和增量复制:

全量复制

当我们启动多个 Redis 实例的时候,它们相互之间就可以通过 replicaof(Redis 5.0 之前使用 slaveof)命令形成主库和从库的关系,之后会按照三个阶段完成数据的第一次同步。

第一阶段是主从库间建立连接、协商同步的过程。

主要是为全量复制做准备。在这一步,从库和主库建立起连接,并告诉主库即将进行同步,主库确认回复后,主从库间就可以开始同步了。

从库给主库发送 psync 命令,表示要进行数据同步,主库根据这个命令的参数来启动复制

主库收到 psync 命令后,会用 FULLRESYNC 响应命令带上两个参数:主库 runID 和主库目前的复制进度 offset,返回给从库。

FULLRESYNC 响应表示第一次复制采用的全量复制。

第二阶段,主库将所有数据同步给从库

从库收到数据后,在本地完成数据加载。这个过程依赖于内存快照生成的 RDB 文件。

第三个阶段,主库会把第二阶段执行过程中新收到的写命令,再发送给从库

为了保证主从库的数据一致性,主库会在内存中用专门的 replication buffer,记录 RDB 文件生成后收到的所有写操作。

主库在从库复制的同时不会停止服务,这个时候产生的新的数据,导致主从数据不一致,主库会维护repliaction------buff缓冲区,把这段时间产生的新数据,再次发给从库,完成数据的一致性。

增量复制

在 Redis 2.8 版本引入了增量复制。

如果主从库在命令传播时出现了网络闪断,那么从库就会和主库重新进行一次全量复制,开销非常大。从 Redis 2.8 开始,网络断了之后,主从库会采用增量复制的方式继续同步。

replication buffer‌:为每个从节点分配独立缓冲区,存储全量同步期间的增量写命令。

repl_backlog_buffer‌:全局共享的环形缓冲区,存储所有从节点共用的增量命令,用于断网恢复后的增量同步‌。

相关推荐
消失的旧时光-19436 小时前
第十四课 · 实战篇:Redis 缓存系统落地指南(Spring Boot 从 0 到可用)
spring boot·redis·缓存
·云扬·7 小时前
MySQL Redo Log落盘机制深度解析
数据库·mysql
用户982863025687 小时前
pg内核实现细节
数据库
飞升不如收破烂~7 小时前
Redis 分布式锁+接口幂等性使用+当下流行的限流方案「落地实操」+用户连续点击两下按钮的解决方案自用总结
数据库·redis·分布式
森焱森7 小时前
详解 Spring Boot、Flask、Nginx、Redis、MySQL 的关系与协作
spring boot·redis·python·nginx·flask
workflower7 小时前
业务需求-假设场景
java·数据库·测试用例·集成测试·需求分析·模块测试·软件需求
池央7 小时前
CANN Catlass 算子模板库深度解析:GEMM 核心优化、模板元编程与片上缓存策略的协同
缓存
亓才孓7 小时前
[JDBC]基于三层架构和MVC架构的JDBCTools
数据库
茶杯梦轩7 小时前
从零起步学习Redis || 第七章:Redis持久化方案的实现及底层原理解析(RDB快照与AOF日志)
redis·后端
IT邦德8 小时前
RPM包快速安装Oracle26ai
数据库·oracle