【Redis】一文聊清楚Redis主从复制原理

一文让你彻底明白“redis的主从复制” Redis是一个高性能键值存储数据库,支持多种数据结构,具有内存存储、原子操作和持久化机制等特点,读写速度可达微秒级。其分布式存储方案包括主从模式,通过主节点与从节点之间的数据同步实现高可用和读写分离。主从同步分为全量同步和增量同步两种模式:全量同步在首次连接或重连时触发,主节点生成RDB快照并传输给从节点;增量同步在网络恢复后通过复制偏移量实现高效数据恢复。关键机制包括replication_buffer(临时存储RDB生成期间的命令)和repl_backlog(环形缓冲区记录所有写命令)。当缓冲区被覆盖 阅读详情

本地缓存带来的挑战

分布式缓存相比于本地缓存,在实现层面需要关注的点有哪些不同。梳理如下:

维度本地缓存集中式缓存
缓存量受限于单机内存大小,存储数据有限需要提供给分布式系统里面所有节点共同使用,对于大型系统而言,对集中式缓存的容量诉求非常的大,远超单机内存的容量大小。
可靠性影响有限,只有本进程使用,不会影响其他进程的可靠性。作为整个系统扛压屏障,系统内所有节点共同依赖的通用服务,一旦集中式缓存出问题,会影响与其对接的所有业务节点,对系统的影响是致命性的。
承压性承载单机节点的压力,请求量有限承载整个分布式集群所有节点的流量,系统内业务分布式节点部署数量越多、业务体量越大,会导致集中缓存要承载的压力就越大,甚至是上不封顶的。

从上述几个维度的对比可以发现,同样是缓存,但集中式缓存所承担的使命是完全不一样的,业务对集中式缓存的存储容量、可靠性、承压性等方面的诉求也是天壤之别,不可等同视之。以Redis为例:

  • 如何打破redis缓存容量受限于机器单机内存大小的问题?
  • 如何使得redis能够扛住多方过来的请求压力?
  • 如何保证redis不会成为单点故障源?

其实答案很简单,加机器!通过多台机器的叠加使用,达到比单机更优的效果 —— 现在业务系统的集群化部署,也都是采用的这个思路。Redis的分布式之路亦是如此,但相比于常规的业务系统分布式集群化构建更加复杂:

  1. 很多业务实现集群化部署会很简单,因为每个业务进程节点都是无状态的,只需要部署下然后通过负载均衡的方式对外提供请求应答即可。
  2. Redis作为一个集中式缓存数据库,它是有状态的,不仅需要将进程分别部署在多个节点上,还需要将数据也分散存储在各个节点上,同时还得保证整个Redis集群对外是一个统一整体。

所以对于一个集中式缓存的分布式能力构建,必须要额外提供一些机制,来保障数据在各个节点上的安全与一致性,还需要将分散在各个节点上的数据都组成一个逻辑上的整体。

主从复制简介

主从复制是什么

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点,而对于redis来说,一主两从是比较常见的搭配。

主从模式按照读写分离的策略来提升整体的请求处理能力:

  1. 主节点(Master)同时对外提供读和写操作
  2. 从节点(Slave)通过replicate同步的方式,从主节点复制数据,保持自身数据与主节点一致
  3. 从节点只能对外提供读操作

当然,对于读多写少类的操作,为了提升整体读请求的处理能力,可以采用一主多从的方式。所有的从节点都从主节点进行数据同步,这样会导致主节点的同步处理压力过大而成为瓶颈。为了解决这个问题,redis还支持了从slave节点分发的能力,也就是从服务器也可以有自己的从服务器, 多个从服务器之间可以构成一个主从链。这样可以分摊主服务器压力。

主从复制的作用

  • 数据备份:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复。
  • 读写分离:由主节点提供写服务,由从节点提供读服务,提高Redis服务器的并发量。

主从复制流程

全量复制

在第一次同步时会进行全量复制(但并非只有第一次同步时全量复制,其他情况看后文)

第一次同步时流程:

第一阶段:建立链接、协商同步

从服务器向主服务器发送PSYNC ? -1 命令,主动请求进行完整重同步

psync 命令包含两个参数,分别是主服务器的 runID 和复制进度 offset。

  • runID,每个 Redis 服务器在启动时都会自动生产一个随机的 ID 来唯一标识自己。当从服务器和主服务器第一次同步时,因为不知道主服务器的 run ID,所以将其设置为 "?"。
  • offset,表示复制的进度,(也叫复制偏移量),主要为增量复制服务,这里因为是全量复制,所以使用-1表示。

