Redis 主从同步 问题

前言


 相关系列

  • 《Redis & 目录》
  • 《Redis & 主从同步 & 源码》
  • 《Redis & 主从同步 & 总结》
  • 《Redis & 主从同步 & 问题》
     

 参考文献

  • 《Redis的主从复制和哨兵机制详解》
     
     

什么是主从同步?


    主从同步是Redis用于提高数据可用/可靠性的数据复制机制。主从同步允许Redis实例将自身设置为其它Redis实例的从机,从而令主机的数据可以向从机进行同步。如此一来当主机因为各项原因而宕机且一时难以立即恢复时,从机便可以及时取代主机以对外提供服务,从而得以保证数据的可用/可靠性。此外主从同步还间接具备提升数据读/写性能的效果,因为只要将读/写指令分别引导至从/主机执行以实现读/写分离,那么原本该由主机一力承担的指令便可以分摊至多台Redis实例上并发执行,从而大幅提升读/写效率。
 
 

主从同步有哪些架构?它们的优/缺点分别是什么?


 一主多从

    一主多从架构的核心是令任意数量的从机都同步相同主机,是实际场景使用最为频繁的主从架构…该架构的优/缺点具体如下:

  • 同步效率高:所有的从机都直接由主机负责数据同步。
     
  • 主机负载高:当从机的数量较多时,用于实现数据同步的开销将对主机运行造成相当大的压力。
     

 级联

    级联架构在一主多从架构的基础上添加了等级概念,即其允许从机继续携带从机,而非所有的从机都直接向主机进行同步…该架构的优/缺点具体如下:

  • 主机负载小:主机并不需要负责所有数据同步,这在从机数量较多时可以大幅降低主机的运行压力。
     
  • 同步效率低:数据需要进行多级传导,因为上游从机已完成数据同步的情况下下游从机可能尚未开始同步;
  • 监控难度大:从机的宕机可能导致整个分支不可用,因此在引入哨兵的情况下,所有携带有从机的主/从机都应该被监控。
     
     

主从同步有几种同步方式?大致流程是什么样的?


    主从同步有“全量同步&增量同步”两种同步方式,前者通常(但不限于)在主/从机(启动/重启)首次建立长链接时使用;而后者在用于在网络分区/断线重连时延续之前中断的数据同步。

 全量同步

  • 从机向主机发送{SYNC/PSYNC}指令请求全量同步;
  • 主机接收到{SYNC/PSYNC}指令,并在判定为全量同步后返回全量同步回应。然后异步执行{SAVE}指令生成RDB快照文件,并在文件生成后将之发送至从机。而从RDB快照文件开始生成起,主机并发接收到的所有写指令都会被同步写入replication_buffer @ 复制缓冲区中,以备后续对从机进行持续性的指令同步;复制缓冲区的大小默认为1MB,当满溢时其会阻塞内存读写。此外如果全量同步是由{PSYNC}指令触发的,那么主机接收的“所有”写指令还会被同步写入replication_backlog_buffer @ 复制积压缓冲区中,用于为可能发生增量同步提供数据支持;
  • 从机接收全量同步回应,并准备接受RDB快照文件;
  • 从机接收到RDB快照文件,随后异步加载其中数据。该异步加载可能会阻塞主进程的内存读/写,因为在此期间主进程虽然允许执行其它的初始化行为,但在RDB快照文件正式完成加载前其实不允许接受/执行指令的,否则就会出现数据不一致问题;
  • 主机结束对RDB快照文件的发送,随后持续向从机发送复制缓冲指令以进行持续性的指令同步;
  • 从机持续接收并执行复制缓冲指令,从而实现对主机数据的同步。
     

 增量同步

  • 从机向主机发送{PSYNC}指令请求增量同步;
  • 主机接收{PSYNC}指令,在根据其携带的主机运行ID/从机偏移量确定可执行增量同步后返回增量同步回应。随后通过从机偏移量在复制积压缓冲区中定位最后同步指令的位置,并向从机发送尚未同步的复制加压缓冲指令以实现持续性的指令同步;
  • 从机接收增量同步回应,并准备接受复制积压缓冲指令;
  • 从机持续接收并执行复制加压缓冲指令,从而实现对主机数据的同步。
     
     

