Redis分布式系统: 主从复制

news2024/11/14 21:30:52

 “你小心保管我,不思议的念头。秘密从不会对谁泄漏~”


什么是分布式系统?

        分布式系统的出现,就是为了解决单机问题(硬件资源不足)。在分布式系统中,通常会把数据复制多个副本部署到其他服务器,满⾜故障恢复和负载均衡等需求。

        分布式系统中,往往会在多个服务器上部署redis服务,从而构成一个redis集群。此时,就可以让这个redis集群,为整个分布式的服务器提供更加稳定、高效的数据存储功能。

       

redis部署方式:

        在分布式系统中,希望使用多个服务器来部署redis,存在以下的几种方式部署redis服务:

○ 主从模式

○ 主从+哨兵模式

○ 集群模式


什么是主从模式?

        可以把每个服务器上的redis服务看成是一个节点。在这些若干节点中,有些是“主节点”,其他的为“从节点”。

        假设现在有3个物理服务器,我们在这3个物理服务器上分别部署3个redis服务。此时,我们可以把其中的一个redis服务当成“主节点”,另外两个就当成“从节点”。“从节点”必须得听“主节点”的。(从节点的数据,需要跟随主节点的数据的变化而变化。始终与主节点的数据保持一致)。

                

        也许你会说,如果针对了从节点的数据进行了修改,那么主节点又该怎么办?实际上,如果我修改了从节点的数据,就和主节点的数据不一致了,我们是否应该把从节点的数据同步到主节点上呢?答案是否定的!

        Redis的主从模式中,“从节点上的数据只允许读取,但不允许修改!”        

主从模式的特点:

        所以,更准确地来说,主从模式主要还是优化保证的是: “读操作”的高并发、可用性。而写操作,无论是高并发、可用性都是十分依赖主节点的。实际场景中,读操作往往也比写操作频繁。

       另外,如果主从模式中的从节点出现问题,挂掉了,对整个系统影响很小。当这个从节点重新恢复时,可以再从主节点同步、获取数据。但,如果是主节点挂掉了,还是有一定的影响。因为从节点只能读取,而不能写入,如果需要写入数据,那么可能就会发生错误。

        当然,能不能出现多个主节点呢?那就不怕主节点挂掉了。可是,这又会引入一个它们之间“数据又该如何同步”的问题。


如何建立主从复制?

        正常来说,每个redis都需要部署在单独的物理机器上。但,对于学生党来说,可能只有一台服务器。但这并不意味着我们不能模拟主从结构。

        我们可以在一台云服务器上启动多个redis-server用来模拟多个redis服务。本来,redis-server默认的端口号为6379,因为我们需要在一台云服务器上启动多个redis-server,它们需要bind不同的端口号。

        所以,我们需要更改原先的redis-server启动的配置文件,直接在配置文件中修改port即可。

注: 我们还需要开启守护进程:

        修改完这些配置后,我们就可以在同一台服务器上启动redis-server。       

配置主从结构 

        要想配置主从结构,就需要使用slaveof

1. 在配置文件中加入 salveof {masterHost} {masterPort} 生效。

2. 在redis-server 命令启动时 加入 --salveof {masterHost} {masterPort} 生效。

3. 直接使用redis命令: salveof {masterHost} {masterPort} 生效。

        因为后两个方法不是"永久的",所以我们还是选择在配置文件上做这个事情。此处让6379为主节点,6380、6381为从节点。

        修改完配置文件后,我们需要重启redis才能生效配置文件。

注:

主从连接状况:

        我们再重新启动服务后,如何确定主从结构已经确立呢? 这时候需要查看网络连接状况:

        其中redis从节点和主节点之间会建立一个tcp连接,主节点此时就相当于服务器,从节点就相当于客户端。而所谓的数据同步,当主节点产生了任何数据更改,从节点就可以根据这个tcp连接获取到更改的信息。

        主从节点通过TCP网络来进行数据同步、数据传输,TCP内部支持Nagle算法(默认开启)。

开启: 增加TCP传输延迟,节省网络带宽。

关闭: 降低TCP传输延迟,增加网络带宽。

        我们可以通过关闭这个选项,从节点能够更快速地与主节点同步。

主从节点信息

        我们如何区分主从节点呢?redis提供 “info" 命令可以让程序员观察节点信息:

        其中的有些重要信息,我们会在之后细讲。 

