Redis系统学习(高级篇)-Redis主从集群

目录

一、搭建主从集群

二、主从数据同步的原理

三、repl_backlog原理

四、主从同步优化

五、小结


一、搭建主从集群

为了提高高并发,主从集群是很有必要的,因为这样可以实现读写分离,主节点负责写,从节点就只负责读,配置多个从节点,就可以像多个从节点发送请求,大大的提高了并发量

在从节点中 使用 slave/replicaof 主机ip 端口 指定好主节点位置 就可以了

二、主从数据同步的原理

全量同步

就是当第一次同步的时候,需要将整个的rdb发送给从节点

在发送rdb的过程中,可能主节点又有新的请求 又来了新的数据 此时就将这些数据可以放到repl_backlog中记录rdb期间的所有命令,最后将这些命令发给从节点 从节点执行接收到的命令实现主从节点数据的同步

它的大致流程分为三个阶段:

第一阶段:主要是建立通道

1. 从节点执行replicaof命令,与主节点建立连接

2. 像主节点发送请求,请求数据同步

3. 到底是不是第一次同步呢?需要检测一下

判断是否是第一次同步

4. 是第一次,则向从节点返回主节点版本信息  主要就是Replication Id 数据集标记

第二阶段:核心步骤,主节点生成rdb,发给从节点 从节点实现数据同步

1. 主节点执行bgsave命令,生成rdb 

在生成rdb期间,可能会有新的请求发给主节点,主节点将这期间的所有命令放到repl_backlong中

2. 主节点发送rdb给从节点 

3. 从节点清空本地数据,加载发过来的rdb文件

第三阶段:主要是补充一些操作,防止丢失掉一些数据 达到真正的同步

1. 主节点发送repl_backlog到从节点中  从节点接收到执行里面的命令

这里到底是如何判断是否是第一次同步呢?

就是通过Replication Id实现的,如果检查发现主从不一样,说明从节点是第一次连接到主节点,是第一次同步

同步期间两个参数重要:

1.Replication Id 判断是否是第一次

2. offset  偏移量   记录主从节点当前执行到那里了  可以利用它来就知道主从同步的进度如何了。如果它两差值为0 那么说明数据完全同步  

完整流程简要描述:

- slave节点请求增量同步
- master节点判断replid,发现不一致,拒绝增量同步
- master将完整内存数据生成RDB,发送RDB到slave
- slave清空本地数据,加载master的RDB
- master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave
- slave执行接收到的命令,保持与master之间的同步

 

增量同步

只有在第一次的时候才全量同步,全量同步的成本太高了(因为要整个发送rdb文件),之后无特殊情况是进行增量同步

大致分为两个阶段:

第一阶段:判断能否进行增量同步

1. 从节点发送psync replid offset  给主节点 请求增量同步

2. 判断replid是否一致

3. 不是第一次 主节点回复 continue

第二阶段

1. 主节点 去repl_backlog中获取到offset后的数据

2. 主节点发送offset之后的命令

3. 从节点接收到命令,执行命令

关键就是依靠offset知道它两的差值来就知道主节点到底还需要向从节点发哪些数据了

三、repl_backlog原理

 其实就是一个数组,一个环形数组 通过主从节点各自的offset记录数据位置 

从节点追赶主节点,知道它两的差距

然后主节点只需向从节点发送这些差距数据即可

这里的红色部分就是差距部分

这里会有一种情况就是当这个环形数组被填满的时候,如果说它量的差距已经是达到这个环的容量了,如果此时主节点仍然写新的数据,那么势必就会新的数据会覆盖点两者的差距前面的部分,导致需要同步给从节点的数据发生丢失  

 

那么现在就只能全量同步了,不然会还继续同步的话,会丢失掉一些数据 

四、主从同步优化

这个可以在预防上面说,也可以在已经发生了如何解决上面说:

预防:

首先如果是第一次,那么可以:

1. 在master中配置repl-diskless-sync yes启用无磁盘复制,避免全量同步时的磁盘IO。

如果是增量同步:

2. 如果说从节点就是慢,没办法的话,那么就干脆增大repl_backlog的大小。使之难以全量同步

总体:

1. 我让从节点不要占用过多的内存,减少RDB导致的过多的磁盘IO 