开启主从同步后还需要开启持久化吗?推荐的持久化方案又是什么呢?


    持久化机制即使是在已启动主从同步的情况下也是必须开启的,因为数据只有存入磁盘后才能彻底避免/减少丢失的情况发生。而单纯使用主从同步做数据热备是无法彻底做到这一点的,甚至主从同步本身还会成为数据丢失的原因。例如在没有开启持久化机制的情况下,如果主机宕机后又恢复运行,那么主从同步就会导致从机的热备数据因为主机数据的丢失而清空…因此持久化机制才是避免/减少数据丢失的最佳方案。

    在开启主从同步的情况下,主机更推荐同时开启RDB/AOF机制以保证数据尽可能的完整,毕竟其是数据的实际来源,而从机的持久化方案则需要根据实际情况来定。如果从机仅用于在主机宕机时暂用,那么通常是无需开启持久化或只需开启RDB持久化;而如果从机后会用于在主机宕机后作为新主机使用的,那么就推荐和主机一样同时开启RDB/AOF机制。

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

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

相关文章

Go 语言解析 yaml 文件的方法

Go 语言没有内置解析 yaml 文件的功能,实现 yaml 的解析可以使用第三方库 gopkg.in/yaml.v2 和 gopkg.in/yaml.v3。 下面以解析 config.yml 文件为例,演示解析代码的过程。 使用 go get gopkg.in/yaml.v3 添加引用。 在 config 目录下,新增…

深度学习基础—循环神经网络(RNN)

引言 从本系列博客开始,我们将来一起学习一下NLP领域的相关基础知识,NLP领域重要的模型是RNN,在此之前,先来了解一些符号的含义。 1.符号定义 (1)符号定义 假设建立一个能够自动识别句中人名位置的序列模型…

Web测试和APP测试的区别

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 最近听到有些朋友说,移动端要比web端稍微难一些,涉及到的细节笔记要多,有转去做web测试的想法,看看在具体测试的时…

Linux TCP CC状态机

万字详文:TCP 拥塞控制详解 - 知乎bcc/tools/tcpcong.py at master iovisor/bccbcc/tools/tcpcong_example.txt at master iovisor/bcc 1.状态机 2.tcp map 拥塞算法历史 1974年,3次握手被提出;1978年,TCP和IP拆分成TCP/IP&…

如何进行商标注册?

商标注册是一个法律程序,用于保护品牌名称、标志或符号,确保其在商业活动中的独特性和识别度。以下是商标注册的基本流程和注意事项: 商标查询:在提交商标注册申请之前,建议进行商标查询,以了解在先权利情…

视频设备一体化监控运维方案

随着平安城市、雪亮工程等项目建设的号召,视频监控系统的建设如火如荼地开展。无论在公共场所、企业单位、住宅小区、矿山工地还是交通枢纽,视频监控系统已成为保障安全、维护秩序和提升管理效率的重要工具。但由于对视频监控系统中的前端设备&#xff0…

深度数据修复软件哪个好?盘点2024年好用的4个数据恢复工具。

深度数据修复软件可以帮助用户深入存储设备,找回丢失的数据。它们可以有效解决很多场景下的数据丢失问题,如果大家平时会有数据丢失的情况,可以用这几个工具去尝试一些自己进行数据恢复。 1、福昕深度恢复软件 直通车:http://www…

leetcode-73-矩阵置零

题解: 1、初始化变量ls_row与ls_col分别用来存储元素0的所在行与列; 2、获取矩阵的行数M与列数N; 3、遍历矩阵matrix的每一个元素。如果这个元素为0,则将该元素所在行数append到ls_row,所在列append到ls_col。 4、…

