当前位置: 首页 > news >正文

Redis-主从架构

主从架构

  • 主从架构
    • 什么是主从架构
      • 基本架构
    • 复制机制的工作原理
      • 1. 全量复制(Full Synchronization)
      • 2. 部分复制(Partial Synchronization)
      • 3. PSYNC2机制(Redis 4.0+)
    • 主从架构的关键技术细节
      • 1. 复制积压缓冲区(Replication Backlog)
      • 2. 复制偏移量(Replication Offset)
      • 3. 主节点ID(Run ID)
    • 什么是PSYNC2
      • 核心问题
      • 技术实现要点
      • 实际价值
      • 总结
      • PSYNC2机制的局限性
    • 主从模式有什么缺点

主从架构

什么是主从架构

Redis主从架构(Master-Slave Architecture)本质上是一种数据复制模型,它通过将数据从主节点复制到一个或多个从节点,实现数据冗余、负载分担和高可用性。

基本架构

       +-------------+|   Master    ||  (写操作)   |+------+------+|| 数据复制|+------v------+     +-------------+     +-------------+|   Slave 1   |---->|   Slave 2   |---->|   Slave 3   ||  (只读)     |     |  (只读)     |     |  (只读)     |+-------------+     +-------------+     +-------------+

在这种结构中有三个角色:

  • 主节点(Master):接收写操作,执行数据变更
  • 从节点(Slave):从主节点复制数据,提供读服务
  • 复制流:数据变更从主节点流向从节点

复制机制的工作原理

Redis主从复制经历了三代演进,分别是SYNC机制、PSYNC机制和PSYNC2机制,每一代都解决了前一代的关键问题:

1. 全量复制(Full Synchronization)

当从节点首次连接主节点或复制出现问题需要重新同步时,会触发全量复制:

+--------+                  +--------+
| Master |                  | Slave  |
+----+---+                  +---+----+|                          ||      PSYNC/SYNC          ||<--------------------------||                          ||      FULLRESYNC          ||------------------------->||                          ||      RDB文件传输         ||------------------------->||                          |

具体步骤:

  1. 从节点发送PSYNC/SYNC命令
  2. 主节点执行BGSAVE生成RDB文件
  3. 主节点将RDB文件发送给从节点
  4. 从节点清空自身数据,加载RDB文件
  5. 主节点将缓冲区中的写命令发送给从节点
  6. 开始持续复制过程

其主要缺点是网络中断后必须重新全量同步,对于大型数据集效率极低。
我曾在一个16GB的Redis实例上测试,全量同步需要约12分钟,期间系统负载增加300%。

2. 部分复制(Partial Synchronization)

部分复制,用于处理短暂网络中断后的恢复:

+--------+                  +--------+
| Master |                  | Slave  |
+----+---+                  +---+----+|                          ||      PSYNC <runid> <offset>|<--------------------------||                          ||      CONTINUE            ||------------------------->||                          ||      部分命令传输        ||------------------------->||                          |

工作原理:

  1. 主节点维护一个复制积压缓冲区(replication backlog)
  2. 从节点断开重连后,发送PSYNC命令,包含主节点ID和复制偏移量
  3. 如果偏移量在积压缓冲区范围内,主节点回复CONTINUE
  4. 然后主节点只发送从节点缺失的部分数据

这大大减少了短暂网络中断导致的全量同步,但在复杂拓扑结构下仍有局限。

3. PSYNC2机制(Redis 4.0+)

Redis 4.0引入的增强版部分复制,支持更灵活的复制拓扑:

+--------+     +--------+     +--------+
| Master |---->| Slave1 |---->| Slave2 |
+--------+     +--------+     +--------+

核心改进在于:

  • 引入复制ID和复制历史记录,支持复杂拓扑下的部分复制
  • 支持级联复制中任意节点断开后的部分同步
  • 优化了复制协议效率,减少了约40%的网络传输
  • 支持在主从切换等拓扑变更场景下的部分同步

之前测试全量同步,后面升级到PSYNC2后,主从切换时间从15分钟减少到了2分钟,很夸张的提升了.
这三代复制机制的演进体现了Redis在保持简单性的同时不断提升复制效率和可靠性的设计哲学。"

