文章目录

  • 前言
  • 增量同步
  • 快照同步
  • 无盘复制
  • Wait 指令

前言

Redis 同步支持主从同步和从从同步,从从同步功能是Redis 后续版本增加的功能,为了减轻主库的同步负担。这里我们主要讨论主从同步。

增量同步

Redis 同步的是指令流,主节点会将那些对自己的状态产生修改性影响的指令记录在本地的内存 buffer 中,然后异步将 buffer 中的指令同步到从节点,从节点一边执行同步的指令流来达到和主节点一样的状态,一遍向主节点反馈自己同步到哪里了(偏移量)。
因为内存的 buffer 是有限的,所以 Redis 主库不能将所有的指令都记录在内存 buffer 中。Redis 的复制内存 buffer 是一个定长的环形数组,如果数组内容满了,就会从头开始覆盖前面的内容。

如果因为网络状况不好,从节点在短时间内无法和主节点进行同步,那么当网络状况恢复时,Redis 的主节点中那些没有同步的指令在 buffer 中有可能已经被后续的指令覆盖掉了,从节点将无法直接通过指令流来进行同步,这个时候就需要用到更加复杂的同步机制——快照同步。

快照同步

快照同步是一个非常耗费资源的操作,它首先需要在主库上进行一次 bgsave 将当前内存的数据全部快照到磁盘文件中,然后再将快照文件的内容全部传送到从节点。从节点将快照文件接受完毕后,立即执行一次全量加载,加载之前先要将当前内存的数据清空。加载完毕后通知主节点继续进行增量同步。
在整个快照同步进行的过程中,主节点的复制 buffer 还在不停的往前移动,如果快照同步的时间过长或者复制 buffer 太小,都会导致同步期间的增量指令在复制 buffer 中被覆盖,这样就会导致快照同步完成后无法进行增量复制,然后会再次发起快照同步,如此极有可能会陷入快照同步的死循环。

所以务必配置一个合适的复制 buffer 大小参数,避免快照复制的死循环。
当从节点刚刚加入到集群时,它必须先要进行一次快照同步,同步完成后再继续进行增量同步。

无盘复制

主节点在进行快照同步时,会进行很重的文件 IO 操作,特别是对于非 SSD 磁盘存储时,快照会对系统的负载产生较大影响。特别是当系统正在进行 AOF 的 fsync 操作时如果发生快照,fsync 将会被推迟执行,这就会严重影响主节点的服务效率。
所以从 Redis 2.8.18 版开始支持无盘复制。所谓无盘复制是指主服务器直接通过 SOCKET 将快照内容发送到从节点,生成快照是一个遍历的过程,主节点会一边遍历内存,一遍将序列化的内容发送到从节点,从节点还是跟之前一样,先将接收到的内容存储到磁盘文件中,再进行一次性加载。

Wait 指令

Redis 的复制是异步进行的,wait 指令可以让异步复制变身同步复制,确保系统的强一致性(不严格)。wait 指令是Redis3.0 版本以后才出现的。
wait 提供两个参数,第一个参数是从库的数量 N,第二个参数是时间 t,以毫秒为单位。它表示等待 wait 指令之前的所有写操作同步到 N 个从库(也就是确保 N 个从库的同步没有滞后),最多等待时间 t。如果时间 t=0,表示无限等待直到 N 个从库同步完成达成一致。
假设此时出现了网络分区,wait 指令第二个参数时间 t=0,主从同步无法继续进行,wait 指令会永远阻塞,Redis 服务器将丧失可用性。

