关于redis的主从复制(下)

news2025/2/22 13:19:28

目录

全量复制

关于replid和runid

部分复制

补充问题

实时复制


psync可以从主节点获取全量数据,也可以获取一部分数据。主要就是看offset的进度,如果offset写作-1,就是获取全量数据。offset写具体的正整数,则是从当前偏移量位置来进行获取。获取所有数据,是最稳妥的,但是会比较低效。如果从节点之前已经从主节点这里复制过一部分数据了,就只需要把新的之前没复制过的数据搞过来即可。

不是从节点索要那部分,主节点就一定给那部分。主节点会自行判定,看当前是否方便给部分数据,不方便就只能给全量了。

主节点根据 psync 参数和⾃⾝数据情况决定响应结果:

fullresync:全量数据的同步。

continue:增量数据的同步。

err:比较老版本的redis服务器,不支持psync。

一般来说首次和主节点进行数据同步或主节点不方便进行部分复制的时候,会进行全量复制

从节点之前已经从主节点上复制过数据了,因为网络抖动或从节点重启了。从节点需要重新从主节点这边同步数据,此时会进行部分复制

全量复制

全量复制流程:

1)从节点发送 psync 命令给主节点进⾏数据同步,由于是第⼀次进⾏复制,从节点没有主节点的运⾏ ID 和复制偏移量,所以发送 psync  ? -1。

2)主节点根据命令,解析出要进⾏全量复制,回复 +FULLRESYNC 响应。
3)从节点接收主节点的运⾏信息进⾏保存。
4)主节点执⾏ bgsave 进⾏ RDB ⽂件的持久化。rdb文件是二进制的格式,比较节省空间。
5)主节点发送 RDB ⽂件给从节点,从节点保存 RDB 数据到本地硬盘。
6)主节点将从⽣成 RDB 到接收完成期间执⾏的写命令,写⼊缓冲区中,等从节点保存完 RDB ⽂件后,主节点再将缓冲区内的数据补发给从节点,补发的数据仍然按照 rdb 的⼆进制格式追加写⼊到收到的 rdb ⽂件中. 保持主从⼀致性。
7)从节点清空⾃⾝原有旧数据。
8)从节点加载 RDB ⽂件得到与主节点⼀致的数据。
9)如果从节点加载 RDB 完成之后,并且开启了 AOF 持久化功能,它会进⾏ bgrewrite 操作,得到最近的 AOF ⽂件。

主节点进行全量复制的时候,也支持“无硬盘模式”(diskless)。即主节点生成的rdb的二进制数据,不是直接保存到文件中,而是直接进行网络传输了(省下了一系列读硬盘和写硬盘的操作)。从节点之前也是先把收到的rdb数据,写入到硬盘中,然后再加载,现在也可以省略这个过程,直接把收到的数据进行加载了。

关于replid和runid

replid使用info replication查看,runid 使用info server命令查看。

runid是每个节点都不相同的。replid则是具有主从关系的节点,是相同的。

runid主要是用在支持实现redis哨兵这个功能。replid主要用在主从复制中。

部分复制

有些时候,从节点本身就已经有了主节点的绝大部分数据,这个时候,就不太需要进行全量复制了。比如出现网络抖动,主节点这边最近修改的数据可能就无法同步了,网络恢复后,此时就可以让从节点和主节点重新建立联系,当从节点和主节点重新建立连接之后,就需要进行数据的同步。

1)当主从节点之间出现⽹络中断时,如果超过 repl-timeout 时间,主节点会认为从节点故障并终端复制连接。
2)主从连接中断期间主节点依然响应命令,但这些复制命令都因⽹络中断⽆法及时发送给从节点,所以暂时将这些命令滞留在复制积压缓冲区中。
3)当主从节点⽹络恢复后,从节点再次连上主节点。
4)从节点将之前保存的 replicationId 复制偏移量作为 psync 的参数发送给主节点,请求进⾏部分复制。如果replicationId不一样,就需要全量复制。offset表示之前同步数据的进度,主节点就看这个进度是否在当前的积压缓冲区之内,如果确实是在积压缓冲区之内,此时就可以直接进行部分复制,就只把最近这段时间的数据复制过去即可。
5)主节点接到 psync 请求后,进⾏必要的验证。随后根据 offset 去复制积压缓冲区查找合适的数据,并响应 +CONTINUE 给从节点。
6)主节点将需要从节点同步的数据发送给从节点,最终完成⼀致性。