主从架构的关键技术细节

1. 复制积压缓冲区(Replication Backlog)

+---+---+---+---+---+---+---+---+
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |  ... 命令序列
+---+---+---+---+---+---+---+---+^                   ^|                   |tail                head

"复制积压缓冲区(replication backlog)是Redis部分复制的核心机制,它本质上是一个固定大小的环形缓冲区(ring buffer),由主节点维护。

  • 环形缓冲区,默认大小1MB(可配置)
  • 存储最近执行的写命令
  • 用于支持部分复制
  • 配置参数:repl-backlog-size

工作原理:

  • 主节点将每个写命令同时写入复制积压缓冲区和从节点
  • 缓冲区以偏移量(offset)标记每个命令的位置
  • 从节点断开重连后,发送自身的复制偏移量
  • 主节点检查该偏移量是否在缓冲区范围内:
    • 如果在范围内,执行部分复制(CONTINUE)
    • 如果不在范围内,执行全量复制(FULLRESYNC)

复制积压缓冲区的合理配置是Redis主从架构稳定性的关键因素之一,值得投入时间进行精细调优。
复制积压缓冲区大小应该至少能容纳从节点可能断开的最长时间内产生的所有写命令。计算公式为:
repl-backlog-size = 写入速率(bytes/s) × 预期最大断开时间(s) × 安全系数(1.5-2)
原本设置的1MB默认值导致频繁全量同步。通过监控发现:

  • 平均写入速率:2MB/秒
  • 网络偶发中断:最长90秒
    计算得出理想大小:2MB/s × 90s × 2 = 360MB
    将参数调整为512MB后,全量同步次数从每天20-30次降至每月1-2次,系统稳定性显著提升。

2. 复制偏移量(Replication Offset)

  • 主节点和从节点各自维护一个复制偏移量
  • 表示复制的进度位置
  • 用于检测复制是否一致
  • 可通过INFO replication命令查看

3. 主节点ID(Run ID)

  • 每个Redis实例启动时生成的40字节随机ID
  • 用于标识复制关系中的主节点
  • 从节点通过ID判断是否与之前连接的是同一主节点

什么是PSYNC2

“PSYNC2是Redis 4.0引入的增强版部分复制机制,主要解决了复杂拓扑结构下的复制效率和稳定性问题。”

核心问题

“它主要解决了三个核心问题:
首先,解决了级联复制中的’多米诺骨牌’效应。在旧版本中,如果中间从节点断开重连,会导致整个复制链上的所有下游从节点都需要全量同步,消耗大量资源。
其次,优化了复制拓扑变更场景。以前主从切换后,从节点总是需要全量同步,即使数据差异很小。
第三,提高了复制协议效率,改进了复制状态识别机制,使复制过程更加稳定和高效。”

技术实现要点

"PSYNC2通过几个关键技术实现这些改进:

  1. 引入了复制ID和复制历史记录,使从节点能够更准确地判断是否可以进行部分同步。
  2. 增强了复制状态跟踪机制,支持在复杂网络环境下的状态恢复。
  3. 优化了复制协议,减少了传输开销,提高了复制效率。"

实际价值

“在实际应用中,PSYNC2显著提高了Redis集群的稳定性和性能。例如,在我负责的一个项目中,主从切换时间从原来的15分钟减少到了不到2分钟,系统可用性得到了极大提升。”

总结

“总之,PSYNC2是Redis复制机制的重要进步,为构建大规模、高可用的Redis集群提供了更坚实的基础。”

PSYNC2机制的局限性

  • 首先,它仍然依赖复制积压缓冲区,如果网络中断时间过长超出缓冲区容量,依然会触发全量同步。
  • 其次维护复制历史记录需要额外内存资源,在资源受限环境中需要权衡。在极端情况下,如果主节点频繁切换,从节点可能需要频繁重建复制历史,这会增加主节点的负担。

主从模式有什么缺点

