当前位置: 首页 > news >正文

redis主从复制

主从复制

今天简单了解一下redis中的主从复制

将一台redis服务器上的数据复制到其他redis服务器上,分别是主节点和从节点,主节点和从节点是一对多,数据的复制是单向的,只能由主节点传向从节点,主节点执行写操作,从节点是读操作。主节点会将自己的数据变化通过异步的方式发送给从节点,从节点接收到主节点二点数据之后,更新自己的数据,这样就达到了数据一致的目的

通过配置文件修改从节点

数据同步psync

主从数据同步,同步过程为:全量复制和部分复制

全量复制:⼀般⽤于初次复制场景,Redis 早期⽀持的复制功能只有全量复制,它会把主节点全部数据⼀次性发送给从节点,当数据量较⼤时,会对主从节点和⽹络造成很⼤的开销。

部分复制:⽤于处理在主从复制中因⽹络闪断等原因造成的数据丢失场景,当从节点再次连上主节点后,如果条件允许,主节点会补发数据给从节点。因为补发的数据远⼩于全量数据,可以有效避免全量复制的过⾼开销。

 psync replicationid offset

replicationid : 是主节点启动的时候生成的复制id,每次启动id都不同,从节点和主节点建立了复制关系以后,就会从主节点这里获取到这个id

offset:表示偏移量。主节点会把存入的命令字节数进行累加,当从节点的偏移量和主节点的偏移量相同时,就表示从节点已经同步数据完毕。

当我们使用psync来同步时,psync replicationid -1就表示获取全量数据。psync replicationid 正整数则表示从当前偏移量位置来进行获取数据。

psync执行流程:

从节点发送 psync 命令给主节点,replid 和 offset 的默认值分别是 ? 和 -1.

主节点根据 psync 参数和⾃⾝数据情况决定响应结果:

如果回复 +FULLRESYNC replid offset,则从节点需要进⾏全量复制流程。

如果回复 +CONTINEU,从节点进⾏部分复制流程。

如果回复 -ERR,说明 Redis 主节点版本过低,不⽀持 psync 命令。从节点可以使⽤ sync 命令进⾏全量复制。

  1. psync ⼀般不需要⼿动执⾏. Redis 会在主从复制模式下⾃动调⽤执⾏.
  2. sync 会阻塞 redis server 处理其他请求. psync 则不会.

全量复制流程:

  • 从节点发送 psync 命令给主节点进⾏数据同步,由于是第⼀次进⾏复制,从节点没有主节点的运⾏ ID 和复制偏移量,所以发送 psync ? -1。
  • 主节点根据命令,解析出要进⾏全量复制,回复 +FULLRESYNC 响应。
  • 从节点接收主节点的运⾏信息进⾏保存。
  • 主节点执⾏ bgsave 进⾏ RDB ⽂件的持久化。
  • 主节点发送 RDB ⽂件给从节点,从节点保存 RDB 数据到本地硬盘。
  • 主节点将从⽣成 RDB 到接收完成期间执⾏的写命令,写⼊缓冲区中,等从节点保存完 RDB ⽂件后,主节点再将缓冲区内的数据补发给从节点,补发的数据仍然按照 rdb 的⼆进制格式追加写⼊到收到的 rdb ⽂件中. 保持主从⼀致性。
  • 从节点清空⾃⾝原有旧数据。
  • 从节点加载 RDB ⽂件得到与主节点⼀致的数据。
  • 如果从节点加载 RDB 完成之后,并且开启了 AOF 持久化功能,它会进⾏ bgrewrite 操作,得到最近的 AOF ⽂件。

部分复制

使⽤psync replicationId offset命令实现

过程

  • 当主从节点之间出现⽹络中断时,如果超过 repl-timeout 时间,主节点会认为从节点故障并终止复制连接。
  • 主从连接中断期间主节点依然响应命令,但这些复制命令都因⽹络中断⽆法及时发送给从节点,所以暂时将这些命令滞留在复制积压缓冲区中。
  • 当主从节点⽹络恢复后,从节点再次连上主节点。
  • 从节点将之前保存的 replicationId 和 复制偏移量offset作为 psync 的参数发送给主节点,请求进⾏部分复制。(主节点如果发现replicationid不一样,那就会进行全量复制,否则再使用offset进行部分复制)
  • 主节点接到 psync 请求后,进⾏必要的验证。随后根据 offset 去复制积压缓冲区查找合适的数据,并响应 +CONTINUE 给从节点。
  • 主节点将需要从节点同步的数据发送给从节点,最终完成⼀致性

注意:全量复制以后,主节点数据改动时,也会进行部分复制。

http://www.lqws.cn/news/210691.html

相关文章:

  • 计算机网络第2章(下):物理层传输介质与核心设备全面解析
  • Java高级 | 【实验六】Springboot文件上传和下载
  • 【KiCad】立创封装导入KiCad
  • 高频 PCB 技术发展趋势与应用解析
  • 热电厂中控室无线集控:高清视频监测+PLC远程操控
  • LVDS的几个关键电压概念
  • 迷宫问题(一)(C++版本)
  • MIT 6.S081 Lab 11 networking
  • PicSharp(图片压缩工具) v1.1.6
  • 平面方程在不同坐标系下的变换与平移
  • 按字典序排列最小的等效字符串
  • leetcode 3170. 删除星号以后字典序最小的字符串 中等
  • ios苹果系统,js 滑动屏幕、锚定无效
  • 【HarmonyOS 5】拍摄美化开发实践介绍以及详细案例
  • python 第二章
  • Go 标准库 encoding/gob 快速上手
  • DAY 44 预训练模型
  • 获取 OpenAI API Key
  • 解决MySQL8.4报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded
  • Strong Baseline: Multi-UAV Tracking via YOLOv12 with BoT-SORT-ReID 2025最新无人机跟踪
  • 数组复制--System.arraycopy
  • h5 安卓手机去掉滚动条问题
  • 【DAY42】Grad-CAM与Hook函数
  • 2025年6月|注意力机制|面向精度与推理速度提升的YOLOv8模型结构优化研究:融合ACmix的自研改进方案
  • 用Ai学习wxWidgets笔记——在 VS Code 中使用 CMake 搭建 wxWidgets 开发工程
  • redis分片集群架构
  • 硬盘寻址全解析:从 CHS 三维迷宫到 LBA 线性王国
  • ​​Android 如何查看CPU架构?2025年主流架构有哪些?​
  • SAP 在 AI 与数据统一平台上的战略转向
  • Python从Excel读取数据并生成图表的方法详解