补充问题

实时复制

从节点已经和主节点同步好数据了,但是之后,主节点这边会源源不断的收到修改数据的请求。主节点上的数据就会随之改变。这些数据也需要同步给从节点。

也就是从节点和主节点之间会建立TCP的长连接。然后主节点把自己收到的修改数据的请求,通过上述连接,发给从节点,从节点再根据这些修改请求,修改内存中的数据。

在进行实时复制的时候,需要保证连接处于可用状态。就需要心跳包机制

主节点:默认,每隔10s给从节点发送一个ping命令,从节点收到就返回pong。

从节点:默认每隔1s就给主节点发送一个特定的请求,就会上报当前从节点复制数据的进度(offset)

从节点何时晋升成主节点

从节点和主节点断开连接,有两种情况:

1、从节点主动和主节点断开连接(slaveof no one)。 这个时候,从节点就能够晋升成主节点。

2、主机点挂了,这个时候,从节点不会晋升成主节点。需要通过人工干预的方式,恢复主节点。

关于redis主节点无法重启

解决方案:把redis服务器生成的文件的工作目录区分开(修改配置文件中的dir选项)。

1、停止之前的redis服务器。 2、删除之前工作目录下已经生成的aof文件(或者也可以通过chown命令修改aof文件所属的用户)。 3、给从节点创建新的目录,用来作为从节点的工作目录。并且修改从节点的配置文件,设定成新的工作目录。4、启动redis服务器。

以上,关于主从复制,希望对你有所帮助。

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

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

相关文章

uniapp uni.request重复请求处理

类似这种切换tab时,如果操作很快并且网络不太好,就出现数据错乱,在网上查了一圈,有一个使用uview拦截处理的,但是原生uni.requse没有找到详细的解决办法,就查到使用 abort 方法,我自己封装了一个…

【大模型】DeepSeek:AI浪潮中的破局者

【大模型】DeepSeek:AI浪潮中的破局者 引言:AI 新时代的弄潮儿DeepSeek:横空出世展锋芒(一)诞生背景与发展历程(二)全球影响力初显 探秘 DeepSeek 的技术内核(一)独特的模…

SOME/IP--协议英文原文讲解8

前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2 Speci…

用PyInstaller构建动态脚本执行器:嵌入式Python解释器与模块打包 - 简明教程

技术场景: 需分发的Python工具要求终端用户可动态修改执行逻辑将Python环境与指定库(如NumPy/Pandas)嵌入可执行文件实现"一次打包,动态扩展"的轻量化解决方案。 ▌ 架构设计原理 1. 双模运行时识别 # 核心判断逻辑…

在做题中学习(89):螺旋矩阵

解法:模拟 思路:创建ret数组,用变量标记原矩阵的行数和列数,遍历一个元素就push_back进ret数组,每次遍历完一行或一列,相应行/列数--,进行顺时针螺旋遍历到为0即可。 细节:要有边界…

从零搭建微服务项目Base(第5章——SpringBoot项目LogBack日志配置+Feign使用)

前言: 本章主要在原有项目上添加了日志配置,对SpringBoot默认的logback的配置进行了自定义修改,并详细阐述了xml文件配置要点(只对日志配置感兴趣的小伙伴可选择直接跳到第三节),并使用Feign代替原有RestT…

【数据分析】通过个体和遗址层面的遗传相关性网络分析

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍原理应用场景加载R包数据下载函数个体层面的遗传相关性网络分析导入数据数据预处理构建遗传相关性的个体网络对个体网络Nij进行可视化评估和选择最佳模型评估和选择最佳模型最佳模型…

在 macOS 的 ARM 架构上按住 Command (⌘) + Shift + .(点)。这将暂时显示隐藏文件和文件夹。