主要缺点有:

  • 高可用问题:主从架构存在单点故障风险。主节点宕机会导致写服务完全不可用,且没有自动故障转移机制,需要人工干预
  • 数据一致性问题:由于Redis采用异步复制机制,存在数据丢失风险。主节点崩溃时,已接收但未同步到从节点的数据会永久丢失。
  • 写性能问题:主节点写入压力大时,从节点可能出现延迟,影响读服务性能。
    优点:
  • 成本低:使用普通服务器即可搭建主从架构,成本较低。
  • 简单易用:配置和管理相对简单,适合中小规模应用。
  • 读性能提升:主节点负责写入,从节点负责读取,可以显著提升读服务性能。

相关文章:

Redis-主从架构

主从架构 主从架构什么是主从架构基本架构 复制机制的工作原理1. 全量复制&#xff08;Full Synchronization&#xff09;2. 部分复制&#xff08;Partial Synchronization&#xff09;3. PSYNC2机制&#xff08;Redis 4.0&#xff09; 主从架构的关键技术细节1. 复制积压缓冲区…...

Java数据结构第二十期:解构排序算法的艺术与科学(二)

专栏&#xff1a;Java数据结构秘籍 个人主页&#xff1a;手握风云 目录 一、常见排序算法的实现 1.1. 直接选择排序 1.2. 堆排序 1.3. 冒泡排序 1.4. 快速排序 一、常见排序算法的实现 1.1. 直接选择排序 每⼀次从待排序的数据元素中选出最小的⼀个元素&#xff0c;存放在…...

inkscape裁剪svg

参考https://blog.csdn.net/qq_46049113/article/details/123824888&#xff0c;但是上个博主没有图片&#xff0c;不太直观&#xff0c;我补上。 使用inkscape打开需要编辑的图片。 在左边导航栏&#xff0c;点击矩形工具&#xff0c;创建一个矩形包围你想要保留的内容。 如果…...

类加载器加载过程

今天我们就来深入了解一下Java中的类加载器以及它的加载过程。 一、什么是类加载器&#xff1f; 在Java中&#xff0c;类加载器&#xff08;Class Loader&#xff09;是一个非常重要的概念。它负责将类的字节码文件&#xff08;.class文件&#xff09;加载到Java虚拟机&#x…...

Git基础之基本操作

文件的四种状态 Untracked&#xff1a;未追踪&#xff0c;如新建的文件&#xff0c;在文件夹中&#xff0c;没有添加到git库&#xff0c;不参与版本控制&#xff0c;通过git add将状态变为staged Unmodify&#xff1a;文件已入库&#xff0c;未修改&#xff0c;即版本库中的文件…...

简单的 Python 示例,用于生成电影解说视频的第一人称独白解说文案

以下是一个简单的 Python 示例&#xff0c;用于生成电影解说视频的第一人称独白解说文案。这个示例使用了 OpenAI 的 GPT 模型&#xff0c;因为它在自然语言生成方面表现出色。 实现思路 安装必要的库&#xff1a;使用 openai 库与 OpenAI API 进行交互。设置 API 密钥&#…...

[Pycharm]创建解释器

仅以此文章来记录自己经常脑子抽忘记的地方 有时候我们在建好了一个项目以后&#xff0c;想要更换解释器。以新建conda解释器为例。 一、conda解释器 1.选择setting 2.选择Add Local Interpreter 3.type选则conda。如果你之前已经有了conda环境&#xff0c;和我一样选择了Gen…...

在 k8s中查看最大 CPU 和内存的极限

在 Kubernetes&#xff08;k8s&#xff09;中&#xff0c;你可以从不同层面查看最大 CPU 和内存的极限&#xff0c;下面为你详细介绍从节点和集群层面查看的方法。 查看节点的 CPU 和内存极限 节点的 CPU 和内存极限是指单个节点上可分配的最大资源量&#xff0c;可通过以下几…...

【Python】为什么要写__init__.py

文章目录 PackageA(__init__特性)应该往__init__.py里放什么东西&#xff1f;1、包的初始化2、管理包的公共接口3、包的信息 正常我们直接导入就可以执行&#xff0c;但是在package的时候&#xff0c;有一种__init__.py的特殊存在 引入moduleA.py&#xff0c;执行main.py&…...

【IPFS应用开发】IPFS播放器-上传助手