什么是 Spring Cloud Bus?我们需要它吗?

在微服务架构中,Spring Cloud 提供了一系列强大的工具和组件来帮助我们构建和管理分布式系统。其中,Spring Cloud Bus 就是一个非常有用的组件,但很多人对它可能还不太了解。那么,什么是 Spring Cloud Bus?我们真的需要…

树莓派基本设置--2. raspi-config工具介绍

raspi-config是树莓派操作系统Raspberry Pi OS中预装的配置工具;raspi-config提供了一种简单便捷的命令行界面来管理树莓派系统的配置,使用户可以轻松地定制和优化其系统设置。 如果使用的是树莓派桌面系统,可以直接在桌面左上角的应用菜单&…

# C#中常见警告类型及处理方法全解

在C#开发过程中,常常会遇到各种各样的警告信息。这些警告虽然不一定会导致程序无法运行,但可能暗示着程序存在潜在的问题或不符合最佳实践。本文将结合多种常见情况,详细介绍如何处理C#中的一些典型警告,帮助开发者更好地理解和应…

五、鸿蒙开发-组件状态管理

提示:本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、状态管理入门1.1 State1.2 Prop1.3 Link1.4 Provide和Consume 二、状态管理深入2.1 …

21 Docker容器集群网络架构:四、Docker集群网络验证

文章目录 Docker容器集群网络架构:四、Docker集群网络验证4.1 创建网络4.2 查看创建的网络4.2.1 查看节点1创建的网络4.2.2 查看节点2创建的网络4.2.3 查看节点3创建的网络4.3 运行容器并查看4.3.1 运行容器4.3.2 节点1查看4.3.3 节点2查看4.3.4 节点3查看Docker容器集群网络架…

STM32学习笔记-GPIO

参考江科大32单片机学习相关知识 GPIO基本构造 APB2(Advanced Peripheral Bus 2)是STM32微控制器架构中的一个外设总线,用于连接一些高性能外设,如定时器、USART、ADC和GPIO等。这些外设通常对性能要求较高,需要更快的…

Python import package

python 获取当前目录上一级目录 import sys import os# 获取当前文件所在目录的上一级目录 parent_dir os.path.abspath(os.path.join(os.path.dirname(__file__), ..))# 将上一级目录添加到 sys.path sys.path.append(parent_dir)# 导入上一级目录中的模块或包 import paren…

如何写好prompt以及评测prompt的好坏

引言 在编写Prompt时,目标是明确、具体地指引AI生成符合期望的输出。以下是一些编写和改进Prompt的经验: Prompt书写经验 明确性: 确保你的Prompt清晰、具体。模糊或广泛的描述可能导致不一致的输出。同时尽量避免否定句法。 上下文&#xf…

java陕西民俗网源码(springboot)

项目简介 陕西民俗网实现了以下功能: 中国陕西民俗网的主要使用者分为: 管理员增删改查商品信息和商品信息资料,审核商品信息预订订单,查看订单评价和评分,通过留言功能回复用户提问。 💕💕作…

【python】OpenCV—WaterShed Algorithm

文章目录 1、功能描述2、代码实现3、完整代码4、效果展示5、涉及到的库函数5.1、cv2.pyrMeanShiftFiltering5.2、cv2.morphologyEx5.3、cv2.distanceTransform5.4、cv2.normalize5.5、cv2.watershed 6、更多例子7、参考 1、功能描述 基于分水岭算法对图片进行分割 分水岭分割…

选择最佳SCRM系统的综合指南

内容概要 在如今竞争激烈的市场中,企业不能仅仅依靠传统的客户管理方式,需要借助现代化的SCRM系统来提升效率和服务水平。SCRM系统,就是“社交客户关系管理”系统,旨在通过社交媒体等渠道与客户进行更深层次的互动。在选择合适的…

学习threejs,导入OBJ格式的模型

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.OBJLoader OBJ模型加…