Redis进阶(三):主从复制

        为了解决单点问题,实现多服务器部署redis,有几种解决方案可以实现:主从复制,主从+哨兵还有集群。

何为主从复制

        简单来说有三个服务器分别部署了redis-server程序,选中一个服务器当作主节点,其他的就是从节点了。主节点上有一堆的数据,复制出来拷贝到从节点上,后续主节点有任何修改的数据,都要在从节点上体现出来,要注意的时候为了避免从节点影响到主节点,从节点只能读,不能写。

主从解决的问题

        在可用性方面,如果是单机结构,机器挂了整个程序就挂了,如果是主从结构的话,大大提高了程序的可用性。    

        在性能方面来看,由于从节点的数据时刻保持和主节点一致,那么客户端从 从节点访问数据和从 主节点访问数据是一致的,后续如果有大量的客户端访问数据的话,平均下来,各个节点的压力减少了不小。这其实也相当于引入了计算机资源,并发量自然提升了。

        更准确来说主从只针对读操作进行并发量可用性的提高 ,而写操作依赖于主节点,但是主节点又不能搞多个。

单机部署多个redis

        单机情况下部署redis的前提那就是,不同的redis需要有着不同的端口,修改端口常用的有俩种方式,一个是修改配置文件,另一个就是--port命令行来实现。

修改新复制的配置文件端口分别改成6380 和 81 

当前这几个redis并没有构成主从结构

 由于主从建立了连接,主节点数据一发生改变,从节点立马感知到。而且从节点没办法写数据(set)

了解主从结构(info命令)

断开主从关系/修改主从关系

        slaveof   no   one 

        直接在客户端使用这个命令断开现有的主从复制关系 ,此时从节点就不属于任何主节点了,自己变成主节点了

要注意的是删除的只是关系,从节点的数据不会发生改变的 

使用slaveof修改只是暂时的,重新启动redis优惠恢复如初。

安全性、只读、传输延迟

        对于数据比较重要的节点,主机点通过设置requirepass参数进行密码验证,这时所有的客户端访问必须使用auth命令进行验证,从主节点之间的数据复制是一个特殊的客户端来完成的,因此需要配置从节点的masterauth参数与主节点密码保持一致,这样才能连接并且复制。

        从节点不允许修改文件,只能进行读操作。最好不要修改,因为主节点无法感知从节点数据修改的。

        主从节点一般是不同的机器上的,要考虑到传输延迟,而主从节点的交互是靠网络传输的,也就是tcp。TCP内部支持了nagle算法,开启了会增加传输延迟,但是节省了网络带宽,关闭了减少网络延迟,增加网络带宽,究其原因是nagle算法相当于把tcp数据包打包起来,针对小的数据包进行合并,减少了包的个数。

拓扑

        首先,拓扑的含义是若干个节点之间,按照啥样的方式进行组织连接?

一主一从

        

        客户端发生读请求既可以向主节点发送也可以发送给从节点,但是写请求只能发给主节点 ,会对主节点造成不小的压力,因此我们可以通过关闭主节点的AOF,打开从节点的AOF,但是这种是有缺陷的,主节点一旦挂掉,会自动启动,此时主节点又没有AOF文件,那么从节点还没来得及保存的数据又会丢失了,优化办法是,当主节点挂了 ,需要让主节点向从节点要AOF文件,再启动。

一主多从

 

主从复制流程

         从节点接收到slaveof指令之后,从节点第一步就首先记录主节点的信息(ip、端口号之类的),当然是通过变量的形式记录,在那之后主从之间要建立连接,使用的是tcp建立连接(三次握手),然后是通过发送ping看功能命令能否正常使用,再者就是有的时候主节点会设置密码, 因此会出现权限验证的环节,后面就是同步数据集命令持续复制了。

        redis提供了psync命令来完成数据同步的过程,不需要手动执行的,主从关系建立成功之后,会自动执行psync,从节点负责从主节点拉取数据。

        PSYNC replicaitonid offset

replicationid是主节点生成的,每次启动会随机生成一个主节点的id,用于区分不同的主节点,从节点与主节点建立关系之后,就会从主节点获取到了replication id 

        info reolication 可以获取到repl_id

        offset就是偏移量,主节点进行修改命令的时候,需要记录下所有修改命令的字节个数,从节点的offset就描述了,现在从节点这里数据同步到哪里了。

replication id 和 offset 共同描述了一个"数据集合
如果发现两个机器, replication id 一样, offset 也一样就可以认为这两个 redis 机器上存储的数据就是完全一样的!!

        psync流程

        

