Redis架构之主从复制

news2024/9/23 1:26:51

Redis主从架构

        主从集群,实现读写分离

主从数据同步

主从同步流程

  1. slave节点向master节点发送replicaof命令建立连接,随后发送 psync {repID} {offset} 指令,repID表示主节点唯一标识,offset复制偏移量。如果是第一次同步,那么repID是?,offset是-1。即psync ? -1
  2. master节点收到了psync命令后,会响应slave节点并发送 fullresync {repID} {offset} 指令,slave节点会把repID和offset保存下来
  3. master收到 psync {repID} {offset} 指令后,会执行 bgsave 异步命令生成RDB文件,然后把RBD文件发送给slave节点,slave节点收到RDB文件后,会清空内存数据并加载RDB文件到内存中。
  4. master节点生成RDB文件时是异步的,此时master节点是非阻塞的,所以在master节点生成RDB文件,发送RBD文件以及slave节点加载RDB文件的过程中,master节点的写命令会放到缓冲区replication_buffer中,在slave节点加载完RDB文件后,主节点会将replication_buffer的内容发送到slave节点,slave节点会执行replication_buffer中的指令,从而达到主从数据一致。
  5. 如果从节点与主节点发生网络断连,在从节点再次连接后,主节点收到PSYNC命令,会检查从节点提供的repID和offset。
    1. 如果repID匹配且offset之后有新的写命令记录,则主节点选择进行增量同步。主节点会从复制积压缓冲区(repl_backlog_buffer)中找出从节点缺失的命令日志,并将这些日志发送给从节点。从节点接收到命令后更新内存数据,达到与主节点一致的状态。
    2. 如果从节点提供的repID与主节点不匹配,或者offset超出了主节点复制积压缓冲区的范围,此时会进行全量同步

注意:

1、如果master节点传输RDB文件以及slave节点加载RDB文件耗时过长,同时master节点接收的写命令过多,导致replication_buffer复制缓冲区写满被溢出,那么master节点会关闭与slave节点的连接,此时replication_buffer的数据会被清空,然后重新开始全量同步。所以replication_buffer大小需要设置一个合理的值。

2、在主从进行全量rdb后,master会把rdb通信期间收到的新的写命令写入replication_buffer,同时也会把写入rep_backlog_buffer复制积压缓冲区。在从节点与主节点断连的时间中,主节点如果有写命令,会把写入到repl_backlog_buffer缓冲区,如果断连时间过长repl_backlog_buffer可能会被写满,新的命令覆盖掉了旧数据。此时从节点会进行全量复制。(是否全量同步是根据 repId 或 offset 参数去判断)

replication_buffer(复制缓冲区)

通过 client-output-buffer-limit slave 参数设置,当这个值太小会导致主从复制连接断开,master会频繁bgsave生成RDB全量同步,影响redis性能。

语法:

client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>

class:

        Normal:普通的客户端。默认limit 是0,也就是不限制。

        Slaves:从库的复制客户端。默认hard limit是256M,soft limit是64M,soft seconds是60s。

        Pub/Sub:发布与订阅的客户端的。默认hard limit是32M,soft limit是8M,soft seconds是60s。

hard limit:缓冲区大小的硬性限制。

soft limit:缓冲去大小的软性限制。

soft seconds:缓冲区大小达到了(超过)soft limit值的持续时间。

三种默认配置:

client-output-buffer-limit normal 0 0 0

client-output-buffer-limit slave 256mb 64mb 60

client-output-buffer-limit pubsub 32mb 8mb 60

repl_backlog_buffer(复制挤压缓冲区)

通过repl_backlog_size参数设置(在redis中的config配置文件中),默认大小是M

大体算法如下:

每秒产生的命令 乘以((master执行rdb bgsave的时间)+ (master发送rdb到slave的时间) + (slave load rdb文件的时间) ) ,来估算积压缓冲区的大小,repl-backlog-size 值不小于这两者的乘积。

例:

如果主服务器平均每秒产生1 MB的写数据,而从服务器断线之后平均要5秒才能重新连接上主服务器,那么复制积压缓冲区的大小就不能低于5MB。

为了安全起见,可以将复制积压缓冲区的大小设为2*5=10M,这样可以保证绝大部分断线情况都能用增量从而避免全量同步数据。