断开主从连接

        slaveof no one (直接在redis命令中敲就行了)。一旦一个节点断开与主节点的从属关系,那么这个从节点就不再属于主节点了,但其中已有的数据是会被保留的。后续,主节点的任何操作也不会同步到该从节点上了。

         

主从模式拓扑

① ⼀主⼀从结构

        ⼀主⼀从结构是最简单的复制拓扑结构。

② ⼀主多从结构

        ⼀主多从结构使得应⽤端可以利⽤多个从节点实现读写分离。对于读⽐重较⼤的场景,可以把读命令负载均衡到不同的从节点上来分担压⼒。

③ 树形主从结构

        树形主从结构使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。

        


主从复制原理

建立复制流程

数据同步psync

        Redis使⽤psync命令完成主从数据同步,同步的方式有两种: 全量复制和部分复制

○ 全量复制:⼀般⽤于初次复制场景,Redis早期⽀持的复制功能只有全量复制,它会把主节点全部数据⼀次性发送给从节点,当数据量较⼤时,会对主从节点和⽹络造成很⼤的开销。

○ 部分复制:⽤于处理在主从复制中因⽹络闪断等原因造成的数据丢失场景,当从节点再次连上主节点后,如果条件允许,主节点会补发数据给从节点。因为补发的数据远⼩于全量数据,可以有效避免全量复制的过⾼开销。

# PSYNC的语法格式
PSYNC replicationid offset

        要实现数据同步,我们得知道要从谁身上同步吧,又因为数据同步分为全量复制和部分复制,我总得知道从哪里开始复制起走吧。

replication id

        这是由主节点自动生成的,当从节点与主节点建立复制关系时,就会从主节点那边获取到这个replication id。

 

          我是找到了复制谁的数据,那我现在应该从哪里开始复制起走呢? 

offset

        参与复制的主从节点都会维护⾃⾝复制偏移量,主节点在处理完写⼊命令后,会把命令的字节⻓度做累加记录,统计信息在inforeplication中的master_repl_offset指标中。从节点在接受到主节点发送的命令后,也会累加记录⾃⾝的偏移量。统计信息在inforeplication中的
slave_repl_offset指标中。

        我们可以根据从节点的偏移量,获取到从节点同步进度。

        因此,replication id 和offset 共同描述了一组数据集合。如果这两台机器上的replication id、offset都是一样的,那么就可以认为这两台机器上存储的数据也是一样的。

replication id2

        一般情况下,replication id2是用不上的。一个主节点A自动生成replication id,它的从节点B也会在建立连接时,获取到这个主节点A的replication id。

        如果A和B通信中发生了网络抖动,此时从节点B认为主节点A已经挂了 ,B就会自动生成一个replication id,但B仍然会记得之前的主节点A的replication id,并把它保存在replication id2中。

        就像这样:

psync运⾏流程

1) 从节点发送psync命令给主节点:offset写作-1 表示全量复制,写作具体正整数 就是按偏移量复制。

2) 主节点根据psync参数和⾃⾝数据情况决定响应结果:

○ “+FULLRESYNC”,则从节点需要进⾏全量复制流程。

○ “+CONTINEU”,从节点进⾏部分复制流程。

○ "-ERR",不支持"psync",从节点可以使⽤sync命令进⾏全量复制。(sync会塞redisserver处理其他请求.psync则不会)

        

全量复制 vs 部分复制

啥时候选择进行 全量复制\部分复制?      

全量复制:

① 首次和主节点进行数据同步

② 主节点不方便进行部分复制时

部分复制:

① 从节点同步过主节点的数据,因为别的原因 从节点重启了。

② 从节点需要重新同步主节点数据,看看能不能只同步一小部分。

全量复制流程:

        在主节点将RDB文件生成到接收的期间,这时候可能存在其他客户端发来的命令,这些命令会被写入到缓冲区中,并且也会以RDB文件重新发送给从节点,保持主从节点的一致性。

有磁盘复制vs⽆磁盘复制(diskless)

        也许你会认为,生成RDB文件压根不需要这步操作。因为主节点生成的RDB二进制数据,完完全全可以直接发送,而不是先要保存持久化到磁盘上!

        同样,从节点在写入时,也不用把收到的RDB数据写入到磁盘中,再进行加载。这样便省略了磁盘IO的过程。

        但,即便是引入了无磁盘模式,操作全量数据仍然是十分耗时的,因为网络传输是没发省的!相比于网络传输,磁盘IO还是很快的。