主服务器收到 psync 命令后,会向从服务器发送FULLRESYNC响应命令并带上两个参数:主服务器的 runID 和主服务器目前的复制进度 offset。从服务器收到响应后,会记录这两个值。

FULLRESYNC 响应命令的意图是采用全量复制的方式,也就是主服务器会把所有的数据都同步给从服务器。

第二阶段:主服务器同步数据给从服务器

接着,主服务器会执行 bgsave 命令来生成 RDB 文件,然后把文件发送给从服务器(数据持久化)。

从服务器收到 RDB 文件后,会先清空当前的数据,然后载入 RDB 文件。这是因为从服务器在通过 replicaof 命令开始和主服务器同步前,可能保存了其他数据。为了避免之前数据的影响,从服务器需要先把当前数据库清空。

这里有一点要注意,主服务器生成 RDB 这个过程是不会阻塞主线程的,因为 bgsave 命令是产生了一个子进程来做生成 RDB 文件的工作,是异步工作的,这样 Redis 依然可以正常处理命令。

就像RDB文件生成过程中Redis不停止提供服务一样,从服务器在接收并载入RDB文件的过程中,主服务器仍然可以写入数据,那怎么将这部分数据传给从服务器呢?

第三阶段:主服务器发送新写操作命令给从服务器

为了保证主从服务器的数据一致性,主服务器为每个连接进来的从服务器准备了一个replication buffer缓冲区,这段时间内写入的数据都会被存入这个replication buffer中,从服务器完成 RDB 的载入后,会回复一个确认消息给主服务器。主服务器就将replication buffer中的数据推送过去。

长连接传播

主从服务器在完成第一次同步后,双方之间就会维护一个 TCP 连接,这个TCP连接是长连接

之后就会基于这个长连接进行命令传播。通过这种方式来保证第一次同步后的主从服务器的数据一致性。

增量复制

实际上,生成RDB文件是比较耗费资源的,同时,主服务器传输 RDB 文件给从服务器,这个操作会耗费主从服务器大量的网络资源,并对主服务器响应时延产生影响。而对从服务器而言,载入 RDB 文件期间,会阻塞其他命令请求,这也会导致响应效率的降低。并且,当从服务器断开后重新连接,主从数据不一致,在数据少量不一致的情况下,也不需要全量复制。因此,就提供了增量复制

复制偏移量(replication offset)

主服务器和从服务器会分别维护一个复制偏移量。如果主从服务器的复制偏移量相同,则说明二者的数据库状态一致;反之,则说明二者的数据库状态不一致,此时从服务器需要使用增量复制来同步缺失的这一部分数据。

复制积压缓冲区(replication backlog)

主服务器的写命令,除了传给从服务器后,还会写入replication backlog(全局唯一),这是一个固定长度的先进先出(FIFO)队列,默认大小为 1MB。其在内存中是一个环形结构。

  1. 主服务器按照顺时针方向写命令,主服务器最新写入的位置即为上文提到的主服务器的偏移量,这里叫master offset。
  2. 假设从服务器在set key2 2后断开连接,也就是上图中slave offset的位置,当它重连时,再次给主服务器发送psync指令时,会带上自己的offset(注意和全量复制的区别,全量复制时offset设置为-1,此时是从服务器真实的offset值)。
  3. 接着,主服务器发现从服务器的偏移量与自己不一致,需要进行增量复制。此时主服务器会计算出master offset与slave offset之间的指令,并发送给该为从服务器准备的replication buffer中,进而发送给从服务器。
  4. 从服务器进行写入后便又恢复到和主服务器一致的状态。
断开重连并不一定总是增量复制

网络断开后,当从服务器重新连上主服务器时,从服务器会通过 psync 命令将自己的复制偏移量 slave_repl_offset 发送给主服务器,主服务器根据自己的 master_repl_offset 和 slave_repl_offset 之间的差距,然后来决定对从服务器执行哪种同步操作:

  1. 整个replication backlog是个环形结构,也就是说最新的写命令会将最老的写命令覆盖。换句话说,如果从服务器断开时间太久,环形缓冲区被主服务器的写命令覆盖了,那么从服务器连上主服务器后只能通过全量复制来获取数据了。所以replication backlog配置要尽量大一些,可以降低主从断开后全量复制的概率。
    • 如果判断出从服务器要读取的数据还在 repl_backlog_buffer 缓冲区里,那么主服务器将采用增量同步的方式;
    • 相反,如果判断出从服务器要读取的数据已经不存在 repl_backlog_buffer 缓冲区里,那么主服务器将采用全量同步的方式。
  2. 上文中有提到每个实例有自己的RunID,这个值在服务器启动时自动生成,由 40 个随机的十六进制字符组成。从服务器断开重连时会将之前主服务器的RunID一起发送过去(这里注意和第一次连接的区别,第一次连接时发送的RunID是“?”),主服务器会判断这个RunID是否为自己,如果不是(比如出现脑裂,出现两个主服务器),则会和全量复制时一样返回FULLRESYNC响应命令,告知从服务器需要进行全量复制。