简述全量同步和增量同步的区别

  • 全量同步:master通过bgsave命令异步将完整的内存数据生成一个RDB文件并发送到slave节点。master在生成RDB文件、传输RDB文件以及slave节点加载RDB文件的耗时中,master如果接收到了新的写命令会记录到replication_buffer缓冲区。在slave加载完RDB文件后,再把replication_buffer中的命令再发送到slave节点
  • 增量同步:slave节点提交repld和offset,master进行判断符合条件后,根据offset偏移量把replication_buffer缓存区中的未发送的命令发送到slave节点

什么时候执行全量同步

  • slave节点第一次请求数据同步时
  • replication_buffer缓存被覆盖时
  • slave节点与master节点发生网络断连,且offset不在repl_backlog_buffer缓冲区范围内

什么时候执行增量同步

  • slave节点断开又恢复,且offsetrepl_backlog_buffer缓冲区范围内

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

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

相关文章

软件测试——Bug篇

什么是BUG 定义&#xff1a; ⼀个计算机bug指在计算机程序中存在的⼀个错误(error)、缺陷(flaw)、疏忽(mistake)或者故障(fault)&#xff0c;这些bug使程序⽆法正确的运⾏。Bug产⽣于程序的源代码或者程序设计阶段的疏忽或者错误。 准确的来说&#xff1a; 1. 当且仅当规格说…

Java面试——Tomcat

优质博文&#xff1a;IT_BLOG_CN 一、Tomcat 顶层架构 Tomcat中最顶层的容器是Server&#xff0c;代表着整个服务器&#xff0c;从上图中可以看出&#xff0c;一个Server可以包含至少一个Service&#xff0c;用于具体提供服务。Service主要包含两个部分&#xff1a;Connector和…

【C语言】“void” 如何在 C 语言中开创无限可能

目录 C语言void关键字详解void关键字的功能和应用详细说明 1. void作为函数返回类型示例代码输出结果 2. void作为函数参数示例代码输出结果 3. void*通用指针示例代码输出结果 4. void与NULL示例代码输出结果 5. void与函数指针示例代码输出结果 6. void的限制和注意事项6.1 不…

AI技术革命对未来就业的影响

一、引言 AI技术革命带来的就业结构变化是双面的&#xff0c;既存在着挑战也蕴含着机遇。过去的几次技术革命例如工业革命和信息技术革命都对就业结构产生了深刻的影响&#xff0c;使一些工作消失&#xff0c;也催生了许多新的工作类型。当前和未来的AI技术发展也必将推动类似…

Vue3 + js-echarts 实现前端大屏可视化

1、前言 此文章作为本人大屏可视化项目的入门学习笔记&#xff0c;以此作为记录&#xff0c;记录一下我的大屏适配解决方案&#xff0c;本项目是基于vite Vue3 js less 实现的&#xff0c;首先看ui&#xff0c;ui是网上随便找的&#xff0c;代码是自己实现的&#xff0c;后面…

昇思25天学习打卡营第XX天|基于MindSpore通过GPT实现情感分类

其实数据集和模型的其他大平台接口的&#xff0c;感觉不用非包在自己包里 %env HF_ENDPOINThttps://hf-mirror.com mindnlp.transformers 库中的 GPTTokenizer 类来加载和处理与GPT&#xff08;生成式预训练变换器&#xff09;模型兼容的分词器&#xff0c;并添加特殊的控制标…

Vmware创建centos后使用yum报错(网络连接正常)

安装完centos虚拟机后&#xff0c;yum报错信息如下&#xff1a; 快速解决方法 删除原有yum文件 rm -f /etc/yum.repos.d/CentOS-Base.repo 然后重新下载阿里的&#xff1a; wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 清理…

ctfshow-web入门-sql注入(web171-web175)

目录 1、web171 2、web172 3、web173 4、web174 5、web175 1、web171 单引号测一下&#xff0c;报错 -- 闭合后回显正常 也可以用 # &#xff0c;不过需要 URL 编码 成功闭合之后&#xff0c;先判断下字段数&#xff1a; 1 order by 3-- 3 的时候正常 4 的时候报错&am…

MyBatis 动态代理和映射器

一、映射器简介 1.什么是mapper动态代理? 在接口中有方法的返回值定义&#xff0c;参数的定义&#xff0c;方法名&#xff0c;在sqlMapper.xml 中也对应这接口给予了赋值&#xff0c; 这时候dao的实现类就显得多余&#xff0c;这是Mybatis可以帮助我们自动产生实现类&#xf…

H5+JS 4096小游戏