全量复制的流程

                 要注意的是在 4 和 5 步骤的时候,一个是生成rdb文件和网络传输的时候需要耗费大量的时间,这段时间主节点可能会收到新的修改请求,因此还是需要把这个新的修改请求发送给从节点,也就是第六步。

        当然全量复制也有优化手段:主节点生成的rdb文件不再保存到硬盘中,而是直接发给从节点,还有从节点收到rdb文件之后,直接读取数据,不在保存,这种实现方式叫 无硬盘模式(diskless)。

部分复制的流程

        全量复制比较大,如果从节点已经有了主节点大量的数据,只需要拷贝少量数据,就可以使用部分复制(网络抖动)。

        

实时复制的流程

         主从节点同步好数据了,但是之后主节点会源源不断的收到新的修改数据的请求,也是需要同步给从节点的,因此可以让主从节点建立TCP长连接,然后主节点根据上述连接将新的修改请求数据发送给从节点。从节点再根据这些数据进行对内存的修改;

     

在进行实时复制的时候,需要保证连接处于可用状态

心跳包 机制
主节点: 默认, 每隔 10s 给从节点发送一个 ping 命令.从节点收到就返回 pong

从节点: 默认, 每隔 1s 就给主节点发起一个特定的请求,就会上报当前从节点复制数据的进度(offset)

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

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

相关文章

【PCL】(二十六)自定义条件的欧几里得聚类分割点云

&#xff08;二十六&#xff09;自定义条件的欧几里得聚类分割点云 以下代码实现自定义条件对点进行欧几里得聚类分割。 conditional_euclidean_clustering.cpp #include <pcl/point_types.h> #include <pcl/io/pcd_io.h> #include <pcl/console/time.h>#…

Android Studio编译及调试知识

文章目录 Android Studio编译kotlin项目Android Studio编译Java和kotlin混合项目的过程gradle打印详细错误信息&#xff0c;类似这种工具的使用Android apk 从你的代码到APK打包的过程&#xff0c;APK安装到你的Android手机上的过程&#xff0c;最后安装好的形态&#xff0c;以…

Mint_21.3 drawing-area和goocanvas的FB笔记(五)

FreeBASIC SDL图形功能 SDL - Simple DirectMedia Layer 是完整的跨平台系统&#xff0c;有自己的窗口、直接捕获键盘、鼠标和游戏操纵杆的事件&#xff0c;直接操作音频和CDROM&#xff0c;在其surface上可使用gfx, openGL和direct3D绘图。Window3.0时代&#xff0c;各种应用…

准谐振PWM控制器-能够实现多种保护功能FAN6921MRMY 功率因数控制器

高度集成的FAN6921MRMY将功率因数控制器 (PFC) 和准谐振 PWM 控制器相结合。集成提供了成本高效的设计&#xff0c;可减少外部组件数量。对于 PFC&#xff0c;FAN6921MRMY使用控制导通时间技术提供调节的直流输出电压&#xff0c;执行自然的功率因数校正。FAN6921MRMY使用创新的…

【代码随想录算法训练营Day40】01背包问题一维dp数组;二维dp数组(滚动数组);416.分割等和子集

文章目录 ❇️Day 41 第九章 动态规划 part04✴️今日任务❇️01背包问题 二维背包问题的区别暴力解法动规五部曲 ❇️01背包问题 一维二维转一维&#xff1a;滚动数组动规五部曲 ❇️416. 分割等和子集随想录思路自己的思路二维方法一维方法 自己的代码二维方法一维方法 ❇️D…

Kibana二次开发环境搭建

1 kibana环境搭建 1.1 搭建后端服务 &#xff08;1&#xff09;java环境安装 ElasticSearch运行需要java jdk支持。所以要先安装JAVA环境。由于ElasticSearch 5.x 往后依赖于JDK 1.8的&#xff0c;所以现在我们下载JDK 1.8或者更高版本。下载JDK1.8,下载完成后安装&#xff…

去电脑维修店修电脑需要注意什么呢?装机之家晓龙

每当电脑出现故障时&#xff0c;你无疑会感到非常沮丧。 如果计算机已过了保修期&#xff0c;您将无法享受制造商的免费保修服务。 这意味着您必须自费找到一家电脑维修店。 去电脑维修店并不容易。 大家一定要知道&#xff0c;电脑维修非常困难&#xff0c;尤其是笔记本电脑维…

qtCreator可以全局包含。VSqt中千万不能全局包含,你的控件头文件会自己变成<>括号,编译就报错

qtCreator可以全局包含。 VSqt中千万不能全局包含&#xff0c;你的控件头文件会自己变成&#xff1c;&#xff1e;括号&#xff0c;编译就报错

