Redis - 主从集群下的主从复制原理

news2025/1/23 13:45:16

主从复制过程

 


数据同步演变过程

sync 同步
Redis 2.8 版本之前,首次通信成功后, slave 会向 master 发送 sync 数据同步请求。然后
master 就会将其所有数据全部发送给 slave ,由 slave 保存到其本地的持久化文件中。这个过
程称为全量复制。
但这里存在一个问题:在全量复制过程中可能会出现由于网络抖动而导致复制过程中断。
当网络恢复后, slave master 重新连接成功,此时 slave 会重新发送 sync 请求,然后会从
头开始全量复制。
由于全量复制过程非常耗时,所以期间出现网络抖动的概率很高。而中断后的从头开始
不仅需要消耗大量的系统资源、网络带宽,而且可能会出现长时间无法完成全量复制的情况。
psync 同步
Redis 2.8 版本之后,全量复制采用了 psync Partial Sync ,不完全同步)同步策略。当
全量复制过程出现由于网络抖动而导致复制过程中断时,当重新连接成功后,复制过程可以
“断点续传” 。即从断开位置开始继续复制,而不用从头再来。这就大大提升了性能。
系统为每个要传送数据进行了编号,该编号从 0 开始,每个字节一个编号。该编号称为
复制偏移量。参与复制的主从节点都会维护该复制偏移量。
master 启动后就会动态生成一个长度为 40 位的 16 进制字符串作为当前 master 的复
ID ,该 ID 是在进行数据同步时 slave 识别 master 使用的。通过 info replication
master_replid 属性可查看到该 ID
master 有连接的 slave 时,在 master 中就会创建并维护一个队列 backlog ,默认大小
1MB ,该队列称为 复制积压缓冲区 master 接收到了写操作数据不仅会写入到 master
存,写入到 master 中为每个 slave 配置的发送缓存,而且还会写入到复制积压缓冲区。其作
用就是用于保存最近操作的数据,以备“断点续传”时做数据补偿,防止数据丢失。
psync 数据同步过程中,若 slave 重启,在 slave 内存中保存的 master 的动态 ID 与续
offset 都会消失,“断点续传”将无法进行,从而只能进行全量复制,导致资源浪费。
psync 数据同步过程中, master 宕机后 slave 会发生“易主”,从而导致 slave 需要从
master 进行全量复制,形成资源浪费。
Redis 4.0 psync 进行了改进,提出了“同源增量同步”策略。
针对“ slave 重启时 master 动态 ID 丢失问题”,改进后的 psync master 的动态 ID 直接
写入到了 slave 的持久化文件中。
slave 易主后需要和新 master 进行全量复制,本质原因是新 master 不认识 slave 提交的
psync 请求中“原 master 的动态 ID ”。如果 slave 发送 PSYNC < master_replid> <repl_offset>
命令,新 master 能够识别出该 slave 要从原 master 复制数据,而自己的数据也都是从该 master

复制来的。那么新 master 就会明白,其与该 slave“师出同门”,应该接收其“断点续传”

同步请求。
而新 master 中恰好保存的有“原 master 的动态 ID ”。由于改进后的 psync 中每个 slave
都在本地保存了当前 master 的动态 ID ,所以当 slave 晋升为新的 master 后,其本地仍保存
有之前 master 的动态 ID 。而这一点也恰恰为解决“ slave 易主”问题提供了条件。通过 master
info replicaton 中的 master_replid2 可查看到。如果尚未发生过易主,则该值为 40 0

 

Redis 7.0 版本对复制积压缓冲区进行了改进,让各个 slave 的发送缓冲区共享复制积压
缓冲区。这使得复制积压缓冲区的作用,除了可以保障数据的安全性外,还作为所有 slave
的发送缓冲区,充分利用了复制积压缓冲区。

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

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

相关文章

10个前端开发不容错过的工具网站

作为开发人员&#xff0c;我们经常寻找合适的工具和资源来帮助日常开发工作。但是很多好用的工具网站尤其是国外的网站很多人都错过了。 这里我整理了一份包含 10 个网站的列表&#xff0c;这些网站或许可以帮助到作为前端开发者的你。 1、MDN Web 文档 MDN文档无疑是 Web 开…

Echarts Y轴自定义设置图片

如图Y轴有文字和图片&#xff0c;1-3的图片不同&#xff0c;后面的是特定的css 样式&#xff1b;实现代码 yAxis: {type: category,inverse: true,boundaryGap: false,axisTick: { show: false }, // 是否展示标记点axisLine: { show: false },axisLabel: {// 坐标轴的标签// f…

C++ Qt开发:CheckBox多选框组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍CheckBox单行输入框组件的常用方法及灵活运用…

京东数据平台有哪些-怎么获取京东数据-京东竞品数据分析工具

如今&#xff0c;许多在线上经营的电商品牌方都着手于去做竞品分析&#xff0c;毕竟竞品分析对品牌的品牌运营及品牌战略决策来说有多种好处&#xff0c;包括但不限于&#xff1a;了解市场需求&#xff0c;把握市场竞争格局&#xff1b;了解竞品推广及营销策略&#xff1b;了解…

【Linux】探索Linux进程优先级 | 环境变量 |本地变量 | 内建命令

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 目录 一、进程优先级1.1优先级VS权限1.2为什么要有进程优先级&am…

低成本物联网安全芯片ACL16_S 系列,可应用物联网认证、 SIM、防抄板和设备认证等产品上

ACL16_S 芯片是针对物联网认证、 SIM、防抄板和设备认证需求推出的高安全芯片。芯片采用 32 位 ARMCortex™-M0 系列内核&#xff0c;片内集成多种安全密码模块&#xff0c;包括 RSA/ECC DES/TDES、 SHA-1/-256、 AES-128/-192/-256 等国际安全算法&#xff0c;支持真随机数发…