主要实现 1.使用WASD或方向按钮控制游戏 2.最高值4096&#xff0c;玩到4096视为胜利 3.随机生成2、4、8方块 4.移动方块 5.合并方块 JS代码干了什么 初始化游戏界面&#xff1a;创建游戏板和控制按钮。 定义游戏相关变量&#xff1a;如棋盘大小、棋盘状态、得分等。 初始化棋…

【MATLAB源码】机器视觉与图像识别技术实战示例文档---鱼苗面积预测计数

系列文章目录 第一篇文章&#xff1a;【MATLAB源码】机器视觉与图像识别技术—视觉系统的构成(视频与图像格式转换代码及软件下载) 第二篇文章&#xff1a;【MATLAB源码】机器视觉与图像识别技术(2)—图像分割基础 第三篇文章&#xff1a;【MATLAB源码】机器视觉与图像识别技术…

三星半导体业务动态:3nm技术及AI/HPC销售展望

#### 第二季度财报概览 7月31日&#xff0c;三星公布了2024年第二季度的财务报告&#xff0c;显示合并营业收入为74.07万亿韩元&#xff0c;营业利润为10.44万亿韩元&#xff08;约75亿美元&#xff09;。其中&#xff0c;DS&#xff08;设备解决方案&#xff09;部门的合并营…

深入探讨 Docker 容器文件系统

引言 随着云计算和微服务架构的兴起&#xff0c;Docker 容器技术迅速成为开发和运维人员的首选工具。Docker 容器不仅提供了一种轻量级的虚拟化方式&#xff0c;还简化了应用程序的部署和管理。在众多的技术细节中&#xff0c;Docker 容器文件系统是一个至关重要的组成部分。本…

Harmony学习(三)------ArkUI(3)

1.模版字符串 let name:string 模版字符串 let age:number 18 console.log(字符串:,${name}和${age})2.字符串和数字互相转换 //字符串转数字 let str1:string 1.1 console.log(转换,Number(str1)) //output: 1.1 console.log(转换,parseInt(str1)) //output: 1 conso…

笔记:VGGnet的实现

本文为B站UP 霹雳吧啦Wz 图片分类课程学习笔记&#xff0c;用于记录学习历程和个人复习 程序共分为三部分&#xff1a;model,train,predict。model.py用于存放模型&#xff0c;train.py用于存放训练时的程序&#xff0c;predict.py用于存放预测的程序&#xff0c;vgg16Net.pth…

从技术博客到个人 IP 矩阵:全面攻略与实战示例

文章目录 摘要引言创建博客选择平台设计和布局 内容规划明确目标受众设定内容方向制定发布计划 SEO 优化关键词研究内链和外链元标签优化 社交媒体推广选择社交平台制定推广策略 可运行的 Demo 代码模块QA 环节问&#xff1a;如何增加博客的曝光度&#xff1f;问&#xff1a;如…

使用 ChatGPT 检测媒体偏见的潜力和局限性

概述 随着数字时代的到来&#xff0c;信息瞬间传遍全球&#xff0c;但其中也不乏各种偏见。媒体偏见"&#xff0c;即对某些观点的选择性报道&#xff0c;会影响人们对某一事件或问题的看法&#xff0c;并对公众舆论产生重大影响。事实上&#xff0c;许多人都认为主要媒体…

国内本地化OCSP服务的SSL证书:提升安全与效率的新选择

在数字化时代&#xff0c;网络安全成为企业运营和用户体验的重要基石。HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;作为一种安全的网络协议&#xff0c;通过SSL&#xff08;Secure Sockets Layer&#xff09;加密技术&#xff0c;保障了数据传输的机密性…

网络协议二 : 使用Cisco Packet Traceer工具模拟网络环境,集线器,网桥,交换机,路由器,MAC,IP,同一网段,子网掩码,子网划分

1. 安装 Cisco Packet Tracer baidu 网盘地址&#xff0c;感谢大神分享 安装&#xff0c;破解&#xff0c;中文化&#xff0c;都有说明&#xff0c;建议使用7.x的那个版本&#xff0c;感觉比8.x的翻译要完整一点 https://pan.baidu.com/s/18iWBOfhJJRhqgQqdNQcfMQ?pwddcch#…

【考研数学】概率论中集合间的运算图示

今天要给大家分享的笔记是&#xff1a;《概率论中的4种“集”&#xff1a;交集、并集、差集、补集》&#xff1a;