【Redis】聊一下Redis数据同步/复制

news2024/9/29 23:23:26

在分布式系统中,基本上所有的存储中间件都支持数据同步/复制功能,主要的原因是为实现高可用,单点宕机的故障,必须需要将数据进行共享,而共享的话,就需要将数据进行复制,对于已经学过的MySQL和Kafka来说,都支持复制功能。而Redis作为一个分布式缓存存储中件间,必然也是支持的。

Redis为什么需要复制

通过前面的学习,我们知道Redis有AOF和RDB的持久化方式,通过重新读RDB和回放日志,可以将系统宕机前的数据进行恢复,尽量减少数据的丢失,但是当Redis只有单机的时候,宕机这个过程中是没办法提供服务的,所以需要通过数据冗余的方式,增加副本,即使其中一台机器宕机,也不会系统整体不可用。
数据副本之间如何保证数据一致性?
Redis提供了主从模式,保证数据副本的一致性,主从库之间采用的是读写分离的方式

  • 读操作:主库、从库都可以接受并处理
  • 写操作:主库接受写,将修改的数据同步给从库。
    在这里插入图片描述
    为什么采用读写分离模式?
    如果主从库都可以接受客户端的写操作,那么同时在不同的实例上进行写,因为是对共享数据进行操作,为保证数据一致性,就需要使用锁、以及实例间数据一致性协议进行完成,而这个是一个巨额的开销,所以不能接受。主从模式可以很好的分离,主可以将写操作同步给从库。

第一次主从数据同步流程

启动多个Redis实例后,通过replcaof 形成主从关系,
在这里插入图片描述

  • 1,建立连接、协商同步
    • 当在从库实例上执行slaveof xxx 6379命令后,从库实例会和主库实例建立连接,然后发送psync ? -1命令,psync表示进行数据同步,而每个Redis实例都有一个runID 因为第一次连接,从实例不知道主实例的RunId,所以就是?,-1表示的是进行第一次复制。
    • 主库收到命令后,会使用FULLRESYNC {runId}{offet} 返回,具体含义就是FULLRESYNC代表的是第一次复制采用的全量复制,把当前主库的数据都复制到从库中。runId是主库的runId, offet是当前复制的进度。
  • 2,第二阶段主库会生成当前全部数据的RDB文件,发送给从库,从库进行将现有数据删除,然后执行RDB文件。
  • 3,因为在生成RDB文件之后,主库也会处理读写请求,会将增量的数据写入到RDB文件,发送给从库。这样就完成了整个流程。

主从从模式

上面我们知道在第一次主从连接的时候,对于主库来说比较耗时的操作就是第一次生成RDB文件和传输RDB文件,前者需要fork出线程进行处理,会影响主库的整体处理速度,而后者传输RDB文件,因为针对的是全量的数据,所以这个操作非常耗费网络带宽。那么有没有其他方式可以缓解主库的这种操作,解决方案就是主从从模式
主从从模式说白了就是,当有较多的从库实例,不需要从主库建立和主库的数据复制连接,使用一个从库进行数据复制。
在这里插入图片描述

主从网络间断,数据复制如何处理

由于在分布式系统中,网络是不可靠的,所以当出现主从网络断开的情况下,数据需要保证复制的一致性,如何做,在2.8版本之前是进行全量复制,而之后采用了增量复制。
具体原理是,当主从库断开连接后,主库会将写命令写入到replication buffer 中,同时也写到repl_backing_buff 缓冲区中。
repl_backing_buff 是一个环形缓冲区,主库会记录自己写的位置,从库会记录自己读的位置。
刚开始的时候,主从库位置是一样的,当主库接受的写命令越来越多就会增加偏移量,maser_repl_offset,而从库读取同步的数据也会进行相应的移动,slave_repl_offset。正常情况下,两个基本相当。
在这里插入图片描述

repl_backlog_buffer的使用
主从库连接恢复之后,从库首先会给主库发送psync命令,并把自己的slave_repl_offset发送给主库,主库判断和自己的差距,将没有同步的数据进行同步。

