IT袋

当前位置:主页 > 经验教程 > 建站编程 >

Redis主从复制原理和复制方式详解

Redis主从复制原理和复制方式详解(3)

时间:2023-12-28 07:23:21 来源:IT袋 作者:马勇
导读:Redis主从复制原理和复制方式详解,同步 slave会向master发送一个 psync 命令来进行数据同步,并且数据同步将分为全量同步和部分同步。 命令持续复制 在完成同步之后,master slave 会进入到命

Redis主从复制原理和复制方式详解

Redis主从复制原理和复制方式详解

同步

slave会向master发送一个 psync 命令来进行数据同步,并且数据同步将分为全量同步和部分同步。

命令持续复制

在完成同步之后,master — slave 会进入到命令传播阶段、这个阶段master将写命令发送给slave,slave接收并执行增量的命令同步实现主从一致。

画个图总结一下实现原理的流程吧:

Redis主从复制原理和复制方式详解

怎么判断slave是第一次进行主从复制呢?

Redis核心结构server的cached_master保存了master节点的信息,只有进行过主从复制才会赋值,否则为空。

复制方式

Redis复制的方式可分为全量复制和增量复制,不过在第一次全量复制之后,master和slave双方之间就会维护一个 TCP 长连接,后续master可以通过这个连接继续将新写操作命令同步给slave。

全量复制

全量复制意思是master当前全部数据进行复制同步到slave。

全量复制可分为三个阶段,我们先看下图有个整体印象,然后再看每个阶段都干了啥!

Redis主从复制原理和复制方式详解

阶段一 建立链接、协商同步

这部分流程我们在【实现原理】章节讲比较明白了,这个阶段建立连接,并告诉master需要进行同步,等确认后就可以为后续的全量复制做准备。

具体来说就是在 slave给master发送 psync 命令,表示要进行数据同步,master会根据这个命令的参数来启动复制!

psync ? -1,命令参数 ‘?’和 ‘-1’是什么意思?

这两个参数分别表示 master 的唯一表示 runID 和复制进度 offset ,因为是第一次复制,此时是不知道master的runID的,所以设置‘ ?’,而 -1 表示第一次复制。

注:每个 Redis 实例启动时都会自动生成的一个随机 ID,这个就是runID

master在收到 psync 命令之后会用 FULLRESYNC 响应命令带上两个参数:master 的runID 和的复制进度 offset,这个时候 salve 就可以记下这两个参数值了。

FULLRESYNC :意思是完全重新同步,就是会把当前master的所有数据复制同步给salve

阶段是二 master同步数据给从slave

master 收到 psync 命令后,会执行bgsave命令, fork 出一个子进程,子进程中将所有的数据按特定编码存储到 RDB(Redis Database) 文件中。

RDB生成完成之后就会把文件发送给salve,从库接收到RDB文件后,先清空当前数据库数据,然后才会加载RDB文件。

salve在加载RDB前清除数据的目的是什么?

salve 在执行replicaof 或 slaveof 命令开始复制前,可能保存了其他数据,清除是为了避免之前数据的影响

master在执行bgsave期间新写的命令并没有生成到RDB中,数据丢失了吗?

生成RDB的是fork出的子进程做的,此时主进程还是可以正常处理写入命令的,此时为了保证主从的数据一致性master 会用专门的 replication buffer来记录 RDB 文件生成、加载RDB文件期间收到的所有写操作。

阶段三 master发送新写操作命令给slave

master会把阶段二期间记录在 replication buffer 的写命令,发送给salve,通过这种方式来实现主从的同步一致性。

在什么情况下会进行全量同步呢?

  1. 1.slave连接上master第一次复制的时候
  2. 2.从节点发送 psync {runid} {offset} 时,runid 与当前主节点的 runid 不匹配则进行全量复制
  3. 3.从节点所需要同步数据的偏移量 offset 不在复制积压缓冲区中

命令传播

master在完成第一次同步后,就会基于长连接进行后续命令传播,master通过这个连接将写命令传播给slave,salve执行得到的写命令,从而保正主从数据的同步。

相关阅读

  • Redis面试宝典:热门面试问题及答案解析

    Redis面试宝典:热门面试问题及答案解析

    一篇IT技术小知识,为您介绍Redis面试宝典IT技巧方面的经验,下面为详细的介绍。 在许多软件工程面试中,Redis是一个常见的主题。 作为一种高性能的键值数据库,了解Redis的核心概念和使用

  • 什么是服务降级和熔断

    什么是服务降级和熔断

    为网友解答什么是服务降级和熔断的相关经验,接下来IT袋网小编就来介绍。 降级 降级是解决系统资源不足和海量业务请求之间的矛盾 在暴增的流量请求下,对一些非核心流程业务、非关键业

  • 深圳建设网站公司有哪些 关于深圳网站设计推荐

    深圳建设网站公司有哪些 关于深圳网站设计推荐

    为网友们详解深圳建设网站公司有哪些和关于深圳网站设计推荐方面的知识,很不错的方法小知识,建议收藏哦! 网站已是一个企业数字营销的核心部件,甚至是一家企业的战略资产,所有企

  • mysql数据库同步流程步骤 数据库同步差异化处理方法

    mysql数据库同步流程步骤 数据库同步差异化处理方法

    全面为您解析mysql数据库同步流程步骤的话题,接下来IT袋网小编就来介绍。 MySQL数据库同步通常指将一个数据库服务器(称为主服务器)上的数据同步到另一个或多个数据库服务器(称为从服