Redis主从复制原理

news2024/11/19 8:42:32

        前面的文章中我们演示过Redis主从配置的操作,可以查看之前的博文Redis主从配置教程。这篇文章主要介绍一下Redis主从复制的工作过程和原理。

Redis复制工作过程

 Redis复制的工作过程如上图,主要包含以及几个阶段:

1. 设置IP端口并建立连接

        SLAVEOF命令执行后从服务器会根据设置的IP和端口向主服务器创建一个socket连接,socket连接通过后从服务器将发送ping命令到主服务器用于判断当前socket连接的读写是否正常。当主服务器回复为pong是则证明连接成功,如果不为pong则会断开重连。

2. 身份验证并保存主从服务器信息

        如果从服务器开启了masterauth选项时则需要进行身份的验证,从服务会向主服务器发送一条带有密码的AUTH命令,主服务器接收到AUTH命令发送来的密码并和自己服务器requirepass选项设置的密码进行匹配,如果一致则验证成功。

        主服务器身份验证成功后,从服务器会向主服务器发送当前从服务器监听端口号的执行命令 REPLCONF listening-port XXXX,主服务会将端口号记录在它的从服务器客户端配置中。

3. 数据同步

        主从服务器验证完成后,从服务器会向主从服务器发送数据同步的命令,SYNC/PSYNC命令进行数据同步。Redis2.8版本之前时使用SYNC命令,2.8版本之后使用PSYNC命令。下面我们重点会介绍这两种同步的原理。

4. 命令传播和心跳检测

        同步操作执行完后。每当主服务器执行写操作的命令后会将改写操作命令发送给从服务器进行执行,从而达到主从服务器数据一致。

        在命令传播阶段,从服务器默认会每秒向主服务器发起心跳检测命令:REPLCONF ACK [从服务器的复制偏移量]。主要作用时检测主从服务器的网络连接状态,辅助实现min-slaves选项。

        以上则是Redis主从复制的工作过程。接下去重点介绍一下Redis同步的原理。

Redis同步

        Redis同步的动作主要时发生在首次建立主从服务连接和主从服务器断开重连。上文中也提到Redis同步有SYNC同步和PSYNC同步。

SYNC同步

        在redis2.8版本之前都是SYNC同步。

SYNC同步的主要工作原理:

        1.从服务器向主服务器发送sync命令。
        2. 主服务器执行bgsave命令,生成rdb文件,并使用一个缓冲区记录从当前开始执行的写命令。

        3. 主服务器将rdb文件发送给从服务器,从服务器载入rdb文件。

SYNC同步的缺陷:

        每次都需要进行完整的复制,对性能和效率都会有影响。

PSYNC同步

        Redis从2.8版本开始使用PSYNC命令替代了SYNC命令,PSYNC同时具有完整同步和部分同步操作。

实现PSYNC同步功能主要有以下三个部分构成:

        1. 主/从服务器的复制偏移量

        主从服务器在执行复制时都会维护一个复制偏移量,这个复制偏移量在每次复制时会加上这次复制的数据字节数。复制偏移量的作用判断主从服务器的数据是否一致,同时也通过复制偏移量来获取需要同步的数据。

        2. 复制积压缓冲区

        由主服务器维护的一个固定长度的队列默认大小时1M,主服务器进行命令传播时。将写命令发送给所有从服务器,并将写命令入队到复制积压缓冲区,积压缓冲区会为每个字节记录相应的复制偏移量。当从服务器发起psync命令时会将自己的复制偏移量发送给主服务器,主服务器会从复制缓冲器进行查找,如果存在则执行部分同步,如果不存在则执行完整同步。

        3. 服务器运行ID(runID)

        每个redis服务器开启时都会生成唯一的一个运行ID,由40个随机的十六进制字符组成,从服务器在连接上主服务器时会将主服务器的runid保存下来。

        它的作用主要是当从服务器断线重连主服务器时从服务器会先判断当前连接的主服务器runid与之前记录的主服务器runID是否一致,不一致则执行完整同步,一致则执行部分同步,第二个作用是在哨兵模式下runID也会成为选举主服务器的一个条件(哨兵模式下会提到)。

