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

news2024/12/23 13:47:31

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的注入&拦截应用

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

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

相关文章

函数式接口在Java中的应用与实践

1. 引言 函数式接口是Java 8引入的一个概念&#xff0c;它是指只有一个抽象方法的接口。函数式接口可以被用作lambda表达式的目标类型。在函数式接口中&#xff0c;除了抽象方法外&#xff0c;还可以有默认方法和静态方法。 函数式接口的引入是为了支持函数式编程&#xff0c…

SpringBoot 源码解读与自动装配原理结合Actuator讲解

Spring Boot 作为简化 Spring 应用开发的重要框架&#xff0c;能够通过“约定大于配置”的方式&#xff0c;使开发者无需大量的 XML 或配置类即可完成复杂的配置过程。这背后的核心机制之一就是 自动装配 (Auto-Configuration)&#xff0c;其依赖 Spring 的 依赖注入 (DI) 和 注…

AI通用大模型编程需要的能力

这几天研究通过通义千问AI大模型编程&#xff0c;有三点感受&#xff0c;分享给大家。如果将来有新的感受&#xff0c;会继续分享。 1、清晰的提示词指令&#xff0c;让输出的成功率更高 2、了解点代码知识&#xff0c;虽不会写&#xff0c;但能看的懂 3、定位代码问题的能力…

数据库软题5-SQL语言

一、DDL数据定义语言 题 1-创建视图 建立视图属于DDL的知识 建立视图要用到CREATE AS CREATE View Computer-BOOK ASSELECT 图书编号、图书名称、作者、出版社、出版日期FROM 图书WHERE 图书类型计算机 WITH CHEEK OPTION&#xff1b;二、DQL数据查询语言 题1-交 查询平均…

SAP 和 Carahsoft 的调查范围扩大到与近 100 家机构

美国司法部正在扩大对德国软件公司SAP和经销商Carahsoft的价格操纵调查&#xff0c;涉及近100个政府机构。这项调查最初集中在两家公司是否在2014年以来向美国国防部和其他政府部门收取过高费用&#xff0c;涉及金额超过20亿美元。最新的法院文件显示&#xff0c;调查范围已扩展…

HTTPS协议详解:从原理到流程,全面解析安全传输的奥秘

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…

精准农业中遥感技术应用(六)- 作物长势分析和展示

橙蜂智能公司致力于提供先进的人工智能和物联网解决方案&#xff0c;帮助企业优化运营并实现技术潜能。公司主要服务包括AI数字人、AI翻译、领域知识库、大模型服务等。其核心价值观为创新、客户至上、质量、合作和可持续发展。 橙蜂智农的智慧农业产品涵盖了多方面的功能&…

Linux之实战命令23:lsattr应用实例(五十七)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

解锁中英互译新工具,4款翻译助手带你畅游语言世界。

在现在的全球化的大背景下&#xff0c;中英互译工具显得十分的重要&#xff0c;我们无论是跨文化学习、工作还是生活旅行&#xff0c;都离不开有效的中英互译。今天我们就来说说几款高效的中英互译工具&#xff0c;希望它们能够在生活中给大家带来帮助。 1、中英在线翻译大师 …

Vortex GPGPU的github流程跑通与功能模块波形探索(二)

文章目录 前言一、环境配置和debugging.md文档1.1 调试 Vortex GPU1.1.1测试 RTL 或模拟器 GPU 驱动的更改1.1.2 SimX 调试1.1.3 RTL 调试1.1.4 FPGA 调试1.1.5 分析 Vortex 跟踪日志 二、跑出波形文件和日志文件总结 前言 昨天另辟蹊径地去探索了子模块的波形仿真&#xff0c…

读数据湖仓05数据需要的层次

1. 业务价值 1.1. 技术和商业在这个世界上是相互交织的 1.1.1. 基础数据在商业和技术应用中是不可或缺的 1.2. 技术的存在是为了推动商业的目标和进步&#xff0c;并由企业出资支持 1.2.1. 当技术推动商业发展时&#xff0c;商业会蓬勃发展&#xff0c;技术也会随之繁荣 1.…