总结

主从服务器第一次同步的时候,就是采用全量复制。

第一次同步完成后,主从服务器都会维护着一个长连接,主服务器在接收到写操作命令后,就会通过这个连接将写命令传播给从服务器,来保证主从服务器的数据一致性。

如果遇到网络断开,就需要进行增量复制(当然不一定是增量复制,具体还需要看replication backlog的大小,以及对应的主服务器RunID)。

一文带你了解Linux中部署Redis主从复制,主从复制原理 所谓主从复制,就是以其中一台机器作为 master,并且以写为主,其他从服务器(Slave)则是以读为主,达到读写分离的效果,以来提高系统性能。从服务器的数据全部从主服务中复制同步而来。 当 master 数据变化的时候,自动将新的数据异步同步到其他Slave数据库 其实主从分离是真的很简单,就改几个配置项就完事啦,和单机的没啥区别 也就这一句话,配置从库,不配置主库,从库变更一下配置文件,或者是输入几行命令就可以,主库则不需要动,和单机一样。 阅读详情

相关推荐

BEVFusion(mit)最强环境安装,部署复现

BEVFusion作为一项经典的工作,值得深入探索。然而由于配置环境比较麻烦,耽误了一些时间。经过几次成功配置之后,有了一些总结,在这里记录下来,供大家参考避坑,也方便自己下次查阅。

qq_45783225的博客 1万+

一文聊清楚Redis主从复制原理

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点,而对于redis来说,一主两从是比较常见的搭配。主从模式按照读写分离的策略来提升整体的请求处理能力:主节点(Master)同时对外提供读和写操作从节点(Slave)通过replicate同步的方式,从主节点复制数据,保持自身数据与主节点一致从节点只能对外提供读操作。

kfashfasf的博客 1140

DeepLearningTool-深度学习分类-和HALCON的详细过程

损失函数:衡量预测误差,用于模型优化。混淆矩阵:评估分类模型性能,提供详细预测结果分析。两者结合使用,可以全面评估和优化模型。过拟合:模型过于复杂,捕捉了噪声,表现为训练集误差低,测试集误差高。欠拟合:模型过于简单,无法捕捉数据模式,表现为训练集和测试集误差都高。调整参数过拟合:简化模型、增加数据、使用正则化、早停、Dropout。欠拟合:增加模型复杂度、特征工程、增加训练时间、调整学习率、使用集成方法。通过合理调整参数和方法,可以有效避免过拟合和欠拟合,提升模型性能。

weixin_36672036的博客 6196

一文掌握Redis的主从复制原理到实战

编程界的小学生一、为什么要主从复制二、主备和主从1、主备2、主从三、主从三种方式1、同步阻塞1.1、原理图1.2、优缺点2、异步非阻塞2.1、原理图2.2、优缺点3、同步阻塞MQ3.1、原理图3.2、优缺点四、主从原理及实战1、仅开启RDB2、仅开启AOF3、混合模式(RDB+AOF)五、主从复制配置文件1、配置主从2、主从传输数据这期间,从节点是否允许对外提供服务3、是否开启Slave从节点也支...

【原】编程界的小学生 1518

基于STM32H750的便携式双通道示波器与信号发生器AFE设计

示波器和信号发生器是电子测量与嵌入式系统调试的基础仪器,其核心在于模拟前端(AFE)对宽动态范围、高精度采样与低失真输出的协同实现。原理上需兼顾输入信号调理(衰减/放大/偏置)、ADC/DAC接口匹配、触发同步及电源完整性设计。技术价值体现在以低成本器件达成±15V输入/±10V输出、16位等效采样精度与85kHz带宽的工程平衡。典型应用场景包括电机驱动波形观测、传感器信号验证、电源环路测试及通信电平分析。本方案聚焦STM32H750平台,深度融合硬件拓扑与片上资源特性,为嵌入式教学与原型开发提供可复现、易