PSYNC同步的主要工作原理:

        1.客户端发起SLAVEOF命令时,首先判断是否为第一次连接复制如果是则执行完整同步,如果不是则进入下一步。

        2. 第二步判断当前从服务器连接的主服务runID与之前记录的是否一致,不一致则证明是新的主服务器则进行完整同步。  如果一致则发送部分同步的命令 把从服务器的runID 和复制偏移量发送给主服务器。

        3. 主服务器接收到命令后判断该复制偏移量是否在复制积压缓冲区,如果在则执行部分同步,如果不在则执行完整同步,到此数据同步操作完成。

总结

        Redis同步分为SYNC和PSYNC同步,SYNC同步时完整数据同步,PSYNC同步实现了部分数据同步。PSYNC同步主要依靠复制偏移量、复制积压缓冲区、服务器runID来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/77412.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++学习笔记(十九)——stack和queue的模拟实现

容器适配器 deque的简单介绍 stack的模拟实现 queue的模拟实现 容器适配器 适配器:一种设计模式,该种模式是将一个类的接口转换成客户希望的另外一个接口. stack和queue的底层结构 可以看出的是,这两个容器 相比我们之间见过的容器多了一个模板参数,也就是容器类的模板参数,…

数据结构复习+答案

一、选择题:(每小题2分,共30分) 1、在数据的逻辑结构中,树结构和图结构都是( ) A.非线性结构 B.线性结构 C.动态结构 D.静态结构 2.在一个长度为n的顺序表中插入一个元素的算法的时间复杂度为&…

ThinkPHP文件包含漏洞分析

出品|长白山攻防实验室(ID:A_Tree) 0x00 声明 以下内容,来自长白山攻防实验室的A_Tree作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室…

全宇宙最强AI 聊天机器人模型ChatGPT惊艳来袭,你还不上车?居然能写演讲稿和帮忙写代码

目录1、ChatGPT介绍2、ChatGPT如何注册,国内不可用3、VS Code下载安装ChatGPT3.1 打开VS Code找到ChatGPT3.2 ChatGPT 详细安装步骤:3.3 用法3.4 国外模式’ 此模式下,速度会比较稳定,如果有条件,建议使用本模式。 理论…

大数据HDFS凭啥能存下百亿数据?

前言 大家平时经常用的百度网盘存放电影、照片、文档等,那有想过百度网盘是如何存下那么多文件的呢?难到是用一台计算机器存的吗?那得多大磁盘啊?显然不是的,那本文就带大家揭秘。 分布式存储思想 既然一台机器的存储…

Spring 核心与设计思想 · Spring IoC容器 · 控制反转式程序开发 · DI概念