Megabit兆比特10月比特币激增做好准备-最新加密货币新闻

Kaiko Research最近的分析表明&#xff0c;交易员正在积极为潜在的强劲表现做好准备特币(BTC)比今年十月。目前&#xff0c;BTC的交易价格为60800美元&#xff0c;在测试了60000美元的支撑位后&#xff0c;最近上涨了800美元。Megabit兆比特自成立以来,Megabit凭借用户友好的界…

初识Linux以及Linux的基本命令

千呼万唤始出来&#xff0c;Linux系列的文章从今天起开始不定期更新&#xff0c;闲话少叙&#xff0c;我们直接进入正题 目录 初识Linux 前置知识点 什么是路径&#xff1f; 什么是目录&#xff1f; 什么是文件&#xff1f; Linux的基本命令 Linux中的复制粘贴 创建文件…

数据仓库的建设——从数据到知识的桥梁

数据仓库的建设——从数据到知识的桥梁 前言数据仓库的建设 前言 企业每天都在产生海量的数据&#xff0c;这些数据就像无数散落的珍珠&#xff0c;看似杂乱无章&#xff0c;但每一颗都蕴含着潜在的价值。而数据仓库&#xff0c;就是那根将珍珠串起来的线&#xff0c;它能够把…

【AIGC】2020-NIPS-去噪扩散概率模型

2020-NIPS-Denoising Diffusion Probabilistic Models 去噪扩散概率模型摘要1. 引言2. 背景3. 扩散模型和去噪自动编码器3.1 正向过程和 L T L_{T} LT​3.2 逆过程与 L 1 : T − 1 L_{1:T-1} L1:T−1​3.3 数据缩放、逆过程解码器和 L 0 L_{0} L0​3.4 简化的训练目标 4. 实…

FreeRTOS篇7:队列

一.什么是队列 队列又称消息队列&#xff0c;是一种常用于任务间通信的数据结构&#xff0c;队列可以在任务与任务间、中断和任 务间传递信息。 为什么不使用全局变量&#xff1f; 如果使用全局变量&#xff0c;兔子&#xff08;任务1&#xff09;修改了变量 a &#xff0c;…

基于Arduino的宠物食物分配器

创作本文的初衷是本人的一个养宠物的梦想&#xff08;因为家里人对宠物过敏&#xff0c;因此养宠物的action一直没有落实&#xff09;&#xff0c;但是梦想总是要有的哈哈哈哈哈。上周正好是和一个很好的朋友见面&#xff0c;聊到了养宠物的事情&#xff0c;她大概是讲到了喂宠…

Redis: Sentinel工作原理和故障迁移流程

Sentinel 哨兵几个核心概念 1 ) 定时任务 Sentinel 它是如何工作的&#xff0c;是如何感知到其他的 Sentinel 节点以及 Master/Slave节点的就是通过它的一系列定时任务来做到的&#xff0c;它内部有三个定时任务 第一个就是每一秒每个 Sentinel 对其他 Sentinel 和 Redis 节点…

浏览器 F12 application 应用程序面板

在大多数现代浏览器中&#xff0c;按下 F12 键会打开开发者工具&#xff08;Developer Tools&#xff09;&#xff0c;这是一个为开发者设计的强大工具集&#xff0c;用于调试网页和应用。在开发者工具中&#xff0c;“Application”&#xff08;应用程序&#xff09;面板提供了…

Hystrix学习

系列文章目录 JavaSE基础知识、数据类型学习万年历项目代码逻辑训练习题代码逻辑训练习题方法、数组学习图书管理系统项目面向对象编程&#xff1a;封装、继承、多态学习封装继承多态习题常用类、包装类、异常处理机制学习集合学习IO流、多线程学习仓库管理系统JavaSE项目员工…