其实就是减少从节点的阻塞时间,从而能够快速的进行同步,尽可能的减小它两差距 避免执行全量同步

 2. 减少主节点的压力,不要让主节点下面有过多的slave 可以采用"主从从"的链式结构

五、小结

1. 简述全量同步和增量同步区别?

  • 全量同步:master将完整内存数据生成RDB,发送RDB到slave。后续命令则记录在repl_baklog,逐个发送给slave。

  • 增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave

2. 什么时候执行全量同步?

  • slave节点第一次连接master节点时

  • slave节点断开时间太久,repl_baklog中的offset已经被覆盖时

3. 什么时候执行增量同步?

  • slave节点断开又恢复,并且在repl_baklog中能找到offset时

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

diffusers-Load pipelines,models,and schedulers

https://huggingface.co/docs/diffusers/using-diffusers/loadinghttps://huggingface.co/docs/diffusers/using-diffusers/loading 有一种简便的方法用于推理是至关重要的。扩散系统通常由多个组件组成,如parameterized model、tokenizers和schedulers&#xff0c…

BEM:css命名规范

BEM BEM(Block-Element-Modifier),块、元素、修饰符,是一种CSS命名规范,旨在前端开发中创建可重用组件和代码共享的方法,使样式易于扩展,易于维护,易于理解 规范: 1、块(Block&am…

华为防火墙 配置 SSLVPN

需求: 公司域环境,大陆客户端居家办公室需要连到公司域,这里可以在上海防火墙上面开通SSLVPN,员工就可以透过SSLVPN连通上海公司的内网,但是由于公司域控有2个站点,一个在上海,一个在台北&…

关于docker网络实践中遇到的问题

1.禁用docker自动修改iptables规则 查看docker.service文件/usr/lib/systemd/system/docker.service 默认在宿主机部署容器,映射了端口的话,docker能自己修改iptables规则,把这些端口暴露到公网。 如果要求这些端口不能暴露到公网&#xf…

11.1~11.2双端口RAM(报错复盘,一些理解(循环,阻塞非阻塞),三目运算符解决使能端)

双端口RAM 分别用于读写数据,同时进行 当读使能端有效时可以读出来数据 当写使能端有效时可以覆写数据 读写并行操作 报错 1.reg必须在always里 这个不能assign,因为reg型不能assign,单端口的那个可以assign是因为其定义为了wire型,就不…

Cgroups定义及验证

sudo lsb_release -a可以看到操作系统版本是20.04,sudo uname -r可以看到内核版本是5.4.0-156-generic。 Linux Cgroups 的全称是 Linux Control Group。它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带…

Vector CANape 21安装

系列文章目录 文章目录 系列文章目录简介下载 Vector CANape 21 简介 CANape基础操作介绍:工程创建,测量,标定,离线分析操作。 下载 Vector CANape 21 如下是Vector CANape21的下载安装步骤: https://www.vector.co…

题号1575 C.难度排名 (并查集知识点)

题目: 样例1: 输入 1 4 3 1 4 2 4 3 4 输出 No 样例2: 输入 1 4 2 1 3 2 3 输出 Yes 思路: 这题,有两种情况是由矛盾的。 第一种情况:当前题号存在大于两个题号的相连,情况是矛盾的&#x…

关于微软文本转语音(语音合成)的一些坑

1. 单个音频时长限制10分钟 文档地址 2. 多人配音SSML 每次请求 <voice> 标签只能最大50个&#xff0c;参考 #1 3. SDK 在 linux 环境下 报错&#xff1a;gcc 软件无法加载 4. 语音品质问题 使用 SDK 生成的音频声音很差&#xff0c;默认音频流格式为 WAV&#xf…

Android 复杂UI界面分模块解耦的一次实践

一、复杂UI页面开发的问题 常见的比较复杂的UI界面&#xff0c;比如电商首页&#xff0c;我们看看某电商的首页部分UI&#xff1a; 上面是截取的首页部分&#xff0c;如果这个首页如果不分模块开发会遇到哪些问题&#xff1f; 开发任务不方便分割&#xff0c;一个人开发的话周…

【UE5 Cesium】actor随着视角远近来变化其本身大小

效果 步骤 1. 首先我将“DynamicPawn”设置为默认的pawn类 2. 新建一个父类为actor的蓝图&#xff0c;添加一个静态网格体组件 当事件开始运行后添加一个定时器&#xff0c;委托给一个自定义事件&#xff0c;每2s执行一次&#xff0c;该事件每2s获取一下“DynamicPawn”和acto…

《算法通关村—如何使用中序和后序来恢复一颗二叉树》

《算法通关村—如何使用中序和后序来恢复一颗二叉树》 中序&#xff1a;3 4 8 6 7 5 2 1 10 9 11 15 13 14 12 后序&#xff1a;8 7 6 5 4 3 2 10 15 14 13 12 11 9 1 通过后续遍历我们知道根节点是1&#xff0c;通过知道根节点是1&#xff0c;我们就可以从中序序列知道那些 …

材质之选:找到适合你的地毯

当谈到家居装饰时&#xff0c;地毯是一个经常被忽视的重要元素。但事实上&#xff0c;地毯在家居中扮演了至关重要的角色&#xff0c;不仅可以增加舒适感&#xff0c;还可以改善室内的整体氛围。在这篇文章中&#xff0c;我们将探讨地毯的选择、尺寸、形状和材质&#xff0c;以…

0基础学习PyFlink——使用DataStream进行字数统计

大纲 sourceMapSplittingMapping ReduceKeyingReducing 完整代码结构参考资料 在《0基础学习PyFlink——模拟Hadoop流程》一文中&#xff0c;我们看到Hadoop在处理大数据时的MapReduce过程。 本节介绍的DataStream API&#xff0c;则使用了类似的结构。 source 为了方便&…

使用 Docker 搭建一个“一主一从”的 MySQL 读写分离集群(超详细步骤)

目录 一、前提二、MySQL 生产安装1&#xff0c;拉取mysql2&#xff0c;查看mysql镜像3&#xff0c; 启动 mysql 容器4&#xff0c;修改mysql的中文编码5&#xff0c;查看验证mysql的中文编码 三、Mysql主机 mysql_master 的安装与配置1&#xff0c; 拷贝master容器2&#xff0c…

stable-diffusion 电商领域prompt测评集合

和GhostReivew一个思路&#xff0c;还是从比较好的图片或者是civitai上找一些热门的prompt&#xff0c;从小红书上也找到了不少的prompt&#xff0c;lexica.art上也有不少&#xff0c;主要是为了电商场景的一些测评&#xff1a; 小红书、civitai、Lexica、Liblib.ai、 depth o…

在钣金加工领域,迅镭激光切割机广泛使用的原因和优点何在?

激光切割工艺和激光切割设备正在被广泛的板材加工企业逐渐理解并接受&#xff0c;凭借其高效率的加工、高精度的加工、优质的切割断面、三维切割能力等诸多优势&#xff0c;逐步取代了传统的钣金切割设备。 苏州迅镭激光科技有限公司推出的激光切割设备的柔性化程度高&#xff…

降低边际成本:跨境电商的利润增长策略

在竞争激烈的跨境电商领域&#xff0c;降低成本是提高利润的关键。边际成本&#xff0c;即生产或销售一件额外商品所需的额外成本&#xff0c;在跨境电商中起到至关重要的作用。在本文中&#xff0c;我们将探讨降低边际成本的策略&#xff0c;以实现跨境电商的利润增长。 供应链…

centos7中实现多个python版本共存(python2.7、python3.6、python3.9等)

问题描述&#xff1a; 开发环境中&#xff0c;新项目需要在python3.9及以上版本开发&#xff0c;为了不影响之前运行在python3.6上的项目&#xff0c;就需要增加一个python3.9环境。线上直接使用docker部署就可以了。 解决办法 前提&#xff1a;python2.7和python3.6之前已经…

计算机网络 第五章传输层

文章目录 1 传输层的功能2 传输层两种协议&#xff1a;UDP和TCP3 端口和端口号4 UDP数据报特点和首部格式5 UDP校验6 TCP协议的特点7 TCP报文段首部格式8 TCP连接&#xff1a;三次握手建立连接9 TCP连接&#xff1a;四次挥手释放连接10 TCP可靠传输11 TCP流量控制12 TCP拥塞控制…