Redis 主从同步

主从同步

很多企业没有使用Redis的集群,但是至少都做了主从。有了主从,当master挂掉的时候,运维让从库过来接管,服务就可以继续,否则master需要经过数据恢复和重启的过程,可能会拖很长时间,影响业务持续服务。

CAP原理——现代分布式理论基石

  • C-Consistent,一致性
  • A-Availability,可用性
  • P-Partition tolerance 分区容错性

一句话概括CAP原理:在网络分区发生时,一致性和可用性难两全

分布式系统的节点往往都是分布在不同的机器上进行网络隔离开的,这意味着必然会用网络断开的风险,这个网络断开的场景就叫【网络分区】。

在网络分区发生时,两个分布式节点之间无法进行通信,我们对一个节点进行修改操作无法同步到另一个节点,所以数据的【一致性】将无法满足。因为 两个分布式节点数据不再保持一致,除非我们牺牲【可用性】,也就是暂停分布式节点服务,在网络分区发生时,不再提供修改数据的功能,直到网络状况完全恢复再继续对外提供服务。

BASE理论

BASE理论是分布式系统设计中的另一个重要概念,他的核心是,在分布式环境中,完全一致性往往难以实现,因此可以采用柔性的一致性模型来提高系统的可用性和扩展性

  • 基本可用(Basically Available):系统在分布式环境中可能会出现部分故障,但保证核心功能可用,尽可能避免全面崩溃。

  • 软状态(Soft State):系统的状态不需要时刻保持一致,允许存在中间状态,最终通过异步的方式达到一致性。

  • 最终一致性(Eventually Consistent):系统保证在没有新的更新的情况下,最终所有的复制数据会达到一致的状态。

Redis的最终一致即Base理论

Redis的主从数据是异步同步的,所以分布式的Redis系统并不满足【一致性】要求。当客户端在Redis的主节点修改了数据后,立即返回,即使在主从网络断开的情况下,主节点依旧可以正常对外提供服务,所以Redis满足【可用性】

Redis保证【最终一致性】,从节点会努力追赶主节点,最终从节点的状态会和主节点的状态保持一致。如果网络断开了,主从节点的数据将会出现大量不一致。一旦网络恢复,从节点会采取多种策略努力追赶上落后的数据,继续尽力保持和主节点的一致。

主从同步

Redis同步支持主从同步和从从同步,从从同步是Redis后续版本增加的功能,为了减轻主库的同步负担。
在这里插入图片描述

增量同步

Redis同步的是指令流,主节点会将那些对自己的状态产生修改性影响的指令记录在本地的内存buffer中,然后异步将buffer中的指令同步到从节点,从节点一边执行同步的指令流来达到和主节点一样的状态,一边向主节点反馈自己同步到哪里了(偏移量)

因为内存的buffer是有限的,所以Redis主库不能将所有的指令都记录在内存buffer中。Redis的复制内存buffer是一个定长的环形数组,如果数组内容满了,就会从头开始覆盖前面的内容

如果因为网络状况不好,从节点在短时间内无法和主节点进行同步,那么当网络状况恢复时,Redis的主节点中那些没有同步的指令在buffer中有可能已经被后续的指令覆盖掉了,从节点将无法直接通过指令流来进行同步,这个时候就需要用到更加复杂的同步机制——快照同步。

快照同步

快照同步是一个非常耗费资源的操作,他 1. 首先需要在主库上进行一次bgsave将当前内存的数据全部快照到磁盘文件2.然后再将快照文件的内容全部传送到从节点3. 从节点将快照接收完毕后,立即执行一次全量加载,加载之前先要将当前内存的数据清空。加载完毕后通知主节点继续进行增量同步

在整个快照同步进行的过程中,主节点的复制buffer还在不停的往前移动,如果快照同步的时间过长或者复制buffer太小,都会导致同步期间的增量指令在buffer中被覆盖,这样就会导致快照同步完成后无法进行增量复制,然后会再次发起快照同步,如此极有可能会陷入快照同步的死循环。
在这里插入图片描述
所以, 务必配置一个合适的复制buffer大小参数,避免快照复制的死循环