重建大师6.2版本的建模效果出现下图中模糊的情况,是什么原因?

可能是因为坐标原点设置的不对&#xff0c;图例中的三角网都出现了精度损失的问题。 坐标原点设置的具体操作&#xff1a;提交产品后&#xff0c;在弹出的界面&#xff0c;可以设定坐标原点。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0…

第七届强网杯-PWN-【warmup】

文章目录 warmup libc 2.35检查IDA逆向maindeldelete_noteadd_noteshow_noteinput_numberread_16atoi __errno_location()相关解释prctl相关 思路高版本off by null利用技巧产生chunk extend泄露libc基地址泄露heap基地址修改放入tcachebin中的chunk的fd为stdout最后add两个chu…

AI大模型助力创意思维,拓展无限可能性

在当今快速发展的科技时代&#xff0c;人工智能大模型正逐渐成为我们生活中不可或缺的一部分。它们拥有强大的计算能力和学习能力&#xff0c;能够帮助我们解决许多复杂的问题&#xff0c;同时也可以为创意思维的拓展提供无限可能性。 人工智能大模型可以通过对海量数据的分析…

docker部署springboot jar包项目

docker部署springboot jar包项目 前提&#xff0c;服务器环境是docker环境&#xff0c;如果服务器没有安装docker&#xff0c;可以先安装docker环境。 各个环境安装docker&#xff1a; Ubuntu上安装Docker&#xff1a; ubuntu离线安装docker: CentOS7离线安装Docker&#xff1…

华为北向网管NCE开发教程(1)闭坑选接口协议

华为北向网管NCE开发教程&#xff08;1&#xff09;闭坑选接口协议 华为北向网管NCE开发教程&#xff08;2&#xff09;REST接口开发 华为北向网管NCE开发教程&#xff08;3&#xff09;CORBA协议开发 本文一是记录自己开发华为北向网管遇到的坑&#xff0c;二是给需要的人&…

Rocky Linux 的安装

1. 为什么用Rocky 因为CentOS不干了&#xff0c;这是CentOS的现状&#xff1a; CentOS Linux 8 在 2021 年底停止更新&#xff1b; CentOS Linux 7 用户较多&#xff0c;这个版本将在 2024 年 6 月 30 日停止支持&#xff1b; 未来社区不会再有 CentOS Linux 的新版本&…

联立方程模型的可识别性的通俗解释

联立方程模型的可识别性&#xff0c;主要的解法是阶条件算法和秩条件算法&#xff0c;数学公式角度的解释就不讲了&#xff0c;参考下面的前人文献。 【计量经济学】联立方程模型-CSDN博客 说一下公式算法背后的通俗原理。 在计量经济模型中&#xff0c;比如 Y23*Xu中&#x…

[java基础揉碎]super关键字

super关键字: 基本介绍 super代表父类的引用&#xff0c;用于访问父类的属性、方法、构造器 super给编程带来的便利/细节 1.调用父类的构造器的好处(分工明确&#xff0c;父类属性由父类初始化&#xff0c;子类的属性由子类初始化) 2.当子类中有和父类中的成员(属性和方法)重…

Springer旗下SCI,16天见刊!稳定检索13年,质量稳定

毕业推荐 SCIE&#xff1a; • 计算机类&#xff0c;6.5-7.0&#xff0c;JCR1区&#xff0c;中科院2区 • 2个月19天录用&#xff0c;6天见刊&#xff0c;36天检索 SCI&EI&#xff08;CCF-C类&#xff09; • 算法类&#xff0c;2.0-3.0&#xff0c;JCR3区&#xff0c…

数字孪生的大方向趋势及未来

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 数字孪生的大方向趋势及未来 一、引言 数字孪生&#xff08;Digital Twin&#xff09…

高级语言讲义2016计专(仅高级语言部分)

1.斐波那契序列的第n项可以表示成以下形式&#xff0c;编写一个非递归函数&#xff0c;返回该数列的第n项的数值 #include <stdio.h>int func(int n) {if(n1||n2)return 1;int p1,q1,num;for(int i3; i<n; i) {numpq;qp;pnum;}return num; } 2.在MXN的二维数组A中&am…

Win11 没有网络bug

1.问题描述 没有网络&#xff0c;dns一直是固定的&#xff0c;但是dns已经是自动获取了(MAC地址随机) 2.解决办法 1.首先&#xff0c;删除所有网络的手动dns配置,控制中心那个dns管理没有用,在设置中删除网络,不然问题还会出现 - 2.然后&#xff0c;进入注册表\HKEY_LOCAL_MACH…