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

目录

一、搭建主从集群

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.限制一个主节点上从节点的数量,如果实在有太多则可以采用主从从的链式结构,减少主节点的压力

 

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

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

相关文章

【LLM GPT】李宏毅大型语言模型课程

目录 1 概述1.1 发展历程1.2 预训练监督学习预训练的好处 1.3 增强式学习1.4 对训练数据的记忆1.5 更新参数1.6 AI内容检测1.7 保护隐私1.8 gpt和bert穷人怎么用gpt 2 生成式模型2.1 生成方式2.1.1 各个击破 Autoregressive2.1.2 一次到位 Non-autoregressive2.1.3 两者结合 2.…

RabbitMQ虚拟主机无法启动的原因和解决方案

RabbitMQ虚拟主机无法启动的原因和解决方案 摘要: RabbitMQ是一个广泛使用的开源消息代理系统,但在使用过程中可能会遇到虚拟主机无法启动的问题。本文将探讨可能导致该问题的原因,并提供相应的解决方案,以帮助读者解决RabbitMQ虚…

第五章 模型篇: 模型保存与加载

参考教程: https://pytorch.org/tutorials/beginner/basics/saveloadrun_tutorial.html 文章目录 pytorch中的保存与加载torch.save()torch.load()代码示例 模型的保存与加载保存 state_dict()nn.Module().load_state_dict()加载模型参数保存模型本身加载模型本身 c…

K8s 中 port, targetPort, NodePort的区别

看1个例子: 我们用下面命令去创建1个pod2, 里面运行的是1个nginx kubectl create deployment pod2 --imagenginx当这个POD被创建后, 其实并不能被外部访问, 因为端口映射并没有完成. 我们用下面这个命令去创建1个svc &#xff…

chatgpt赋能python:Python怎样让画笔变粗

Python怎样让画笔变粗 Python是一门强大的编程语言,不仅适用于数据分析和机器学习等领域,也可以用来进行图像处理。在Python中,我们可以使用Pillow库来进行图像操作。在本篇文章中,我们将介绍如何使用Python和Pillow来让画笔变粗…

vue2_markdown的内容目录生成

文章目录 ⭐前言⭐引入vue-markdown💖 全局配置💖 渲染选项💖 取出markdown的标题层级 ⭐结束 ⭐前言 大家好!我是yma16,本文分享在vue2的markdown文本内容渲染和目录生成 背景: 优化个人博客功能&#xf…

delphi的ARM架构支持与System.Win.WinRT库

delphi的ARM架构支持与System.Win.WinRT库 目录 delphi的ARM架构支持与System.Win.WinRT库 一、WinRT 二、delphi的System.Win.WinRT库 2.1、支持ARM芯片指令 2.2、基于WinRT技术的特点 2.3、所以使用默认库而未经转化的服务端应用并不支持ARM架构服务器 2.4、对默认库…

【Linux】初步认识Linux系统

Linux 操作系统 主要作用是管理好硬件设备,并为用户和应用程序提供一个简单的接口,以便于使用。 作为中间人,连接硬件和软件 常见操作系统 桌面操作系统 WindowsmacOsLinux 服务器操作系统 LinuxWindows Server 嵌入式操作系统 Linux …

深度学习图像分类、目标检测、图像分割源码小项目

​demo仓库和视频演示: 银色子弹zg的个人空间-银色子弹zg个人主页-哔哩哔哩视频 卷积网路CNN分类的模型一般使用包括alexnet、DenseNet、DLA、GoogleNet、Mobilenet、ResNet、ResNeXt、ShuffleNet、VGG、EfficientNet和Swin transformer等10多种模型 目标检测包括…

Java关键词synchronized

目录 一、通过卖票系统观察多线程的安全隐患 二、synchronized的基本知识 1.使用synchronized的原因 2.synchronized的作用 3.synchronized的基本格式 a.synchronized加在方法名前 b.synchronized用在方法中 4. Java锁机制 5.synchronized注意事项 三、使用synchronize…

Java Logback日志框架概述及logback.xml详解

日志技术具备的优势 可以将系统执行的信息选择性的记录到指定的位置(控制台、文件中、数据库中)。 可以随时以开关的形式控制是否记录日志,无需修改源代码。 日志体系结构 Logback日志框架 Logback是由log4j创始人设计的另一个开源日志组件&#xff0…

MATLAB读取OpenFOAM的二进制文件

OpenFOAM的文件格式 上面是OpenFOAM二进制文件的格式,我们可以看出,前面21行都是无关的说明文件,22开始时除了一个括号之外,其它的都是数据。 读取数据 读取数据的思路非常简单,忽略不需要的,读取需要的。…

Autoware 跑 Demo(踩坑指南)

Autoware 跑 Demo(踩坑指南) 网上的博客和官方的教程,几乎都是一样的,但实际上跑不起来 Autoware 1.12学习整理–01–运行rosbag示例 Autoware入门学习(三)——Autoware软件功能使用介绍(1/3&a…

【Unity3D】激光雷达特效

1 由深度纹理重构世界坐标 屏幕深度和法线纹理简介中对深度和法线纹理的来源、使用及推导过程进行了讲解,本文将介绍使用深度纹理重构世界坐标的方法,并使用重构后的世界坐标模拟激光雷达特效。 本文完整资源见→Unity3D激光雷达特效。 1)重构…

基于51单片机的智能火灾报警系统温度烟雾光

wx供重浩:创享日记 对话框发送:火灾报警 获取完整源码源文件电路图仿真文件论文报告等 功能简介 51单片机MQ-2烟雾传感ADC0832模数转换芯片DS18B20温度传感器数码管显示按键模块声光报警模块 具体功能: 1、实时监测及显示温度值和烟雾浓度…

管理类联考——英语二——技巧篇——写作——B节——议论文——必备替换句型

议论文必备替换句型 (一)表示很明显/众所周知的句型 It is obvious thatIt is clear thatIt is apparent thatIt is evident thatlt is self-evident thatIt is manifest thatIt is well-knownIt is known to all thatIt is widely-accepted thatIt is crystal-cl…

蓝牙客户端QBluetoothSocket的使用——Qt For Android

了解蓝牙 经典蓝牙和低功耗蓝牙差异 经典蓝牙(Bluetooth Classic):分为基本速率/增强数据速率(BR/EDR), 79个信道,在2.4GHz的(ISM)频段。支持点对点设备通信,主要用于实现无线音频流传输,已成…

Ceph:关于Ceph 集群管理的一些笔记

写在前面 准备考试,整理ceph 相关笔记博文内容涉及,Ceph 管理工具 cephadm,ceph 编排器,Ceph CLI 和 Dashboard GUI 介绍理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守…

大数据分析平台释疑专用帖第二弹

不管是想要快速了解BI大数据分析平台,还是想要了解BI和自己的需求匹配度,都可关注我们的释疑专用贴。 1、可以分析直播数据吗? 严格来说,只要能够提供数据,就可以做数据可视化分析,直播数据也同理。 如果…

solr快速上手:整合SolrJ实现客户端操作(九)

0. 引言 我们前面学习了solr的服务端基础操作,实际项目中我们还需要在客户端调用solr,就像调用数据库一样,我们可以基于solrJ来实现对solr的客户端操作 1. SolrJ简介 SolrJ 是 Solr官方提供的 Java 客户端库,主要用于与 Solr 服…