【Reids】搭建主从集群以及主从数据同步原理

news2024/11/17 17:32:57

目录

一、搭建主从集群

1、介绍

2、搭建

二、数据同步原理

1、全量同步

2、主节点如何判断是不是第一次连接

3、增量同步

4、优化主从数据同步


一、搭建主从集群

1、介绍

单节点的Redis并发能力存在上限,要提高并发能力就需要搭建主从集群,实现读写的分离,下面是Redis主从集群读写分离的整体架构。客户端所有的读操作都会去从节点,而所有的写操作都会去主节点

 

2、搭建

我们在本地部署三个Redis来模拟实现,手写我们需要准备三个不同的文件夹,在创建好文件夹后,我们需要分别将Redis的配置文件拷贝到这三个文件夹里并进行修改,首先我们需要开启RDB,然后修改端口以及RDB文件的保存路径,此时先打开主节点,然后再启动从节点在每个从节点执行一下命令就完成主从集群的搭建了

slaveof  主节点的IP 端口Port

二、数据同步原理

那么主从节点之间是如何进行数据同步的呢,当从节点第一次连接到主节点时会通过全量同步来同步数据

1、全量同步

当从节点执行slaveof 命令时会向主节点请求同步数据,此时主节点会判断他是否是第一次连接,判断是第一次连接后,主节点会返回一个自己的数据版本信息从节点收到后则会进行保存。此时主节点会执行一次bgsave将此时的数据进行快照,然后将结果也就是rdb文件发送给从节点,从节点收到后则清空本地数据加载rdb文件,在这个过程中主节点依旧会处理新的写操作的数据,那么这些新的数据如何同步呢,在rdb这个过程中主节点新的写操作会生成一个repl_baklog,主节点会继续将repl_baklog发送给从节点进行数据同步

2、主节点如何判断是不是第一次连接

首先需要了解两个概念

replid:全称Replication id 是数据集的标识,id一致则说明是同一数据集。每一个主节点都有唯一的replid,slave节点会继承主节点的replid

offset:偏移量,随着记录的在repl_baklog中的数据增多而逐渐增大,slave完成同步时也会记录当前的offset。如果从节点的offset小于主节点的说明从节点数据落后,需要更新

所以从节点做数据同步时必须告诉主节点自己的replid与offset,主节点会根据replid是否一样来判断是否是第一次连接

3、增量同步

当从节点重启后会执行增量同步,从节点重启后会给主节点发送同步请求携带replid与offset,主节点判断它不是第一次连接后根据offset来判断是否进行增量同步,如果进行增量同步则将偏移量差的repl_baklog发送从节点

repl_baklog的大小是有上限的,它类似循环队列当写满后会覆盖最早的数据,如果从节点断开太长导致没有同步的数据被覆盖,则无法进行增量同步,进行全量同步

4、优化主从数据同步

1.在主节点的配置中开启无磁盘复制直接使用网络,避免全量同步时的磁盘io

repl-diskless-sync yes

2.redis单节点的内存占用不要太多,以此来减少RDB导致过多的磁盘io

3.适当提高repl_baklog的大小,当从节点宕机时尽快恢复,尽量避免全量同步

4.限制一个主节点上从节点的数量,如果实在有太多则可以采用主从从的链式结构,减少主节点的压力

 

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

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

相关文章