Redis 主从同步原理解析相关推荐

  1. Redis主从同步原理

    2.8版本以前 同步(snyc) 执行步骤: 从服务器发送snyc给主服务器 主服务器收到命令后,开始执行bgsave操作,将生成RDB文件,将生成的RDB文件同步给从服务.并使用一个缓冲区记录从现在 ...

  2. Docker搭建Redis主从同步详细教程

    文章目录 介绍: redis主从同步概念 redis主从同步原理 redis主从同步流程图 搭建redis主从详细步骤: 拉取redis镜像 创建所需文件夹,用于映射容器相应文件路径 运行容器指定挂载 ...

  3. Redis主从同步模式(replication)

    主从同步模式(replication) 主从同步是指以一个节点为基准节点,将数据同步给从节点,使得主从节点的数据保持一致,主节点一般也称为Master,从节点Slave,一个Master节点可以有多个 ...

  4. 浅析 Redis 主从同步与故障转移原理

    我们在生产中使用 Redis,如果只部署一个 Redis 实例,当该实例宕机,到恢复之前都不可用:虽说 Redis 一般都用来做缓存,但不可用给业务系统带来的影响也是不小的,流量大时甚至会导致整个服务 ...

  5. 【Redis】Redis主从同步中数据同步原理

    [Redis]Redis主从同步中数据同步原理 文章目录 [Redis]Redis主从同步中数据同步原理 1. 全量同步 1.1 判断是否第一次数据同步 2. 增量同步 3. 优化Redis主从集群 ...

  6. pika主从同步原理

    pika主从同步 主要为了分析探索一下pika是如何实现主从同步的,pika的主从同步的原理与redis的同步方案还不相同,本文主要是为了分析其主从同步的相关流程(pika基于3.4版本). pika ...

  7. 分布式一致性协议 Gossip 和 Redis 集群原理解析

    分布式一致性协议 Gossip 和 Redis 集群原理解析 Redis 是一个开源的.高性能的 Key-Value 数据库.基于 Redis 的分布式缓存已经有很多成功的商业应用,其中就包括阿里 A ...

  8. 【mysql进阶】MTS主从同步原理及实操指南(七)

    0.引言 随着业务场景的深入和请求量的剧增,单库实现读写越来越趋近瓶颈,于是我们想到搭建主从库,主库负责写,从库负责读,从而实现读写分离,提高查询效率. 但是主从库之间的数据如何同步呢?很明显我们写入 ...

  9. 五、Redis主从同步

    Redis 主从同步 一.复制 二.旧版复制功能的实现 2.1.同步操作 2.2.命令传播操作 三.旧版复制功能的缺陷 四.新版复制功能的实现 五.部分重同步的实现 5.1.复制偏移量 5.2.复制积 ...

最新文章

  1. Ubuntu 14.04 64位机上用Caffe+MNIST训练Lenet网络操作步骤
  2. ffmpeg 播放器原理
  3. 借助URLOS快速安装python3网站环境
  4. 转:Oracle SQL 内置函数大全 (一)
  5. 以数据为核心的SOC3.0时代到来
  6. LoadRunner 常用C语言函数使用
  7. C#调用ATL COM
  8. STM32 ADC 单次模式、连续模式、扫描模式(转载)
  9. dubbo-快速入门-分布式RPC框架Apache Dubbo
  10. MySQL 8.0开始Group by不再排序
  11. java进度条代码,java进度条代码该怎么编写?
  12. excel教程自学网_Excel零基础入门到高级自学视频教程
  13. Netty 学习(二):服务端与客户端通信
  14. 《动手学习深度学习》第二天
  15. Java基础23 网络编程 socket套接字流 TCP传输总结
  16. “世上最先进的机器人”在英国亮相,神态丰富堪比“表情包”,能走路就完美了!...
  17. t480s控制面板打开触摸板_ThinkPad T480s 用户指南V4.0--更换键盘部分
  18. 开源5款工具漏洞扫描,打包带走吧!
  19. 汉高2019年上半年实现销售额101亿欧元
  20. Bugly 多渠道热更新解决方案

热门文章

  1. python excel总结
  2. javaSE基础知识篇系列(1-50)——数组
  3. 基于深度学习的水下声纳图像分类方法研究
  4. 请输入文章标题(5 ~ 100个字)
  5. 通过下钻(drill down)进行产品优化
  6. zynq设计学习笔记7-AXI简介
  7. 2022年广西桂林导游资格考试综合试题及答案
  8. JAVA入门初学者练手小项目——图书管理系统
  9. 三五个人十来条枪 如何走出软件作坊成为开发正规军
  10. 使用Multiprocessing.process时出现PicklingError解决方法