深刻理解Redis集群(中):Redis主从数据同步模式

Redis 和数据库的数据同步 每一种同步方式都有它的优缺点,但只要合理搭配,Redis 和数据库之间的数据同步就能像故事中的冒险一样,充满智慧与奇迹。如果没有,Cache Aside 就不得不跑到数据城,从数据库居民那里获取最新的信息,并将这些信息存放在自己的缓存仓库里,以备下次使用。每当访客需要更新信息时,Write Through 先将信息送到 Redis 的缓存仓库,然后再马不停蹄地奔向数据城,将同样的信息传递给数据库居民。这使得即使在高并发的情况下,信息也能有条不紊地同步到数据城,确保王国的信息管理一如既往的高效。 阅读详情

486e326a317e02655b9ad8a6a9804c1e.png

背景

bc74e3e399bde50314b443e529c66268.png

目前实现Redis高可用的模式主要有三种:主从模式、哨兵模式、集群模式。今天我们先来聊一下主从模式。

Redis 提供的主从模式,是通过复制的方式,将主服务器上的Redis的数据同步复制一份到从 Redis 服务器,这种做法很常见,MySQL通过binlog进行的主从复制也是这么做的。

主节点的Redis我们称之为master,从节点的Redis我们称之为slave,主从复制为单向复制,只能由主到从,不能由从到主。

可以有多个从节点,比如1主3从甚至n从,从节点的多少根据实际的业务需求来判断。

搭建Redis主从复制模式

Redis的主从架构中,主节点的数据更新会自动被复制到从节点,确保数据的一致性。主从复制的开启,在从节点配置和发起即可,不需要我们在主节点做任何事情。

5df2f938b47db640d457c0c27e961293.png

可以通过 replicaof(Redis 5.0 之前使用 slaveof)命令形成主库和从库的关系。

主从复制原理

主从库模式开启之后,应用层面采用读写分离,所有数据的写操作只会在主库上进行,而读操作基本会在从库上进行(特殊情况下部分读业务允许走主库)。

主从会保持最终一致性:主库有了数据更新之后,会立即同步给从库,来保证主从库的数据的一致的。

主从架构如何保证数据一致性

为了保证主服务器Redis的数据和从服务器Redis的数据的一致性,也为了分担访问压力,均衡负载,应用层面一般采取读写分离的模式。

读操作:主、从库都可以执行,一般是在从库上读数据,对实时性和准确性有100%高真要求的部分业务,在谨慎评估之后也可以读主库,前提是不能给Master带来高压力和风险

2878e4a6177c4ef346d6994b546bc500.png

主从同步实践

配置&启动master

28286790c917e74696515f88a1c7e47b.png

查看主节点信息

3f75283333ba8ae653d937c1c28a1392.png

配置&启动slave

6d2775635d596e446082e11554734860.png

查看从节点信息

34b4fe2589b00bbca287e40485669a41.png

从节点不能写入,只能读出

ba9738c7a907fd502638f6577dd240ab.png

验证数据同步

redis-cli -h 127.0.0.1 -p 6379 // master

redis-cli -h 127.0.0.1 -p 6380 //slave

7680cd903d057c973e05fcf58ea2f82d.png

结论

默认是走RDB复制模式,PSYNC 命令是Redis中用于从节点与主节点之间数据同步的关键命令。

主从复制的好处:

  • 数据冗余,实现数据的热备份

  • 故障恢复,避免单点故障带来的服务不可用

  • 读写分离,负载均衡。主节点负载读写,从节点负责读,提高服务器并发量

  • 高可用基础,是哨兵机制和集群实现的基础

复制原理

Redis 的主从复制机制均采用异步复制,我们也称为乐观复制,这种复制方式意味着不能完全保证主库和从库数据的实时一致性。

Redis的主从复制机制可以根据不同的业务场景可以采用不同的应对方式。下面是一些主要场景及其对应的实现方案:

  1. 首次配置完成主从库之后的全量复制:在从库第一次连接到主库时,将采用psync复制方式进行全量复制。这意味着从库会从头开始复制主库中的全部数据。主从正常运行期间,准实时同步:在正常运行状态下,从库通过读取主库的缓冲区来进行增量复制。这个过程涉及复制主库上发生的新的数据变更。从库第二次启动(异常或主从网络断开后恢复):Append增量数据 + 准实时同步将通过读取主库的缓冲区进行部分复制。这种方式能够快速同步中断期间发生的数据变更,而不会对主库造成重大影响。

b06c508d837910f04ffd7d86befc4e0b.png

数据同步

在主从服务器建立连接确认各自身份之后,就开始数据同步,从服务器向主服务器发送PSYNC命令,执行同步操作,并把自己的数据库状态更新至主服务器的数据库状态

Redis的主从同步分为:完整重同步(full resynchronization)和部分重同步(partial resynchronization)

全量同步

有两种情况下是完整重同步,一是slave连接上master第一次复制的时候;二是如果当主从断线,重新连接复制的时候有可能是完整重同步,这个在后面说

下面是完整重同步的步骤

c175502582ea777a38b032519a2d0ac1.png

  1. 从服务器连接主服务器,发送SYNC命令

  2. 主服务器接收到SYNC命名后,开始执行bgsave命令生成RDB文件并使用缓冲区记录此后执行的所有写命令

  3. 主服务器basave执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令

  4. 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照

  5. 主服务器快照发送完毕后,开始向从服务器发送缓冲区中的写命令

  6. 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令

增量同步

部分重同步是用于处理断线后重复制的情况,先介绍几个用于部分重同步的部分

  • runid(replication ID),主服务器运行id,Redis实例在启动时,随机生成一个长度40的唯一字符串来标识当前节点

  • offset,复制偏移量。主服务器和从服务器各自维护一个复制偏移量,记录传输的字节数。当主节点向从节点发送N个字节数据时,主节点的offset增加N,从节点收到主节点传来的N个字节数据时,从节点的offset增加N

  • replication backlog buffer,复制积压缓冲区。是一个固定长度的FIFO队列,大小由配置参数repl-backlog-size指定,默认大小1MB。需要注意的是该缓冲区由master维护并且有且只有一个,所有slave共享此缓冲区,其作用在于备份最近主库发送给从库的数据

当slave连接到master,会执行PSYNC <runid> <offset>发送记录旧的master的runid(replication ID)和偏移量offset,这样master能够只发送slave所缺的增量部分。但是如果master的复制积压缓存区没有足够的命令记录,或者slave传的runid(replication ID)不对,就会进行完整重同步,即slave会获得一个完整的数据集副本

c0404ccc0684efa16af6ee85177b494c.png

PSYNC命令执行完整重同步和部分重同步的流程图

240f7fd595edfcd1f80657dccd0edf6d.png

真实部署架构

27c21a48f28f00f5a80096eab802e328.png

总结

  • 主从复制的作用一个是为分担读写压力,均衡负载,另一个是为了保证部分实例宕机之后服务的持续可用性,所以Redis演变出主从架构和读写分离。

  • 主从复制的步骤包括:建立连接的阶段、数据同步的阶段、基于长连接的命令传播阶段。

  • 数据同步可以分为全量复制和部分复制,全量复制一般为第一次全量或者长时间主从连接断开。

  • 主从模式是比较低级的可用性优化,要做到故障自动转移,异常预警,高保活,还需要更为复杂的哨兵或者集群模式,这个后面我们继续介绍。

其他文章

Kafka消息堆积问题排查

基于SpringMVC的API灰度方案

理解到位:灾备和只读数据库

SQL治理经验谈:索引覆盖

Mybatis链路分析:JDK动态代理和责任链模式的应用

大模型安装部署、测试、接入SpringCloud应用体系

Mybatis插件-租户ID的注入&拦截应用

redis第六讲 数据同步 主从库:将一份数据同时保存在多个实例上。即使有一个实例出现了故 障,需要过一段时间才能恢复,其他实例也可以对外提供服务。 读写分离: 读操作:主库、从库都可以接收; 写操作:首先到主库执行,然后,主库将写操作同步给从库 y? 如上图上面那个,会让数据在三个实例上的副本不一致。如果我们非要保持这个数据在三个实例上一致,就要涉及到加锁、实例间协商是否完成修改等一系列操作,但这会带来巨额的开销。 replicaof 172.16.19.3 6379 变成172.16.19.3的从库。 第一次同步:主从级联模式分担 阅读详情

相关推荐

使用Redis-Shake进行Redis集群间的数据同步详细介绍

Redis集群数据同步,Redis-Shake工具使用; 本介绍主要侧重容灾解决方案,具体业务情况具体分析。

qq_39344638的博客 6461

redis集群如何同步

如果真的是这样的话,服务器的利用率和性能就太低了,因为先放第一个,其他的服务器节点就闲置下来了,单个节点的压力就会非常的大,其实就相当于退化成为了单机服务。是如何把数据分配到集群中的每一个节点的,可能有人会说,把集群中的每一个节点编号,先放第一个节点,放满了就放第二个节点,以此类推。一个数据的时候,首先会查找这个数据对应的槽位是多少,然后查找对应的节点,然后才把数据放入这个节点。匀的分配到集群中的每一个节点上,从而做到了每一个节点的负载均衡,充分发挥了集群的威力。的方式,但是有着增删节点重算的致命问题。

2301_78145669的博客 1431

【电击防护篇】电击防护技术详解:从人体效应到接地系统全解析

本文系统讲解了电击防护的关键知识,包括电流对人体的影响(如30mA是心室颤动阈值)、人体电阻特性(700Ω-6100Ω)以及电气接触防护措施。重点分析了TT、TN和IT三大接地系统的结构特点与应用场景,强调TN-S系统最安全,IT系统供电连续性最佳。详细介绍了漏电保护器(RCD)的工作原理与选型指南,建议人身防护选用30mA高灵敏度RCD。文章通过对比表总结三大系统的安全性、成本及适用场景,为电气安全设计提供实用参考。

2301_81299416的博客 1743

Redis主从架构、数据同步原理、全量同步、增量同步

如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。1、Replication Id:简称replid,是数据集的标记,id一致则说明是同一数据集。目前已经700+订阅,优快云最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离。

学Java,找哪吒 4267

实测有效防止colab自动断开连接

实测有效防止colab自动断开连接

Thebest_jack的博客 1万+

从三个角度理解知识图谱

2012年谷歌首次提出“知识图谱”这个词,由此知识图谱在工业界也出现得越来越多,对于知识图谱以及相关概念的理解确实也是比较绕。自己在研究大数据独角兽Palantir之后开始接触知识图谱,也算对其有了一定了解,这里从三个角度总结一下怎么去理解知识图谱。 几个基本概念:本体、实体、知识库、知识图谱 1、本体是概念的集合,是大家都公认的概念框架,一般不会改变如“人”、“事”、“物”、 “地”、“组...

JavaChaoCo的博客 6902

说说Redis的集群方案?主从复制、哨兵、Cluster集群的区别和适用场景。

从架构演进的视角,深度剖析了Redis的三种集群方案——主从复制、哨兵模式、Cluster集群。通过真实的生产案例、详细的技术原理分析和大量的架构图,帮助开发者理解每种方案解决的核心问题,以及如何根据业务规模、QPS、可用性要求做出正确的技术选型。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 1万+

Delta并联机械手-Codesys实现以及正解逆解研究

由于Codesys的Robotics模块有Delta并联机械手的运动模型,因此借助Codesys的机械手运动模型,研究自己的正解逆解算法。

weixin_42386991的博客 5566

Redis高可用集群一主从复制概述

在分布式集群系统中为了解决服务单点故障问题,通常会把数据复制出多个副本部署到不同的机器中,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础Redis的哨兵和集群(Cluster)模式都是在主从复制模式的基础上实现的。复制也是Redis日常运维的常见维护点。因此深刻理解复制的工作原理与使用技巧对日常的运维非常有帮助。

m0_58259081的博客 1204

《全连接到卷积神经网络:图像识别的演变历程》

这篇文章会从传统全连接层面临的困境说起,揭示卷积神经网络(CNN)成为图像识别核心动力的原因,探究其背后蕴含的设计思想与技术创新。但是回顾历史,CNN的出现提醒我们:技术的突破往往是由对自然规律的模仿和重新构建得来的。也许,当机器真的学会“像人一样看世界”的时候,它们的“眼睛”早就超过生物视觉的限制了。例如,用5×5的核处理224×224的输入时,只要25个参数(而不是全连接那种百万级的)。* 局部性:网络的底层只需留意局部的地方(像边缘、纹理这样的地方),不用管那些全局像素之间复杂的关系。

2401_82434295的博客 674

C#怼倍福TwinCAT3:ADS协议封装实战(附完整读写源码+避坑清单)

变量名大小写敏感:PLC里定义的是GVL.bStart,你写GVL.BStart绝对读不到;数组访问格式:PLC数组是,C#里读单个元素要写,读整个数组不用写索引;句柄要释放:用创建的句柄,一定要用using包起来,否则会占着资源;PLC必须运行:哪怕变量定义对了,PLC没Run(只是Login)也读不到数据;路由配置:如果上位机和PLC不在一个网段,要在TwinCAT3里添加路由(Router→Edit Routes)。倍福ADS通信其实不难,核心就是“配置对+变量名写对+数据类型匹配”。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 950

深刻理解Redis集群(下):Redis 哨兵(Sentinel)模式

背景现在对3个节点的sentinel进行配置。sentinel的配置文件在redis的安装目录中已经存在,只需要复制到指定的位置即可。sentinel是独立进程,有对应的脚本来执行。基于之前的redis 一主二从的架构,我们继续启动3个sentinel进程。哨兵模式的架构图如下:启动哨兵们sentinel6379.confprotected-mode no port 26379 daemoni...

Diligence is the mother of success. 2108

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理

分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。

kkchenjj的博客 1100

Redis的主从复制

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制的基础上实现高可用的。复制也是Redis日常运维的常见维护点。因此深刻理解复制的工作原理与使用技巧对我们日常开发运维非常有帮助。

qq_45726327的博客 854

SAP BOM反查(可追溯值至顶级)

功能介绍:BOM层数在7层以内的(含7层)的物料,执行后都可以查询到顶级的BOM,逻辑很简单,后期如BOM层数增加,可自行增加查询逻辑。 *&---------------------------------------------------------------------* *& Report ZBOM_CHECK *&---------------------...

SAP阿狸 6061

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Redis 主从复制

Redis主从复制是高可用架构的基础,通过数据副本实现故障恢复和负载均衡。文章详细解析了Redis主从结构(一主一从、一主多从、树状结构)及其适用场景,深入剖析了复制原理(全量/部分复制流程、心跳机制、异步复制)和核心组件(复制偏移量、积压缓冲区)。同时提供了主从配置管理要点(建立/断开复制、安全验证、只读模式)和部署案例,包括双实例配置、参数调优和验证方法。通过理论结合实践,帮助读者掌握Redis主从复制的技术细节与运维技巧,为构建高可用Redis集群奠定基础。

2501_92914059的博客 1200

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

linux系统-----Redis主从复制

在分布式集群系统中为了解决服务单点故障问题,通常会把数据复制出多个副本部署到不同的机器中,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础Redis的哨兵和集群(Cluster)模式都是在主从复制模式的基础上实现的。复制也是Redis日常运维的常见维护点。因此深刻理解复制的工作原理与使用技巧对日常的运维非常有帮助。

weixin_60047971的博客 964

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Redis主从复制

Redis主从复制是构建高可用Redis架构的基础,通过数据副本实现故障恢复和负载均衡。文章详细介绍了Redis主从结构的三种拓扑形式(一主一从、一主多从、树状结构)及其适用场景,深入解析了主从复制的工作原理,包括全量复制和部分复制的流程、心跳检测机制等关键环节。同时提供了详细的Redis主从配置部署步骤,涵盖环境准备、服务安装、参数配置及功能验证等实践内容,并针对密码验证、只读模式、传输延迟等安全性问题给出解决方案。通过实际案例演示了如何搭建一主两从的Redis复制环境,帮助读者掌握Redis复制技术的核

2501_92915057的博客 1161

零基础新手小白快速了解掌握服务集群与自动化运维(十五)Redis模块-Redis主从复制

本文介绍了Redis主从复制的原理、配置与部署。Redis主从复制通过数据副本实现高可用,支持一主一从、一主多从和树状结构三种拓扑。复制流程包括连接建立、权限验证、数据同步等步骤,支持全量复制和部分复制两种方式。文章详细讲解了psync命令的工作原理,以及心跳检测、异步复制等机制。同时提供了完整的Redis主从环境部署案例,包括master和slave节点的配置步骤、参数调优建议以及功能验证方法。通过合理配置主从复制,可以有效提升Redis系统的可靠性和性能。

uname_xuan的博客 954

Redis主从复制(小白的“升级打怪”成长之路)

在分布式集群系统中为了解决服务单点故障问题,通常会把数据复制出多个副本部署到不同的机器中,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础Redis的哨兵和集群(Cluster)模式都是在主从复制模式的基础上实现的。复制也是Redis日常运维的常见维护点。因此深刻理解复制的工作原理与使用技巧对日常的运维非常有帮助。

deeper_wind的博客 783
上一篇: 深刻理解Redis集群(下):Redis 哨兵(Sentinel)模式
下一篇: 深刻理解Redis集群(上):RDB快照和AOF日志
后台技术汇
博客等级 码龄11年 670粉丝 531原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值