weixin_35755188的博客 111

GEO芯片数据下载和探针ID转换(保姆级教程)

R语言安装、GEO芯片数据下载、探针ID转换

qq_43138237的博客 3万+

Redis指南【6】一文搞定主从复制

在上篇文章中,我们深入学习了 Redis 的两种不同的持久化方式,Redis 服务器通过持久化,把 Redis 内存持久化到硬盘中,当 Redis 宕机后,可以对 RDB 或 AOF 文件恢复内存中的数据。但是如果这台服务器的主机坏了,那么这些数据就丢失了吗?下面,我们来学习下主从复制机制,它可以将主机的数据复制到多台服务器上,从而保证了数据的安全性。那么 Redis 的主从复制它具体都有哪些功能呢?如何配置的主从集群呢?它的底层是如何实现的呢?

mifffy_java的博客 1069

【3】Ubuntu18.04下载与安装,以及中文输入法的安装

Ubuntu18.04下载与安装一、下载二、安装(在VMware 16 pro中安装Ubuntu18.04)三、Ubuntu中安装中文输入法1.检查 fcitx 框架2.安装输入法 一、下载 下载地址:Ubuntu Releases 往下拉,找到自己需要的安装版本(建议不要安装最新版,因为你在使用时候遇到的错误大多都是以前版本的,最新版本的,解决方案特别少) 我这里安装的是Ubuntu18.04 一般都是使用desktop版本的(desktop版和server版本的区别:请看这篇文章) 之后点击下载即

斯基的朦胧 1万+

一文道明Redis主从复制搭建及工作原理

文章目录前言一、Redis主从架构是什么?二、如何搭建主从复制1. 主节点(Master)配置2. 从节点配置3. 测试主从复制是否配置成功三、 主从复制工作原理1. 原理说明2. 原理图3. 数据的部分复制什么是主从复制风暴?总结 前言 今天主要还是将Redis主从相关的问题。 一、Redis主从架构是什么? Redis主从架构是什么,简单来讲就是只有一个Master节点和多个Slave节点。主节点对外提供服务,从节点用来备份主节点的数据。在通俗点讲就是用户的增删改查都是在Master节点操作的,

qq_32403043的博客 1103

推荐国内可使用的chatGPT的工具

是基于ChatGPT 3.5和ChatGPT 4开发的chatGPT应用程序版,这个应用可以直接使用而不需要魔法,如果我们有自己的APT KEY的话可以一直使用,但是如果没有的话,我们只能使用ChatGPT 3.5 版本的,次数也是有所限制,应该是20次每天,这也足够我们的使用了,响应的速度也是非常的快。

有你真好的博客 1万+

CloudCompare 二次开发(6)——插件中拖拽添加Qt窗口(区域生长算法为例)

手动拖拽的方式搭建Qt对话框界面的制作流程,以PCL中的点云区域生长算法为例进行制作。

点云侠的博客 2153

redis主从复制_一文彻底搞懂Redis 主从复制原理及实战

主从复制概述主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。目前很多中小企业都没有使用到 Redis 的集群,但是至少都做了主从。有了主从,当 mas...

weixin_39979332的博客 173

AI训练师三级考证避坑指南|假证辨别+机构套路+OSTA验证

这是最基础的问题,也是最容易忽略的问题。人工智能训练师三级证书本身是有价值的——政府认可的职业技能等级证书、多地紧缺工种补贴、人才引进加分。但正因为有价值,才引来了大量骗子。记住三句话OSTA查不到的证,一分钱都不值声称免考包过的,100%是骗子培训费一次性谈清楚,后续加价直接走人如果你正在考虑考人工智能训练师三级证书,想要从报名到备考到拿证的完整一站式指南,欢迎查看我的付费专栏:📖《人工智能训练师三级·从零到拿证完全指南》99篇系统化内容,覆盖报名、备考、冲刺、拿证全流程。

白话机器学习 1222

一文掌握Redis主从复制、哨兵、Cluster三种集群模式

点击上方“ 码农编程进阶笔记 ”,选择“置顶或者星标”文末有干货,每天定时与您相约!在开发测试环境中,我们一般搭建Redis的单实例来应对开发测试需求,但是在生产环境,如果对可用性、可靠...

lxw1844912514的博客 2409

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Redis主从复制拓扑全解析:从单点备份到跨地域容灾,一文掌握高可用架构