在这里插入图片描述
注意点:因为repl_backlog_buffer是一个环形缓冲区,当缓冲区写满之后,主库就会覆盖之前写入的数据,而这部分数据如果从库米有来得急进行同步,那就会可能造成数据丢失。一把来说,我们需要将repl_backlog_size 参数设置的比较大一倍。还有一种方式是通过切片集群来解决,具体等后边在详解。

总结

本篇主要介绍了Redis数据复制,具体的方式全量复制、基于长连接的复制、增量复制三种模式。第一次都是使用全量复制,之后就可以基于长连接模式,如果出现网络断开、抖动等情况,就需要增量复制。虽然复制模式的读写分离可以避免数据之间的不一致,但是主库如果出现故障,没有办法提供服务。写一篇我们介绍下主从故障之后,哨兵机制。

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

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

相关文章

Jdk17中文在线手册(建议收藏)

本身学习技术就比较难,再来一个英文版的API,就难上加难,经过几周的研究翻译,JDK17最新版中文在线手册搞定,不要看错了哈是JDK17不是JDK1.7,全网最新的只有JDK11,JDK17中文在线手册是第一次出现&…

JavaEE进阶(5/29)SpringMVC

目录 1.复习 2.URL传参PathVariable 3.上传文件RequestPart 4.获取Cookie/Session/header 5.传统/维新获取cookies 6.传统/维信获得Header 7.获取Session(非常重要) 8.不加ResponseBody 9.如何获取Json数据,RequestBody 10.想…

王者之力,驭见未来 | 圣戈班量子膜全国核心店面大会圆满落幕!

5月24日,“王者之力,驭见未来”——2023年圣戈班量子膜全国核心店面大会在成都缇沃丽酒店隆重召开! 圣戈班舒热佳特殊镀膜有限公司全球总裁Mehrotra Vishal先生、圣戈班舒热佳特殊镀膜有限公司亚太总裁陈剑超先生、圣戈班舒热佳特殊镀膜有限公…

opencv_c++学习(二十九)

一、监督学习的聚类方法 K近邻的方法: 首先给出一个阈值k,后寻找距离黑色圆点最近的k个元素,占据比例大的元素即为黑色所属的类别。如图所示,即k3时,黑色圆属于三角形,k5时圆点属于正方形。 支持向量机方…

设计模式-享元模式

问题背景 有一个小型的外包项目,就是给客户A做一个展示的网站,例如展示:这个网站展示的都是客户A的产品。然后可以A的朋友觉得不错,也希望做这样一个网站,但是要求有些不同,要求以新闻的形式展示。还有更多…

DORIS----漏斗转化分析案例实现