部分复制流程:

        从节点要选择从主节点这里进行全量复制,开销是很大的。很多时候,从节点本身就持有主节点的大量数据,压根就不需要再进行全量复制,只需要复制部分缺失数据即可。

        psync带有 replid id 和 offset值,主节点就要根据psync的参数判定当前同步的策略是全量复制还是部分复制。

        如果当前从节点需要的数据,已经超出了主节点的积压缓冲区的范围,则⽆法进⾏部分复制,只
全量复制了。
 

实时复制

        主从节点在建⽴复制连接后,主节点会把⾃⼰收到的修改操作,通过tcp⻓连接的⽅式,,源源不断的传输给从节点。从节点就会根据这些请求来同时修改⾃⾝的数据.从⽽保持和主节点数据的⼀致性。        


主从复制缺点

        主从复制的最大问题还是在于主节点上。一旦主节点挂掉,从节点就显得无所适从,只能进行读操作,但不能进行写操作。如果要想让从节点晋升为主节点需要程序员进行维护,这是十分繁琐的。

        redis主从节点断开的情况有两种:
① 使用salveof no one 这个时候节点会自动晋升为主节点,我们演示过。

② 主节点直接挂了。这个时候需要人工的方式 让从节点晋升为主节点,或者恢复主节点。     


本篇到此结束,感谢你的阅读。

祝你好运,向阳而生~

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

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

相关文章

通讯网关软件020——利用CommGate X2Mysql实现Modbus TCP数据转储Mysql

