Redis——主从复制模式
文章目录
- 1. 引入
- 2. 主从复制模式
- 2.1 概念
- 2.2 配置
- 2.3 原理
- 2.3.1 建立连接阶段
- 2.3.2 命令传播阶段
- 2.3.3 心跳检测机制
- 2.3.4 部分重同步机制
- (1) 主节点通过 复制积压缓冲区 记录写命令
- (2) 主节点通过 复制偏移量 判断从节点是否满足执行部分重同步的条件
- (3) 执行部分重同步操作
- 2.4 优点
- 2.5 缺点
- 3. 总结
1. 引入
随着使用互联网的人数的增多,服务器每秒能处理的请求数量也需要不断增加。为此,传统的单体系统架构变成了分布式的系统架构,单体的中间件变成了中间件的集群。像 MySQL 主从复制的集群模式经常在网络上见到,Redis 也有自己的集群模式,主要分为三种:
- 主从复制模式。
- 哨兵模式。
- 分片集群。
本文主要讲解第一种模式,第二种和第三种模式将会分成两篇文章在之后讲解。
2. 主从复制模式
2.1 概念
在 Redis 集群中,将 Redis 节点分成两种节点——一个主节点 和 多个从节点,规则如下:
- 主节点处理写操作。
- 从节点处理读操作。
- 主节点处理完写操作后,将写操作 异步 发送给所有从节点,从节点接收并执行写操作,以保证主从数据一致。
Redis 主从复制模式的集群形成的结构图如下所示:
通过这种集群模式,得以将读操作和写操作分离,并且把读操作分散到多台 Redis 上,很大程度上增加了每秒处理查询请求的数量。
2.2 配置
对于 Redis 的主从复制模式,无需对主节点配置任何多余信息,主要配置从节点的 redis.conf 文件:
slaveof <master-ip> <master-port>:在<master-ip>处填写主节点的 ip 地址,<master-port>填写主节点 Redis 对外开放的端口号。这个配置让 从节点 知道要从哪个 主节点 进行复制。masterauth <master-requirepass>:如果主节点设置了密码,在<master-requirepass>处填写对应的密码,用于从服务器连接主服务器时的身份验证。
如下配置可以作为 Redis 从节点中 配置主节点信息 的参考:
slaveof 192.168.100.1 6379
masterauth e0cfd72aa80e
如下配置是 Redis 主节点 配置密码信息 的参考:
requirepass e0cfd72aa80e
2.3 原理
2.3.1 建立连接阶段
- 从节点发起同步请求:从节点启动后,会向
redis.conf配置中指定的主节点发送SYNC命令,请求数据同步,开启主从复制流程。 - 主节点响应并准备数据:主节点执行
BGSAVE命令,在后台生成当前数据集对应的 RDB 文件 (在 Redis——持久化 中讲解过 RDB)。- 在
BGSAVE执行期间,主节点可以继续正常处理客户端发来的写请求,不过这些写请求对应的写命令会被暂存到 复制缓冲区 (replication buffer) 中。 - 当
BGSAVE命令执行完成,生成 RDB 文件后,主节点把这个 RDB 文件发送给从节点。
- 在
- 从节点接收并载入数据:从节点接收到主节点发来的 RDB 文件后,使用 RDB 文件,将自身的数据状态恢复到和主节点执行
BGSAVE命令时基本一致的状态。 - 从节点同步产生 RDB 文件期间的数据:将 RDB 文件发送给从节点后,主节点会接着把 复制缓冲区 中暂存的写命令按顺序发送给从节点,从节点再依次执行这些写命令,从而保证从节点的数据状态能和主节点完成
BGSAVE操作时的状态一致。
流程图如下:
2.3.2 命令传播阶段
- 主节点发送写命令:在完成从节点的数据同步后,只要主节点后续接收到客户端的写请求并执行完毕,它就会:
- 首先,将写命令记录到 复制积压缓冲区 (之后会详细讲解) 中。
- 然后,将其以异步的方式发送给所有已经连接的从节点。
- 从节点执行写命令:从节点接收到主节点发来的写命令后,会按照接收到的顺序依次执行这些写命令。通过不断执行主节点传来的写命令,就能时刻保证主从数据一致。
流程图如下:
2.3.3 心跳检测机制
在主从复制的整个过程中,主从节点之间还存在 心跳检测机制 来确保连接的正常和数据的及时同步:
- 从节点会定期向主节点发送
REPLCONF ACK <replication_offset>命令 (其中<replication_offset>表示从节点复制的偏移量,之后会详细讲解),如同 心跳 一样。发送这条信息有两个作用:- 让主节点知道自己处于正常连接状态。
- 让主节点知道自己复制的位置,从而判断自己是否需要 部分重同步 (之后会详细讲解)。
- 主节点根据从节点发来的心跳信息,可以判断从节点的连接情况。如果发现某个从节点长时间没有发送心跳,就可以标记从节点状态为下线,之后就不用再向它发送写指令了。
2.3.4 部分重同步机制
(1) 主节点通过 复制积压缓冲区 记录写命令
主节点在执行完写命令后,会将写命令缓存到 复制积压缓冲区 (replication backlog buffer) 中,这个缓冲区是 先进先出 的,和 队列 一样,目的就是 当从节点由于某些原因 (如网络暂停中断) 与主节点断开连接,又重新连接后,从节点能够通过这些写命令来实现部分重同步,避免进行完整的同步流程。
(2) 主节点通过 复制偏移量 判断从节点是否满足执行部分重同步的条件
在心跳检测时,如果主节点发现从节点的 replication_offset (复制偏移量) 与自身的 replication_offset 相差很多,这时主节点会首先 判断从节点所缺失的那部分写命令是否还保留在复制积压缓冲区中,如果在,则可以进行部分重同步;否则从节点需要发起完整的同步流程。
(3) 执行部分重同步操作
如果确定可以进行部分重同步,主节点会根据从节点当前的 replication_offset ,从复制积压缓冲区中提取出从该偏移量之后的写命令,然后将这些写命令发送给从节点。
从节点接收到主节点发来的这些写命令后,会按照顺序依次执行,执行完后自身的 replication_offset 就会更新,从而跟上主节点的数据同步进度,完成部分重同步过程,使得主从节点的数据再次保持一致,而无需重新进行完整的初始同步 (也就是无需再执行 SYNC 命令去获取 RDB 文件等一系列操作)。
2.4 优点
- 提升读性能:适用于 读多写少 的业务场景。在这种模式下,可以将大量的读请求分配到多个从节点上处理,分担主节点的读负载,使得系统整体能够同时处理更多的请求,提升响应速度和吞吐量。
- 数据冗余与高可用性:通过将数据从主节点复制到多个从节点,实现了数据的冗余备份。若主节点出现故障 (如硬件故障、软件崩溃、网络问题等),可以迅速将某个从节点提升为主节点,继续对外提供服务,减少因主节点故障导致的数据丢失和服务中断风险,在一定程度上保证 Redis 集群的高可用性。
- 方便数据备份与恢复:从节点本身就是主节点数据的副本,相当于自动完成了数据备份工作。在需要恢复数据时,只要从节点的数据状态是可用且完整的,就可以较为方便地利用从节点的数据来进行恢复操作,无需额外复杂的备份流程和工具。
2.5 缺点
- 数据同步延迟:在主节点执行写操作后,数据同步到从节点不是立刻完成的,存在一定的时间延迟。尤其是在高并发写场景下,延迟可能会更加明显,这就可能导致从节点的数据在短期内并非是最新的,出现主从数据不一致的情况,影响业务逻辑的准确性。
- 故障切换复杂:当主节点发生故障时,虽然理论上可以将从节点提升为主节点来继续服务,但在实际操作中,这个故障切换过程并非完全自动和简单。需要人工介入或者借助额外的监控和管理工具来准确判断主节点故障情况,合理选择要升级的从节点,并完成相关配置的调整 (如通知其他从节点新的主节点信息等),否则容易出现各种问题,导致服务中断或者数据不一致等情况。
3. 总结
通过 Redis 的主从复制模式,读操作得以和写操作分离:
- 写操作全部在在主节点上执行,主节点通过传播这些写命令,使得主从数据保持同步。
- 读操作分散到各个从节点上。
除此之外,主从复制模式还通过 心跳检测机制 和 部分重同步机制 保证主从数据的一致性。
通过主从复制模式,增强了 Redis 集群读写操作的吞吐量,并在一定程度上保证了 Redis 集群的高可用性。但是,主从节点之间的数据同步存在延迟,可能导致短暂的数据不一致情况;在主节点故障时,还得运维人员手动选出一个新的主节点并重新配置其它从节点,故障切换比较复杂。
相关文章:
Redis——主从复制模式
文章目录 1. 引入2. 主从复制模式2.1 概念2.2 配置2.3 原理2.3.1 建立连接阶段2.3.2 命令传播阶段2.3.3 心跳检测机制2.3.4 部分重同步机制(1) 主节点通过 复制积压缓冲区 记录写命令(2) 主节点通过 复制偏移量 判断从节点是否满足执行部分重同步的条件(3) 执行部分重同步操作 …...
简历_熟悉缓存高并发场景处理方法,如缓存穿透、缓存击穿、缓存雪崩
系列博客目录 文章目录 系列博客目录1.缓存穿透总结 2.缓存雪崩3.缓存击穿代码总结 1.缓存穿透 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库。 常见的解决方案有两种: 缓存空对…...
阿里云电商平台用户行为分析与人群画像系统设计与实现
通过在阿里云(https://baike.baidu.com/item/%E9%98%BF%E9%87%8C%E4%BA%91/297128)上构建包含数据源层、数据存储层、数据处理层、数据分析层和数据应用层的系统架构,并设计合理的数据模型、ETL流程、数据质量与性能监控机制以及安全与合规性…...
Go语言的 的输入/输出流(I/O Streams)核心知识
Go语言的输入/输出流(I/O Streams)核心知识 前言 Go语言是一种现代编程语言,因其高效性、简洁性及强大的并发支持而受到开发者的喜爱。在开发应用程序时,输入/输出(I/O)操作是一个不可或缺的部分。无论是…...
57.在 Vue 3 中使用 OpenLayers 点击选择 Feature 设置特定颜色
在 Web 开发中,地图应用是非常常见的需求,而 OpenLayers 是一个非常强大的地图库,它提供了丰富的地图操作功能。今天,我们将一起学习如何在 Vue 3 中结合 OpenLayers 使用点击事件来选择地图上的 Feature,并设置特定的…...
数据结构C语言描述8(图文结合)--哈希、哈希冲突、开放地址法、链地址法等实现
前言 这个专栏将会用纯C实现常用的数据结构和简单的算法;有C基础即可跟着学习,代码均可运行;准备考研的也可跟着写,个人感觉,如果时间充裕,手写一遍比看书、刷题管用很多,这也是本人采用纯C语言…...
自动化立体库安全使用管理制度完整版
导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。欢迎大家到本文底部评论区留言。 新书《智能物流系统构成与技术实践》人俱乐部 完整版文件和更多学习资料,请球友到知识星球【智能仓储物流技术研习社】自行下载。 以下是《…...
云打印之拼多多打印组件交互协议
拼多多打印组件交互协议相关介绍如下: 1、打印组件下载地址 http://meta.pinduoduo.com/api/one/app/v1/lateststable?appIdcom.xunmeng.pddprint&platformwindows&subTypemain 2、socket连接端口 如果是http的话,端口是5000 socket new …...
TCP 演进之路:软硬件跷跷板与新征程
今天依旧是与 TCP 相关的一个短评。 先看软硬件间的胶着。晶体管诞生以来,硬件一直在突飞猛进发展,后来这个事被摩尔定律正则化,人们开始可以预测未来,但即便如此,软件依然跟不上来,不过几年,老…...
React最小状态管理Jotai
Jotai 状态管理 1. 简介 Jotai 是一个基于原子 atom 概念的 React 状态管理库,它提供了简单且灵活的方式来管理应用状态, 而且非常轻量, 大厂用的非常多。 JotaiRedux适合单个页面,多次用到的属性适合全局公共属性超级轻量(与use…...
计算机网络 —— 网络编程(TCP)
计算机网络 —— 网络编程(TCP) TCP和UDP的区别TCP (Transmission Control Protocol)UDP (User Datagram Protocol) 前期准备listen (服务端)函数原型返回值使用示例注意事项 accpect (服务端)函数原型返回…...
字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化
字玩FontPlayer开发笔记4 性能优化 首屏加载时间优化 字玩FontPlayer是笔者开源的一款字体设计工具,使用Vue3 ElementUI开发,源代码: github: https://github.com/HiToysMaker/fontplayer gitee: https://gitee.com/toysmaker/fontplayer …...
RabbitMQ案例
1. 导入依赖 <!--AMQP依赖,包含RabbitMQ--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> 发送消息 注入RabbitTemplate Autowired RabbitT…...
智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之13 方案再探之4:特定于领域的模板 之 div模型(完整版)
前景提要 整个“方案再探”篇 围绕着如何将项目附件文档中Part 1 部分中给出的零散问题讨论整理、重组为一个结构化的设计文档。为此提出了讨论题目: 特定于领域的模板--一个三套接的hoc结构 它是本项目actors 的剧本原型。其地位: 祖传代码脚本模板…...
WebRtc02:WebRtc架构、目录结构、运行机制
整体架构 WebRtc主要分为三层: CAPI层:外层调用Session管理核心层:包括视频引擎、音频引擎、网络传输 可由使用者重写视频引擎:编解码器、视频缓存、视频增强音频引擎:编解码器、音频缓存、回音消除、降噪传输&#x…...
数据结构复习 (顺序查找,对半查找,斐波那契查找,插值查找,分块查找)
查找(检索): 定义:从给定的数据中找到对应的K 1,顺序查找: O(n)的从前向后的遍历 2,对半查找,要求有序 从中间开始查找,每次检查中间的是否正确,不正确就…...
el-input输入框需要支持多输入,最后传输给后台的字段值以逗号分割
需求:一个输入框字段需要支持多次输入,最后传输给后台的字段值以逗号分割 解决方案:结合了el-tag组件的动态编辑标签 那块的代码 //子组件 <template><div class"input-multiple-box" idinputMultipleBox><div>…...
C# 枚举格式字符串
总目录 前言 当前文章为 C# 中的格式设置(格式化字符串) 大全 中的一个小章节。 一、概述 1. 基本信息 可以使用 Enum.ToString 方法,新建表示枚举成员的数字值、十六进制值或字符串值的字符串对象。枚举格式说明符不区分大小写。 二、自定义数字格式说明符详解…...
【51单片机-零基础chapter1】
安装软件(配套的有,不多赘述) 1.管理员身份运行keil和破解软件kegen 将CID代码复制粘贴到 一定要管理员方式,不然会error 插入板子 我的电脑,管理 1.如果是拯救者,查看端口,如果没有则显示隐藏 2.苹果不知道,好像不可以 3.其他电脑在"其他设备找" (注:本人在校已…...
记录:导出功能:接收文件流数据进行导出(vue3)
请求接口:一定要加responseType: blob 后端返回数据: api.js export function export() {return request({url: dev/api/export,method: get,responseType: blob,//一定要加}) } vue: import {export} from /api// 导出 const exportTab…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...
es6+和css3新增的特性有哪些
一:ECMAScript 新特性(ES6) ES6 (2015) - 革命性更新 1,记住的方法,从一个方法里面用到了哪些技术 1,let /const块级作用域声明2,**默认参数**:函数参数可以设置默认值。3&#x…...