综合案例之漏斗转化分析 业务目标、到达路径,路径步骤、步骤人数,步骤之间的相对转换率和绝对转换率 每一种业务都有他的核心任务和流程,而流程的每一个步骤,都可能有用户流失。 所以如果把每一个步骤及其对应的数据(…

【Linux】深入了解冯诺依曼体系结构与操作系统

目录 导读 🌞专栏导读 🌞冯诺依曼 🌞冯诺依曼体系结构 🌛木桶效应 🌞操作系统(Operator System) 🌛概念 🌛设计OS的目的 🌛系统调用和库函数概念 导读 六一儿童节快到了&…

Envoy 物联网模块开发---串口服务器 (一)

一、背景 最近业余时间想基于Envoy 开发一个串口网关,主要是想把一些 modbus、bacnet 以及 mqtt 等物联网协议接入Envoy中,当读到串口数据后可以转发成对应的网络协议 二、Envoy的优势 选择Envoy的话主要是因为Envoy的代码已经十分健全了,零…

(数字图像处理MATLAB+Python)第九章图像形态学运算-第三节:二值图像的形态学处理

文章目录 一:形态滤波(1)概述(2)程序 二:图像的平滑处理(1)概述(2)程序 三:图像的边缘提取(1)概述(2&#xff…

redux与react-redux状态集中管理

一、redux:可用于react、Vue等中 redux应用:状态的管理,共享状态,Redux用一个单独的常量状态树(state对象)保存这一整个应用(如tab选项卡的状态、城市等需要应用在整个页面的信息)的状态。其本…

算法|13.贪心

1.字典序最小的字符串连接方案 题意&#xff1a;给定一个由字符串组成的数组strs&#xff0c;必须把所有的字符串拼接起来&#xff0c;返回所有可能的拼接结果中字典序最小的结果。 public static class MyCom implements Comparator<String>{Overridepublic int compa…

@程序员【提升代码质量,快走出学习迷茫的状态吧】

思路清晰&#xff0c;能上钻一 思路清晰&#xff0c;能上钻一写代码如同打游戏上分。写代码如同中医治病。 思路清晰&#xff0c;能上钻一 ⭐⭐想成为一名优秀的电玩高手&#xff0c;你需要有清晰的思路;想成为一名顶级的电玩高手&#xff0c;你需要的是顶级的思路和异于常人的…

裁员后投递了300次简历,面试22家,终于上岸!

这是一位群友的励志故事&#xff0c;生活虽然很苦&#xff0c;但是朝着自己想要的方向去努力很值得&#xff01; 求职109天&#xff0c;沟通2212次&#xff0c;投简历355次&#xff0c;面试22家&#xff0c;涨薪10%&#xff0c;终于上岸&#xff0c;在这里复盘下我的经历&#…

[创业之路-72] :创业公司发展模式的选择:技工贸还是贸工技?

目录 前言&#xff1a; 一、什么是技、工、贸&#xff1f; 二、概述 2.1 推动力不同 2.2 适合领域不同 2.3 经营模式的主导地位不同 三、技、工、贸详解 3.1 常见的七种营销模式 3.2 常见的三种生产模式 3.3 常见的三种研发模式 四、经营模式的战略选择与影响因素 …

短视频矩阵源码如何做应用编程?

短视频矩阵源码&#xff0c; 短视频矩阵系统技术文档&#xff1a; 可以采用电子文档或者纸质文档的形式交付&#xff0c;具体取决于需求方的要求。电子文档可以通过电子邮件、远程指导交付云存储等方式进行传输、 短视频矩阵{seo}源码是指将抖音平台上的视频资源进行筛选、排…

C++ Primer Plus 第一,二章笔记

目录 第一章笔记 1、C简介 2、C简史 3、可移植性和标准 第二章笔记 1. 进入C 1.3、预处理器和头文件 1.4、名称空间&#xff08;namespace&#xff09; 1.5、使用cout进行C的输出 2. C语句 3. 其他C语句 4. 函数 第一章笔记 1、C简介 C融合了3种不同的编程方式&a…

vsdx文件怎么打开,安装什么软件打开这种后缀名(教程)

目录 简介 安装配置 其他 总结 简介 VSDX 文件是 Microsoft Visio 文件格式&#xff0c;它是一种二进制文件&#xff0c;用于保存 Visio 中的绘图和图表。如果你想要打开 VSDX 文件&#xff0c;可以考虑以下几种方法&#xff1a; 方法一&#xff1a;使用 Microsoft Visio …

C++IO流(详解)

C语言的输入与输出 在C语言当中&#xff0c;我们使用最频繁的输入输出方式就是scanf与printf&#xff1a; scanf&#xff1a; 从标准输入设备&#xff08;键盘&#xff09;读取数据&#xff0c;并将读取到的值存放到某一指定变量当中。 printf&#xff1a; 将指定的数据输出到…

Vivado综合属性系列之十三 FSM_ENCODING

目录 一、前言 二、FSM_ENCODING ​2.1 属性介绍 ​2.2 工程代码 2.3 结果 ​2.4 参考资料 一、前言 ​状态机的实现有很多方式&#xff0c;如auto&#xff0c;one_hot&#xff0c;sequential&#xff0c;如下图中Synthesis中-fsm_extraction的配置项&#xff0c;但此处作用范…

【AI面试】降低过拟合的方式方法横评探究

对于一个“训练调参工程师”来说&#xff0c;在训练过程遇到过拟合现象&#xff0c;是常事。当然&#xff0c;如何降低过拟合&#xff0c;也是在面试过程中&#xff0c;经常被面试官问到的问题&#xff08;没啥可问的&#xff0c;就只能这样问了&#xff09;。以下是我们会常考…