本系列文章是针对 https://blog.csdn.net/weixin_43668031/article/details/83962959 内容的实现所编写的。开发经历包括思考过程、重构和推翻重来。 基于IPFS的视频播上传助手发布 起源一、优势:二、劣势:三、未来展望:上传助手Demo版本发布公告欢迎体验!立即体验:http:/…...

单细胞多数据集整合和去除批次效应教程,代做各领域生信分析

单细胞多数据集整合和去除批次效应教程 每个数据集的数据分别单独进行读取单细胞数据构建Seurat分析对象 读取各种来源的单细胞数据构建Seurat分析对象的教程 做这一步的时候可以查看我这篇写的非常详细的教程文章&#xff1a; 【腾讯文档】单细胞分析步骤1读取各种来源格式…...

Windows控制台函数:移动光标位置函数SetConsoleCursorPosition()

目录 什么是 SetConsoleCursorPosition&#xff1f; 它长什么样&#xff1f; 什么是 COORD&#xff1f; 怎么用它&#xff1f; 它有什么用&#xff1f; 跟 C 标准库有什么不一样&#xff1f; 注意事项 再试一个有趣的例子 什么是 SetConsoleCursorPosition&#xff1f;…...

MyBatis-Plus 注解大全

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 MyBatis-Plus 注解大全 MyBatis-Plus 是基于 MyBatis 的增强工具&#xff0c;通过注解简化了单表 CRUD 操作和复杂查询的配置。以下是常用注解的分类及详细说…...

Redis基础之基础概念

NoSQL数据库的优点 1.直接减少CPU与IO压力&#xff0c;是直接通过内存来读取的 2.可以直接作为缓存使用&#xff0c;减少IO操作 如果我们在请求中需要来传递数据&#xff0c;使用NoSQL可以来进行数据的直接存储和读取&#xff0c;从而来减少CPU与IO压力 或者是如果一些数据较为…...

Django小白级开发入门

1、Django概述 Django是一个开放源代码的Web应用框架&#xff0c;由Python写成。采用了MTV的框架模式&#xff0c;即模型M&#xff0c;视图V和模版T。 Django 框架的核心组件有&#xff1a; 用于创建模型的对象关系映射为最终用户设计较好的管理界面URL 设计设计者友好的模板…...

热图回归(Heatmap Regression)

热图回归(Heatmap Regression)是一种常用于关键点估计任务的方法,特别是在人体姿态估计中。它的基本思想是通过生成热图来表示某个关键点在图像中出现的概率或强度。以下是热图回归的主要特点和工作原理: 主要特点 热图表示: 每个关键点对应一个热图,热图中的每个像素值…...

SpringSecurity认证授权完整流程

SpringSecurity认证流程&#xff1a;loadUserByUsername&#xff08;&#xff09;方法内部实现。 实现步骤&#xff1a; 构建一个自定义的service接口&#xff0c;实现SpringSecurity的UserDetailService接口。建一个service实现类&#xff0c;实现此loadUserByUsername方法。…...

MongoDB用户管理和复制组

用户管理 1、建用户时&#xff0c;use到的库就是此用户的验证库 2、登录时必须明确指定验证库才能登录 3、通常管理员用的验证库是admin&#xff0c;普通用户的验证库一般是所管理的库设置为验证库 4、如果直接登录到数据库&#xff0c;不进行use&#xff08;示例&#xff…...

【Android】setText调用导致的悬浮窗抖动问题

在Android13中&#xff0c;有这么一个bug&#xff0c;写一个可以拖到的悬浮窗&#xff0c;这个悬浮窗里有TextView&#xff0c;在拖到某个位置后&#xff0c;再调用TextView的setText方法&#xff0c;会发现出现了一个窗口动画&#xff0c;悬浮窗跳到了起始位置&#xff0c;从开…...

【从零开始学习计算机科学】数字逻辑(四)数字系统设计