在 macOS 的 ARM 架构(如 M1/M2 系列的 Mac)上,设置 Finder(访达)来显示隐藏文件夹的步骤如下: 使用快捷键临时显示隐藏文件: 在Finder中按住 Command (⌘) Shift .(点&#xff…

【产品经理】需求分析方法论+实践

阐述了需求分析的基本认知,包括需求分析的定义、原则和内容。接着,文章详细介绍了需求分析的十个步骤,从收集需求到结果评审,为产品经理提供了清晰的操作指南。 作为产品经理,需求分析是一个最基本的工作,但…

Windows平台的小工具,功能实用!

今天给大家分享一款超实用的Windows平台监控工具,堪称“桌面小管家”,能帮你轻松掌握电脑的各种运行状态,比如网速、下载速度、内存和CPU占用率等常用参数,让你的电脑运行情况一目了然。 TrafficMonitor 网速监控悬浮窗软件 这款…

SAP-工单技术性关闭操作手册

文章目录 单个工单批量处理TECO和CLSD标识的区别 单个工单 事务代码CO02,输入工单号后回车 功能-》限制处理-》技术性完成 工单状态更改 撤销TECO操作 CO02输入工单号,功能-》限制处理-》撤销技术性完成 批量处理 事务代码COHV,点击生…

Aseprite绘画流程案例(1)——画相机图标

原图: 步骤一:打开需要参照的图标 步骤二:将参照的图片拖放到右边,作为参考 步骤三:新建24x24的画布,背景为白色的画布 步骤四:点击菜单栏——视图——显示——像素网格(如果画布已经…

安装海康威视相机SDK后,catkin_make其他项目时,出现“libusb_set_option”错误的解决方法

硬件:雷神MIX G139H047LD 工控机 系统:ubuntu20.04 之前运行某项目时,处于正常状态。后来由于要使用海康威视工业相机(型号:MV-CA013-21UC),便下载了并安装了该相机的SDK,之后运行…

云计算架构学习之Ansible-playbook实战、Ansible-流程控制、Ansible-字典循环-roles角色

一、Ansible-playbook实战 1.Ansible-playbook安装软件 bash #编写yml [rootansible ansible]# cat wget.yml - hosts: backup tasks: - name: Install wget yum: name: wget state: present #检查playbook的语法 [rootansible ansible]…

网络工程师 (47)QOS

一、概念与原理 QOS即服务质量(Quality of Service)是一种网络技术,用于管理和保证网络中不同类型的质量和性能。它通过设置优先级和带宽限制等策略,确保关键应用(如视频会议、语音通信)的数据包能够在网络…

风铃摇晃的弧度与不安等长

晴,2025年2月19日 的确是,有依靠又有谁会去自己打伞。是啊,有时候生活推着我们走的样子确实挺无力的。不过谁都愿意携手走的,希望有一天再也不用“抛头露面”了吧。 又下载回了 X ,马上 Gork 3 可以使用&#xff0c…

Linux部署DeepSeek r1 模型训练

之前写过一篇windows下部署deepseekR1的文章,有小伙伴反馈提供一篇linux下部署DeepSeek r1 模型训练教程,在 Linux 环境下,我找了足够的相关资料,花费了一些时间,我成功部署了 DeepSeek R1 模型训练任务,结…

JetBrains 2024开发者生态报告 -你尝试过用VR头戴设备编程吗

JetBrains 2024开发者生态报告:核心洞察 方法论 覆盖 171 个国家/地区 的 23,262 名开发者 。数据按区域开发者数量和就业状态加权。 主要趋势 AI 整合 80% 的公司允许使用第三方 AI 工具(如 ChatGPT、Copilot)。18% 的开发者将 AI 集成到产…

汇能感知的光谱相机/模块产品有哪些?

CM020A 分辨率:1600H1200V 光谱范围:350~950nm 光谱分辨率:1nm 接口:USB2.0 帧率:16001200 (6帧) 输出格式:Raw 8bit FOV:D73.5H58.8V44.1 相机尺寸:505055mm VM02S10 分辨率…

Spring中Bean的四种实例化方法

Bean的四种实例化方法 Bean是Spring核心的概念,另外一个核心的概念是AOP。官网上,Bean的解释是: In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans…