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…...
STM32F103+全彩LED屏+音频频谱+智能闹钟:一个DIY多媒体终端的软硬件融合实践
1. 项目背景与核心功能 这个DIY项目的核心目标是将STM32F103微控制器、全彩LED显示屏、音频频谱分析和智能闹钟功能融合在一起,打造一个既实用又炫酷的多媒体终端。我自己在开发过程中发现,这种综合性项目特别适合想要提升嵌入式开发实战能力的朋友&…...
Golang怎么获取当前工作目录_Golang如何用os.Getwd获取程序运行路径【基础】
os.Getwd() 返回进程启动时的工作目录,而非可执行文件所在目录;获取程序自身路径应使用 os.Executable() filepath.Dir(),并用 filepath.Join 拼接路径以确保跨平台兼容性。os.Getwd 返回的是进程启动时的工作目录,不是可执行文件…...
别再对着公式发愁了!手把手教你用CadFEKO搞定一个1.645GHz的矩形喇叭天线仿真
从零开始实战:1.645GHz矩形喇叭天线仿真全流程解析 第一次打开CadFEKO时,那个布满按钮的界面确实让人望而生畏。记得我研究生时期做第一个天线项目,光是找"模型单位设置"就花了半小时。本文将以1.645GHz矩形喇叭天线为例࿰…...
收藏!SaaS小白必看:AI大模型落地实战路线图,从功能堆砌到价值创造
本文分析了SaaS公司在整合AI大模型时应避免“功能堆砌”陷阱,并介绍了三大AI技术路线:Prompt/RAG/微调的特点及适用场景。文章强调SaaSAI产品的成功关键在于技术路线与客户价值的适配,提出了分阶段组合策略,即初创期以提示词为主&…...
别再只跑Demo了!用Fast-ReID训练自定义ReID模型,真正提升你的YoloV5+DeepSORT项目效果
从Demo到实战:基于Fast-ReID打造高精度自定义行人重识别系统 在计算机视觉领域,行人重识别(ReID)技术正逐渐成为智能监控、零售分析和智慧城市等场景中的核心组件。然而,许多开发者在实际项目中常常遇到一个尴尬局面——在演示环境中运行良好…...
贾子元稳定性定理(Kucius Meta-——贾子逆算子(Kucius Inverse Operator, KIO):TMM中的反规则算子(Inverse Rule Operator)定义、实现与应用
贾子元稳定性定理(Kucius Meta-——贾子逆算子(Kucius Inverse Operator, KIO):TMM中的反规则算子(Inverse Rule Operator)定义、实现与应用把“逆向能力”从评价指标 → 生成机制 → 推理算子。以下是可嵌…...
DeerFlow 系列教程 第十五篇 | Guardrails 安全防护与可观测性
DeerFlow 系列教程 第十五篇 本篇教程继续模块四:高级功能与扩展,全面剖析 DeerFlow 的安全防护机制和可观测性体系。我们将深入理解 Guardrails 防护栏的策略执行架构、SandboxAuditMiddleware 的 Bash 命令审计、路径遍历防护与沙箱隔离机制、技能安全扫描、循环检测中间件…...
OpenAI Codex 桌面应用新版本发布:后台执行任务、定时工作等新功能来袭!
OpenAI Codex 新版:解锁后台执行任务新技能今日,OpenAI 的 Codex 桌面应用新版本正式面向用户发布。其中最受瞩目的功能,是它能够在后台的 PC 上执行任务,且不会干扰用户在桌面的操作。通过后台计算机使用功能,Codex 可…...
【PAT甲级真题】- Forwards on Weibo (30)
题目来源 Forwards on Weibo (30) 注意点 下标从 1 开始 题目描述 Weibo is known as the Chinese version of Twitter. One user on Weibo may have many followers, and may follow many other users as well. Hence a social network is formed with followers relations.…...
Artifactory OSS实战:不止于搭建,教你用Gradle插件一键发布Android AAR到私有仓库
Artifactory OSS实战:Gradle插件自动化发布Android AAR全流程指南 当团队开始采用组件化架构时,如何高效管理内部模块的二进制依赖成为关键痛点。想象这样一个场景:你刚完成公司支付SDK 1.0版本的开发,现在需要让其他五个业务团队…...