增加从节点

当从节点刚刚加入集群时,需要先进行一次快照同步,同步完成后在继续进行增量同步。

无盘复制

主节点在进行快照同步时,会进行很重的IO文件操作,特别是对于非SSD磁盘存储时,快照会对系统的负载产生较大影响。特别是 当系统正在进行AOF的fsync操作时如果发生快照,fsync将会被推迟执行,这就会严重影响主节点的服务效率

Redis的无盘复制是一种优化主从复制过程的技术,旨在减少主节点在进行复制时对磁盘的依赖,从而提高复制速度并减轻主节点磁盘IO压力。

工作原理

  • 在无盘复制模式下,Redis主节点不会像传统复制那样先将数据保存为RDB文件到本地磁盘,然后再由从节点下载该文件。相反,主节点会直接在内存中创建RDB文件,并通过网络socket直接将RDB数据流发送到从节点,整个过程绕过了磁盘操作。
  • 这个过程涉及主节点创建一个子进程,该子进程负责将内存中的数据序列化并通过网络发送,而无需写入磁盘。

wait指令

Redis的复制是异步进行的,wait指令可以让异步复制变为同步复制,确保系统的强一致性(不严格)。

> set key value 
OK
> wait 1 0 
(integer) 1

wait提供两个参数,第一个参数是从库数量N,第二个参数是时间t,以毫秒为单位。他表示等待wait指令之前的所有写操作同步到N个从库,最多等待t时间,如果t为0,表示无限等待直到N个从库同步达到一致

假设此时出现了网络分区,wait指令第二个参数时间t=0,主从同步无法进行,wait指令会永远阻塞,Redis服务器将丧失可用性。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

web-原生Ajax

概念: Asynchronous JavaScript And XML,异步的JavaScript和XML。 作用: 数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如…

MySQL—索引—基础语法

目录 一、创建、查看以及删除索引的语法 (1)创建索引 1、1会用到一个关键字:CREATE。 1、2增加索引还可以用到另外一个关键字——ALTER TABLE 表名 ADD INDEX ... 。 2、解释。 (2)查看索引 1、查看索引需要用到…

FreeCAD中类型机制研究

了解FreeCAD类型机制实现原理,为后续FreeCAD相关工作提供参考。 1.实现原理 FreeCAD系统提供一个最上层的基类BaseClass,该类主要处理类型相关工作,几乎所有的FreeCAD的类直接或间接继承于该类。该类只有唯一个属性Type,Type里面…

kotlin类

一、定义 1、kotlin中使用关键字class 声明类,如果一个类没有类体,也可以省略花括号, 默认为public 类型的: // 这段代码定义了一个公开的、不可被继承的Test类 class Test{} // 没有类体,可以省略花括号 class Test 底层代码&…

【菜狗学前端】uniapp(vue3|微信小程序)实现外卖点餐的左右联动功能

记录,避免之后忘记...... 一、目的:实现左右联动 右->左 滚动(上拉/下拉)右侧,左侧对应品类选中左->右 点击左侧品类,右侧显示对应品类 二、实现右->左 滚动(上拉/下拉)右…

利口 202. 快乐数

力扣 202. 快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结…

mac如何检测硬盘损坏 常用mac硬盘检测坏道工具推荐

mac有时候也出现一些问题,比如硬盘损坏。硬盘损坏会导致数据丢失、系统崩溃、性能下降等严重的后果,所以及时检测和修复硬盘损坏是非常必要的。那么,mac如何检测硬盘损坏呢?有哪些常用的mac硬盘检测坏道工具呢? 一、m…

57.SAP MII产品介绍(07)功能详解(06)Workbench-SQLQuery

1.SQLQuery概念 您可以使用SAP Manufacturing Integration and Intelligence(SAP MII)Workbench中的SQLQuery来创建访问面向SQL的连接器(如IDBC连接器)的模板。此查询的扩展名为tqsq。 简而言之,SQLQuery就是一段…