三层决策模型真实性能数据拓扑结构最大读QPS故障恢复时间数据丢失风险一主一从8万手动(分钟级)高一主三从24万30秒中Sentinel15万5秒低异地多活20万+秒级接近零🚀行动指南:根据业务需求选择拓扑,在下一个项目中使用Sentinel实现自动故障转移!🌟扩展阅读Redis官方复制文档。

全栈开发工程师 2325

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一文吃透Redis主从复制的原理

面让架构易于扩展,另一方面防止单体故障:当主库挂了,可以立即拉起从库,不至于让业务停滞太久。而首次主从复制包括建立连接,RDB 同步和命令同步三个阶段。为了保证同步的效率,除了第一次需要全量同步以外,例如当主从节点断连后,则只需要增量同步,这是由主从库的复制偏移量以及主库的 repl_backlog_buffer 复制积压缓冲区来控制的。

pantouyuchiyu的博客 130

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Redis专题:一文搞懂主从复制原理!

微信搜索公众号“码路印记”,感谢关注! 在分布式环境中,数据副本(Replica)和复制(Replication)作为提升系统可用性和读写性能的有效手段被大量应用在各种分布式系统中,Redis 也不例外。Redis主从复制,以一主多从的模式建立的分布式系统,是Redis搭建高可用集群(哨兵模式、Cluster模式)的基础,为容错、故障转移提供强有力的支撑。本文将介绍以下内容: 主从示例 Redis设置主从结构有三种方式: 在redis.conf中配置replicaof <ma...

guangzixin的专栏 649

一文吃透 Redis:主从复制 / 哨兵 / 集群模式 + 缓存 + 分布式锁

主从复制解决的问题:单点问题单点问题:单个redis节点,可用性不高,性能有限。主从复制的特点:1,主节点可以用来读写,从节点只能用来读,可以减少主节点的访问压力。2,主从复制存在多种拓扑结构:可以在适当的场景使用适当的拓扑结构,比如一主多从的结构,同步操作快,但是消耗的网络资源多,因为主节点要通过网络和所有从节点实现同步。而树形结构,主节点消耗的网络资源减少了,但是如果树的层级太高,会造成数据同步的延迟增长加。3,复制分为全量复制,部分复制和实时复制。

2401_82677021的博客 1727

一文彻底学会Redis主从复制(高可用)

https://juejin.im/book/5afc2e5f6fb9a07a9b362527/section/5afc375b6fb9a07aca7a5ae8 https://blog.wangzhipeng.top/2019/05/16/2019_05_16/ https://www.cnblogs.com/kismetv/p/9236731.html https://zhuanlan.zhihu.com/p/55532249 https://juejin.im/post/5b625b9be51d451

码农富哥 717

【数据库】一文讲清redis的主从复制

主从复制原理;主从复制配置;一主双从(配置三个redis示例;配置主从;集群测试);主从切换;哨兵模式(什么是哨兵模式;配置哨兵;启动哨兵;验证哨兵;复制延时;选举策略)

weixin_48814356的博客 1491

232主从通信流程图_一文彻底搞懂Redis 主从复制原理及实战

主从复制概述主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。默认情况下,每台Redis服务器都是主节点,且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。目前很多中小企业都没有使用到 Redis 的集群,但是至少都做了主从。有了主从,当 mas...

weixin_28847199的博客 757

一文了解:Redis主从复制

Redis主从复制 主从复制 主从复制,将一台Redis服务器的数据,复制到其他Redis服务器。前者称为主(master)节点,后者称为从(slave)节点 。 在默认的情况下,Redis都是主节点,每个从节点只能有一个主节点,一个主节点可以有多个从节点。复制的数据只能从主节点复制到从节点。 配置方式 在从节点的配置文件中配置:slaveof {masterip} {masterpo...

305

Redis主从复制详解

Redis 的主从复制(Master-Slave Replication)是实现数据备份、读写分离和水平扩展的核心机制之一。通过主从复制,一个主节点(Master)可以将数据同步到多个从节点(Slave),从节点还可以级联创建自己的从节点,从而形成树状结构。注意,Redis的主从复制是实现高可用的核心机制,并不能实现高可用回到顶部。

weixin_40598518的博客 133
上一篇: 【Redis】Redis中常见的延迟问题 !
下一篇: 【Redis】Redis探秘Sentinel(哨兵模式)!
加班不秃顶
博客等级 码龄7年 1822粉丝 599原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值