本文介绍利用CommGate X2MYSQL实现从Modbus TCP设备读取数据并转储至MYSQL数据库。CommGate X2MYSQL是宁波科安网信开发的网关软件,软件可以登录到网信智汇(http://wangxinzhihui.com)下载。 【案例】如下图所示,实现从Modbus TCP设备读取数据并转储至M…

苹果ios安卓apk应用APP文件怎么修改手机APP显示的名称

修改应用名称虽然很简单,但是也是由很多喜欢代码却不是很懂代码的白白同学,所以在这里我简单的说一下具体的话还是要靠同学们自行研究,由更好的方式也可以评论区说一下哈,让俺们也学习学习。 要修改 APK 文件的应用名称&#xff…

【rust基础】基本类型、所有权与借用、复合类型

文章目录 1 基本类型1.1 数值类型1.1.1 Rust 中的内置的整数类型:1.1.2 浮点类型1.1.3 数学运算1.1.4 位运算1.1.5 序列(Range) 1.2 字符、布尔、单元类型1.3 语句和表达式1.4 函数 2 所有权与借用2.1 栈(Stack)与堆(Heap)2.2 所有权原则2.2.1 转移所有权2.2.2 克隆…

VMware安装CentOS虚拟机

1. 简介 VMware 虚拟机是一种基于虚拟化技术的软件应用程序,它允许用户在一台物理计算机上模拟多个虚拟计算环境。虚拟机提供了一个可隔离且独立于物理硬件的虚拟环境,其中可以安装和运行操作系统和应用程序。 官网地址:https://www.vmware…

IT运维管理平台助力企业打造监、管、控一体化

成立20多年业务遍及全球100多个国家和地区的某大型企业随着全球化业务快速发展,业务对信息系统运维的可用性和持续性要求随之越来越高,伴随业务发展带来的IT环境复杂度呈指数级增加,系统运维工作正面临严峻的挑战。在业务系统运行过程中&…

金融人为什么都在争先申请中国人民大学与加拿大女王大学金融硕士

“知识就是力量”,这是弗朗西斯培根的名言,也是金融行业人才追求的动力。2023年,随着金融行业的飞速发展和复杂性的增加,各企业对优秀人才的需求更加迫切。在这场激烈的人才争夺战中,越来越多的金融人选择了在职研究生…

【AI视野·今日Robot 机器人论文速览 第五十期】Mon, 9 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Mon, 9 Oct 2023 Totally 25 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Learning to Grasp: from Somewhere to Anywhere Authors Fran ois H l non, Johann Huber, Fa z Ben Amar, St phane Doncieux…

基于大规模分布式系统的云原生运维实践

在云计算、大数据、人工智能等新兴技术的推动下,众多行业都在经历一场轰轰烈烈的数字化转型大潮。随着容器技术和编排系统的发展、基础设施不断云化、分布式微服务架构不断演进和敏捷、DevOps等开发理念的带动,应用云化已经是不可逆转的趋势,云原生也成为…

uni-app:实现简易自定义下拉列表

效果 代码 <template><view><view class"dropdown-trigger" tap"showDropdown">{{ selectedItem }}</view><view class"dropdown-list" v-if"showList"><view class"dropdown-item" v-f…

【面试题精讲】finally 中的代码一定会执行吗?

文章目录 finally 块的作用finally 中的代码一定会执行吗&#xff1f;1. System.exit() 导致 JVM 终止2. 无限循环或死锁3. 程序被强制终止 示例代码演示示例 1&#xff1a;正常情况下执行 finally 块示例 2&#xff1a;发生异常时执行 finally 块示例 3&#xff1a;System.exi…

ACL访问控制列表的解析和配置

ACL的解析 个人简介 ACL - Access Control List 访问控制列表 策略 ------行为 允许/拒绝 ACL --包含两种 标准ACL 扩展ACL 标准ACL&#xff1a;只能针对源IP地址做限制 针对路由条目的限制 -路由策略 思科编号&#xff1a;1-99之间或1300-1999 扩展ACL&#xff1a;针对…

SLAM从入门到精通(3d 点云数据访问)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 3d 点云设备现在汽车上用的很多。之前3d lidar这种高端传感器&#xff0c;只能被少部分智能汽车使用。后来很多国产厂家也开始研发3d lidar之后&am…

从0开始微信小程序开发

项目构成 小程序页面组成部分 WXML模板 WXML和HTML的区别 分别对应的是布局&#xff0c;文本&#xff0c;图像&#xff0c;导航跳转 WXSS 用来美化页面结构 view默认占满一行

数据治理的核心是什么?_光点科技

数据治理是当今数字化时代中企业管理的关键组成部分。在信息爆炸的时代&#xff0c;企业积累了大量的数据&#xff0c;这些数据不仅是企业宝贵的资产&#xff0c;也是推动业务决策和创新的重要驱动力。数据治理的核心在于建立有效的框架和流程&#xff0c;以确保数据的质量、安…

计算机竞赛 题目:基于深度学习的图像风格迁移 - [ 卷积神经网络 机器视觉 ]

文章目录 0 简介1 VGG网络2 风格迁移3 内容损失4 风格损失5 主代码实现6 迁移模型实现7 效果展示8 最后 0 简介 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习卷积神经网络的花卉识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c…

基于ChatGPT+词向量/词嵌入实现相似商品推荐

最近一个项目有个业务场景是相似商品推荐&#xff0c;给一个商品描述(比如 WIENER A/B 7IN 5/LB FZN )&#xff0c;系统给出商品库中最相似的TOP 5种商品&#xff0c;这种单纯的推荐系统用词向量就可以实现&#xff0c;不过&#xff0c;这个项目特点是商品库巨大&#xff0c;有…

Docker与Serverless计算的集成: Docker容器如何与Serverless计算结合。

文章目录 1. Docker容器的可移植性2. Serverless计算的自动伸缩性3. 使用Serverless与Docker容器a. 自托管Serverless平台b. 使用容器服务 4. 使用案例&#xff1a;图像处理服务5. 结论 &#x1f388;个人主页&#xff1a;程序员 小侯 &#x1f390;CSDN新晋作者 &#x1f389;…

MPP 架构在 OLAP 数据库的运用

MPP 架构&#xff1a; MPP 架构的产品&#xff1a; Impala ClickHouse Druid Doris 很多 OLAP 引擎都采用了 MPP 架构 批处理系统 - 使用场景分钟级、小时级以上的任务&#xff0c;目前很多大型互联网公司都大规模运行这样的系统&#xff0c;稳定可靠&#xff0c;低成本。…

IntelliJ IDEA 2023.1 版本可以安装了

Maven 的导入时间更加快了。 收到的有邮件提醒安装。 安装后的版本&#xff0c;其实就是升级下&#xff0c;并没有什么主要改变。 IntelliJ IDEA 2023.1 版本可以安装了 - 软件技术 - OSSEZMaven 的导入时间更加快了。 收到的有邮件提醒安装。 安装后的版本&#xff0c;其实就是…

电脑屏幕怎么录制?5 个最佳免费录屏软件

您是否想使用网络摄像头录制优酷视频、抖音直播或在线课程等项目&#xff0c;但完全不知道如何开始&#xff1f; 不用担心。有很多软件选项可以帮助您。虽然每一款都有不同的功能&#xff0c;但它们都能够录制网络摄像头并输出精美的高质量视频。 以下是我们精选的最佳作品。…