WinDbg安装入坑2(C#)

由于作者水平有限,如有写得不对的地方,请指正。 使用WinDbg的过程中,坑特别的多,对版本要求比较严格,如: 1 32位应用程序导出的Dump文件要用32位的WinDbg打开,想要没有那么多的问题&#xf…

数据库存储过程和函数

MySQL存储过程和存储函数 MySQL中提供存储过程(procedure)与存储函数(function)机制,我们先将其统称为存储程序,一般的SQL语句需要先编译然后执行,存储程序是一组为了完成特定功能的SQL语句集&…

惊人!截至6月10日全球COVID-19疫情玫瑰图,这些国家最危险

一、引言 自从COVID-19疫情在2020年爆发以来,数据可视化成为了了解疫情趋势和规模的重要手段。饱受争议的疫情数据可视化中的南丁格尔玫瑰图(Rose Chart),由于具有简洁、直观、易于理解等特点,逐渐成为了一个备受欢迎的…

MySQL中索引失效的场景

1.对索引使用左或者左右模糊匹配 当我们使用左或者左右模糊匹配的时候,也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效。 比如下面的 like 语句,查询 name 后缀为「林」的用户,执行计划中的 typeALL 就代表了全表扫描&#xf…

什么是SOME/IP-SD?

SOME/IP-SD 是"Scalable service-Oriented MiddlewarE over IP - Service Discovery"的缩写,是SOME/IP的一种特殊报文,可以让Client知道Server可以提供哪些服务,SOME/IP有两种动态发现服务的机制:一种是Offer Service&a…

Javascript作用域 (局部作用域和全局作用域) 详细介绍

Javascript作用域 (局部作用域和全局作用域) 详细介绍 作用域是当前的执行上下文,值和表达式在其中“可见”或可被访问。 常见的作用域为: 全局作用域:脚本模式运行所有代码的默认作用域 函数作用域:由函数创建的作用域 局部作用域…

IP-Guard上传软件到软件中心服务器时,软件ID、显示名称等信息如何获取?

如何实现客户端只能从软件中心下载安装软件? 控制台设置禁止全部软件安装的软件管理策略即可。即使设置禁止,软件中心安装不会受影响的。 在控制台-策略-软件安装管理策略,勾选禁止全部软件的安装。 软件中心客户端下载安装软件后,下载安装包是否会自动删除? 1、http方式…

SpringBoot Actuator详解(四十八)

还是要开心的,万一梦想真得实现了呢 上一章简单介绍了SpringBoot日志配置(四十七) , 如果没有看过,请观看上一章 本章节详细参考了: https://www.cnblogs.com/caoweixiong/p/15325382.html Spring Boot Actuator 模块提供了生产级别的功能,比如健康检查…

.locked加密勒索数据库级别恢复---惜分飞

有客户数据库被加密成.locked结尾的扩展名,数据库无法正常使用 对应的READ_ME1.html文件中信息类似:send 0.1btc to my address:bc1ql8an5slxutu3yjyu9rvhsfcpv29tsfhv3j9lr4. contact email:servicehellowinter.online,if you can’t contact my email, please contact some d…

Leetcode-6425. 找到最长的半重复子字符串

题目描述 给你一个下标从 0 开始的字符串 s ,这个字符串只包含 0 到 9 的数字字符。 如果一个字符串 t 中至多有一对相邻字符是相等的,那么称这个字符串是 半重复的 。 请你返回 s 中最长 半重复 子字符串的长度。 一个 子字符串 是一个字符串中一段…

Redis第十章 Redis HyperLogLog与事务、Redis 7.0前瞻

HyperLogLog HyperLogLog(Hyper[ˈhaɪpə])并不是一种新的数据结构(实际类型为字符串类型),而是一种基数算法,通过 HyperLogLog 可以利用极小的内存空间完成独立总数的统计,数据集可以是 IP、Email、ID 等。 如果你的页面访问量非常大,比如…

JUC基础认识(2)

线程池(重点):3大方法,7大参数,4种拒绝策略 程序运行的本质:占用系统资源!优化资源的使用!----->池化技术 池化技术的好处: 1.降低资源的消耗 2.提高响应速度 3.方便管理 线程复用,可以控制最大…

Java ~ Reference ~ FinalizerHistogram【总结】

前言 文章 相关系列:《Java ~ Reference【目录】》(持续更新)相关系列:《Java ~ Reference ~ FinalizerHistogram【源码】》(学习过程/多有漏误/仅作参考/不再更新)相关系列:《Java ~ Referenc…

通俗讲解元学习(Meta-Learning)

元学习通俗的来说,就是去学习如何学习(Learning to learn),掌握学习的方法,有时候掌握学习的方法比刻苦学习更重要! 下面我们进行详细讲解 1. 从传统机器学习到元学习 传统的机器学中,我们选择一个算法&…

Fiddler汉化(一箭三连)

我安装的fiddler 操作系统是:Win10 64Bit 操作系统的版本号是:v5.0.20194.41348 for .NET 4.6.1 fiddler下载地址: 我用夸克网盘分享了「02-Web调试工具-FiddlerSetup.exe」,点击链接即可保存。 链接:https://pan.quar…

python调用go语言的代码

最近在学习上述Python,go语言,研究下互相调用的事项,在windows下使用 linux下: gcc -o libpycall.so -shared -fPIC pycall.c windows下: gcc -o libpycall.dll -shared -fPIC pycall.c 但是实际的过程中编译成*.so…

使用扩展卡尔曼滤波(EKF)融合激光雷达和雷达数据(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

复习js的Object.defineProperty()

今天在看尚硅谷的Vue2时,讲到了Object.defineProperty()方法,有点忘了,所以找资料复习了一下。 总说 Object.defineProperty()是一种用于定义对象属性的JavaScript方法,它允许开发人员精确控制一个属性的行为,并可以…

【MySQL】库表的基本操作

文章目录 数据库的基本操作增查删改切入查看当前使用数据库 数据表的基本操作增查所有表查指定表查表字段信息删表改表名改字段名改字段属性增字段删字段 数据表的约束主键约束(PRIMARY KEY)非空约束(NOT NULL)默认值约束(DEFAULT)唯一性约束(UNIQUE)外键约束(FOREIGN KEY)删除…

VSCode 配置 C++ 环境

文章目录 VSCode 配置 C 环境1. 配置 C 编译器1.1 下载 MinGW1.2 添加环境变量1.3 测试 2. 配置编辑器 VSCode2.1 下载 VSCode2.2 安装插件2.3 运行代码 3. 优化Reference VSCode 配置 C 环境 VSCode(Visual Studio Code)是一款轻量级的代码编辑器&…