Spring 是什么?一、什么是容器?二、什么是 IoC?2.1 传统程序开发2.2 控制反转式程序开发2.3 对比总结规律三、理解 Spring IoC四、DI 概念说明Spring 是什么? 我们通常说的 Spring 是指 Spring Framework(Spring 框架…

【Mysql】知识体系结构构建以及常见考题汇总

【Mysql】知识体系结构构建以及常见考题汇总1、基本SQL知识1.1、D_L语法以及表中常用约束1.2、mysql表列常用数据结构1.3、事务(此处展示并发事务问题以及解决方案、实现原理见2.3)read uncommitted有脏读问题read committed解决脏读、有不可重复读问题r…

Android基础学习(二十)—— 线程安全

1、Android中线程的常见用法 (1)继承 Thread class MyThread extends Thread{Overridepublic void run(){//处理具体的逻辑} } new MyThread().start(); //启动此线程//使用匿名类 new Thread(){Overridepublic void run(){//处理具体的逻辑} }.star…

【加油站会员管理小程序】03 创建应用

我们上一篇介绍了数据源的创建,本篇我们介绍应用的创建。 微搭低代码中一共有两类应用,一类是数据模型应用,一类是自定义应用。数据模型应用往往对应着PC端的管理后台,例如我们的小程序通常需要一个管理后台来录入数据。 自定义…

【linux】2022年还能用,网易真的是良心啊,网易云音乐linux版本现在还是可以使用的超赞!!官方网的下载地址还可以使用,音乐使用的是qt5进行开发的。

目录前言1,关于网易云音乐2,可以正常使用,可以登录前言 本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/128261513 未经博主允许不得转载。 博主CSDN地址是:https://blog.csdn.net/freewebsys 博主掘金地址…

vue.js:父子组件的实训案例

作业需求 需求1:定义两个输入框,通过输入框输输入的值改变页面显示的值需求2:改变第一个输入框的值的同时使得第二个输入框的值变为100倍并显示需求3:改变第二个输入框的值的同时使得第一个输入框的值变为1/100并显示 实训代码实…

CentOS搭建基于ZIPKIN的数据追踪系统

ZipKin入门介绍 Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据。分布式跟踪系统还有其…

TinUI4.0发布

引言 TinUI4登场~~~ 更新一览: 优化radiobox效果修复listview返回元素不全的问题新增树状图 treeview使用TinUI LOGO.ico新增普通图片 image随包发布 TinUI帮助手册 实用程序,在\test目录下 修复 这是常规更新,修复了listview创建过程中…

ChatGPT怎么用

最开始了解ChatGPT居然是抖音上看到的,之前了解过GPT-3,最开始认为可能类似的语言模型,上手以后才发现,这玩意挺有意思,某些方面,比百度强,但是比人还差十万八千里,智力不好说&#…

【Proteus仿真】【STM32单片机】智能浴室水温调控仪设计

文章目录一、功能简介二、软件设计三、实验现象联系作者一、功能简介 本项目使用Proteus8仿真STM32单片机控制器,使用LCD1602、DS18B20、继电器加热、电机模块等。 系统运行后,LCD1602显示DS18B20采集温度值、温度上限阈值。 开启加水,一段…

PostgreSQL实战之物理复制和逻辑复制(四)

目录 PostgreSQL实战之物理复制和逻辑复制(四) 4 流复制监控 4.1 pg_stat_replication 4.2 监控主备延迟 4.3 pg_stat_wal_receiver PostgreSQL实战之物理复制和逻辑复制(四) 4 流复制监控 4.1 pg_stat_replication 主库上主…

Dual-Path Fusion:遥感融合

DPFN: A Dual-Path Fusion Network for Pan-Sharpening (一种用于泛锐化的双路径融合网络) 大多数现有深上用于pan-sharpening方法的几个公认的问题,如光谱失真和足够的空间纹理增强。针对这些问题,提出了一种新的双路径融合网络…

浙大全日制英文MBA项目申请的五大关键词

2023级开始,浙大全日制英文MBA项目全面登场!对于这个项目的了解,大多数考生还不是特别清楚,因为很多考生更加关注的是“全日制”而非英文MBA本身的情况,如果还是带着以往对中文全日制MBA项目的理解来申请这个项目&…

《Linux运维实战:使用Percona Server for MongoDB物理备份与恢复Mongodb数据》

一、备份与恢复方案 Percona Server for MongoDB 是一个免费的、增强的、完全兼容的、源代码可用的、带有企业级功能的MongoDB Community Edition的替代品。它不需要对MongoDB应用程序或代码进行更改。Percona Server for MongoDB支持版本 > 3.6 。 说明:当前环…

【通知】《生成对抗网络GAN原理与实践》代码开源,勘误汇总!

有三上个月出版了新书《生成对抗网络GAN:原理与实践》,Generative Adversarial Networks(中文名生成对抗网络,简称GAN)自从被提出来后,其发展就非常迅猛,几乎已经被应用于所有CNN可以使用的领域…