AtCoder Beginner Contest 332 A~F

A.Online Shopping(计算) 题意&#xff1a; 需要购买 N N N种物品&#xff0c;第 i i i种物品的价格为 P i P_i Pi​&#xff0c;且第 i i i件物品需买 Q i Q_i Qi​件。 商店满 S S S元包邮&#xff0c;不满则需支付 K K K元邮费&#xff0c;问需支付多少钱。 分析&#x…

『 Linux 』进程地址空间存在的意义

文章目录 前言&#x1f995;&#x1f996; 防止进程对物理内存的非法(危险)访问&#x1f996; 进程管理模块与内存管理模块的解耦合&#x1f996; 实现进程间的独立性 前言&#x1f995; 在文章『 Linux 』进程地址空间概念中提到了进程地址空间的部分概念; 这部分概念主要围绕…

设计模式—观察者模式

观察者模式&#xff08;Observer Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会得到通知并自动更新。 在观察者模式中&#xff0c;有两个核心角色&#xf…

vue-如何实现带参数跳转页面

文/朱季谦 在vue框架的前端页面上&#xff0c;若要实现页面之间的带参数跳转&#xff0c;可参考以下实现过程&#xff1a; 例如&#xff0c;点击截图中的“查看试卷”&#xff0c;可实现带参跳转到相应的试卷页面&#xff0c;该功能类似查看试卷的详情页面&#xff1a; 假如以…

C#多线程总结

目录 前言 一、异步线程 使用async和await关键字 基于委托实现 二、同步线程 三、Thread线程 开启线程 设置线程优先级 Thread拓展封装 四、ThreadPool线程池 常规使用 设置线程数 线程等待 Thread和ThreadPool比较 通过线程池做一些扩展&#xff08;定时器类&am…

解析视频美颜SDK的算法:美肤、滤镜与实时处理

如今&#xff0c;美颜技术在视频处理中扮演着关键的角色&#xff0c;为用户提供更加精致的视觉体验。本文将深入探讨视频美颜SDK的算法&#xff0c;聚焦于美肤、滤镜与实时处理等方面&#xff0c;揭示背后的科技奥秘。 一、美肤算法的魅力 视频美颜的一个核心功能就是美肤&am…

被央视报道过的AIGC产品-贝塔创作(BetaCreator)使用指南

产品地址&#xff1a;betacreator.com 真人图 人台图 商品图 商品变色 建议使用浅色服装进行变色&#xff0c;效果更好 如果没有浅色服装&#xff0c;可以先把服装颜色变为白色

redis-学习笔记(Jedis 前置知识)

自定义的 Redis 客户端 咱们可以实现编写出一个自定义的 Redis 客户端 因为 Redis 公开了自己使用的自定义协议 ---- RESP 协议清楚了, 那么通信数据格式就清除了, 就能完成各层次之间的数据传输, 就能开发服务器和客户端 RESP — Redis 的 序列化 协议 特点: 简单好实现快读进…

App防止恶意截屏功能的方法:iOS、Android和鸿蒙系统的实现方案

防止应用被截图是一个比较常见的需求&#xff0c;主要是出于安全考虑。下面将分别为iOS&#xff08;苹果系统&#xff09;、Android&#xff08;安卓系统&#xff09;及HarmonyOS&#xff08;鸿蒙系统&#xff09;提供防止截屏的方法和示例代码。 在企业内部使用的应用中&…

python学习:浅拷贝与深拷贝详解

copy 一、 & is二、浅拷贝 & 深拷贝(一)、浅拷贝(二)、深拷贝 三、问题 一、’ ’ & ‘is’ ’ 和is是python对象比较常用的两种方式,简单来说,‘ ‘操作符比较对象之间的值是否相等,如 a b 而’is’操作符比较的是对象的身份标识是否相等,即它们是否是同一个…

HNU数据库大作业-世界杯比赛系统

前言 之前做的那个版本bug较多&#xff0c;后进行了大量优化。 此项目是一个前后端分离的项目&#xff0c;前端主要使用htmlcssjs搭建&#xff0c;使用的是layui框架 后端使用php语言&#xff0c;仅实现了简单的查询数据库功能&#xff0c;无法实现多并发查询等复杂情况 数…

jetpack compose 学习(-)

年底了,无聊的时间总是缓慢的,找个事情做一做,打发打发时间,刚好看到jetpack compose 学习学习,毕竟androidStudio 默认创建的项目都带上了这个,学习网站:https://developer.android.com/jetpack/compose/modifiers?hlzh-cn 1. 首先androidStudio创建一个新项目 喜欢kotlin的,…

亚马逊、速卖通自养号测评的安全稳定性与成本优势分析

在跨境电商平台的运营中&#xff0c;买家评价的重要性不言而喻。很多买家在购买产品前都会查看评论&#xff0c;比较同类产品的买家口碑&#xff0c;以做出更明智的购买决策。 因此&#xff0c;测评一直是各大跨境电商平台的一种重要推广方式&#xff0c;测评同时也是很多卖家…

BugKu-Web-Simple_SSTI_1Simple_SSTI_2(浅析SSTI模板注入!)

何为SSTI模块注入&#xff1f; SSTI即服务器端模板注入&#xff08;Server-Side Template Injection&#xff09;&#xff0c;是一种注入漏洞。 服务端接收了用户的恶意输入以后&#xff0c;未经任何处理就将其作为Web应用模板内容的一部分&#xff0c;模板引擎在进行目标编译渲…