【从零开始学习计算机科学】数字逻辑(四)数字系统设计 数字系统设计硬件描述语言 HDL(Hardware Description Language)Verilog HDL 的起源与发展HDL 软核、固核和硬核的重用HDL 的应用数字系统设计实现数字系统设计 一个数字集成电路的可以从不同的层次(系统级、算法级、…...

64_《智能体微服务架构企业级实战教程》授权与认证之授权认证集成测试

前言 配套视频教程: 在 Bilibili课堂、CSDN课程、51CTO学堂 同步发售,提供:源码+部署脚本+文档。 bilibili课堂视频教程:智能体微服务架构企业级实战教程_哔哩哔哩_bilibili CSDN课程视频教程:智能体微服务架构企业级实战教程_在线视频教程-CSDN程序员研修院 51CTO学堂…...

Win10系统清理避坑指南:你的BAT脚本真的安全吗?盘点那些不能乱删的文件

Win10系统清理避坑指南&#xff1a;BAT脚本安全操作手册每次看到那些号称"一键清理系统垃圾"的BAT脚本在技术论坛被疯狂转发&#xff0c;我的工程师朋友老张就会忍不住摇头。上周他刚帮一位设计师修复了崩溃的Photoshop——原因正是某个清理脚本删除了Adobe的临时工作…...

中兴光猫终极管理指南:解锁工厂模式与Telnet权限的实战教程

中兴光猫终极管理指南&#xff1a;解锁工厂模式与Telnet权限的实战教程 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 掌握中兴光猫的设备管理和权限获取能力是网络管理员和技术爱好者…...

告别数据饥荒:用PyTorch手把手实现原型网络(Prototypical Networks)做电影评论情感分类

告别数据饥荒&#xff1a;用PyTorch手把手实现原型网络做电影评论情感分类 在自然语言处理领域&#xff0c;情感分析一直是热门研究方向&#xff0c;但现实中的开发者常面临一个尴尬困境&#xff1a;标注数据太少。传统深度学习方法动辄需要成千上万的标注样本&#xff0c;而实…...

破解材料数据荒:合成数据与随机森林预测聚合物阻燃性能

1. 项目概述与核心挑战在材料研发领域&#xff0c;尤其是涉及公共安全的聚合物阻燃性研究&#xff0c;传统实验方法正面临巨大瓶颈。想象一下&#xff0c;你是一位材料工程师&#xff0c;需要设计一种用于高铁内饰或高层建筑电缆护套的新型聚合物&#xff0c;其阻燃性能必须满足…...

巨量投放总结

巨量商务管理平台 &#xff1a; https://business.oceanengine.com 巨量广告投放平台&#xff1a; https://ad.oceanengine.com 商务管理平台 账户 广告组 计划 广告投放平台 层级关系: 广告组 -> 计划 -> 创意 对应FB: 系列 - > 广告组 -> 广告...

CUDA并行计算与FSR框架优化实践

1. CUDA并行计算与FSR框架概述在GPU加速计算领域&#xff0c;CUDA&#xff08;Compute Unified Device Architecture&#xff09;作为NVIDIA推出的并行计算平台和编程模型&#xff0c;已经成为高性能计算的事实标准。其核心设计理念是将计算任务分解为网格&#xff08;Grid&…...

179个核心职位,50个公司分类,中国大模型产业全栈

最后 对于正在迷茫择业、想转行提升&#xff0c;或是刚入门的程序员、编程小白来说&#xff0c;有一个问题几乎人人都在问&#xff1a;未来10年&#xff0c;什么领域的职业发展潜力最大&#xff1f; 答案只有一个&#xff1a;人工智能&#xff08;尤其是大模型方向&#xff09;…...

Godot 4.2 + C# 避坑指南:手把手教你打包发布你的第一个2D游戏到Steam

Godot 4.2 C# 避坑指南&#xff1a;从开发到Steam发布的完整实战手册当你终于完成心爱的2D游戏开发&#xff0c;准备向全世界展示你的作品时&#xff0c;打包发布这个看似简单的环节往往会成为独立开发者最大的噩梦。特别是使用Godot 4.2搭配C#的项目&#xff0c;从导出设置到…...

如何用免费工具解锁QQ音乐、网易云音乐等加密格式:3分钟解决音乐播放限制

如何用免费工具解锁QQ音乐、网易云音乐等加密格式&#xff1a;3分钟解决音乐播放限制 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web…...