嵌入式web 服务器boa的编译和移植

编译环境:虚拟机 ubuntu 18.04 目标开发板:飞凌OKA40i-C开发板, Linux3.10 操作系统 开发板本身已经移植了boa服务器,但是在使用过程中发现POST方法传输大文件时对数据量有限制,超过1M字节就无法传输,这是…

Ansible-Playbook

前置 Playbook介绍 playbook 剧本是由一个或多个“play”组成的列表Playbook 文件是采用YAML语言编写的用户通过ansible命令直接调用yml语言写好的playbook,playbook由多条play组成,每条play都有一个任务(task)相对应的操作,然后调用模块modules,应用在…

Rocky Linux archive下载地址

Index of /vault/rocky/https://dl.rockylinux.org/vault/rocky/

Linux中的全局环境变量和局部环境变量

Linux中的全局环境变量和局部环境变量 一、全局环境变量二、局部环境变量三、 设置全局环境变量 bash shell用一个叫作环境变量 (environment variable)的特性来存储有关shell会话和工作环境的信息(这也是它们被称作环境变量的原 因&#xff…

VUE3实现个人网站模板源码

文章目录 1.设计来源1.1 网站首页页面1.2 个人工具页面1.3 个人日志页面1.4 个人相册页面1.5 给我留言页面 2.效果和源码2.1 动态效果2.2 目录结构 源码下载万套模板,程序开发,在线开发,在线沟通 作者:xcLeigh 文章地址&#xff1…

认识LogBack.xml

一、logback的三个主要模块 1.logback-core:提供基本的日志功能; 2.logback-classic:建立在logback-core之上,兼容SLF4和log4jAPI,提供一套强大的日志框架; 3.logback-access:允许通过servlet容…

防封防红短链接系统

功能很强大的一款防封防红短链接系统 功能列表: 1、支持设置套餐,选择不同的功能的集合作为套餐的功能,可设置包年包月 2、强大的短链接数据统计功能,包括统计点击次数、国家分布情况、浏览器分布情况、语言分布情况等 3、支持…

GWO-CNN-SVM,基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类)

GWO-CNN-SVM,基于GWO灰狼优化算法优化卷积神经网络CNN结合支持向量机SVM数据分类(多特征输入多分类) 1. GWO灰狼优化算法 灰狼优化算法(Grey Wolf Optimizer, GWO)是一种启发式优化算法,模拟了灰狼群体的社会行为,包…

哈夫曼树及其应用

目录 一、哈夫曼树 1.1基本概念 1.2构造方法 1.3构造算法的实现 二、哈夫曼树的应用 2.1哈夫曼编码 2.2文件的编码和解码 2.2.1编码 2.2.2解码 一、哈夫曼树 1.1基本概念 哈夫曼树又称为最优树,是一类带权路径长度最短的树。 最优二叉树:带权…

vue3-openlayers 点击多边形弹框,高亮多边形,自定义属性传递,鼠标悬浮多边形上动态修改鼠标样式

本篇介绍一下使用vue3-openlayers点击多边形弹框,高亮多边形,自定义属性传递,鼠标悬浮多边形上动态修改鼠标样式 1 需求 加载天地图,polygon传递自定义属性标悬浮在polygon上,根据自定义属性,动态修改鼠标…

vue中的状态管理

第1部分:引言 状态管理是应用中数据流动和变更的核心机制。在Vue应用中,状态管理不仅涉及到组件间的数据共享,还包括了数据的持久化、异步操作的处理等复杂场景。良好的状态管理策略可以提高应用的响应速度,降低组件间的耦合度&a…

四边形不等式优化

四边形不等式优化 应用于类似以下dp转移方程。 f i min ⁡ 1 ≤ j ≤ i ( w i , j , f i ) f_{i}\min_{1\le j\le i}(w_{i,j},f_{i}) fi​1≤j≤imin​(wi,j​,fi​) 假设 w i , j w_{i,j} wi,j​ 可以在 O ( 1 ) O(1) O(1) 的时间内进行计算。 在正常情况下,…