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

Redis的主从复制过程-理解

【背景】

Redis单节点存在单点故障,为解决单点问题,需要对Redis节点配置从节点。使用哨兵来监听主节点存活状态,若主节点挂掉,从节点能继续提供缓存功能。从节点怎样和主节点间完成数据传递?就是Redis的主从复制。

【主从配置及作用】

临时配置:

redis-cli进入redis从节点后,使用 --slaveof [masterIP] [masterPort]

永久配置:

进入从节点的配置文件redis.conf,增加slaveof [masterIP] [masterPort]

作用:

1)主从配置结合哨兵模式能解决单点故障问题,提高redis可用性

2)从节点仅提高读的操作,主节点提供写操作。对于读多写少的状况,可给主节点配置多个从节点,从而提供响应效率

【复制过程】

1)从节点执行slaveof [masterIP] [masterPort],保存主节点信息

2)从节点中的定时任务发现主节点信息,建立和主节点的socket连接

3)从节点发送Ping信号,主节点返回Pong,两边能互相通信

4)连接建立后,主节点将所有数据发送给从节点(数据同步)

5)主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来,主节点就会持续的把写命令发送给从节点,保证主从数据一致性

【数据同步】

redis 2.8 之前使用sync [runId] [offset]同步命令,redis2.8之后使用psync [runId] [offset]命令。两者不同在于,sync命令仅支持全量复制过程,psync支持全量和部分复制;

介绍同步之前先介绍几个概念:

runId:每个redis节点启动都会生成唯一的runId,每次redis重启后,runId也会发生变化

offset:主节点和从节点都各自维护自己的主从复制偏移量offset,当主节点有写入命令时,offset=offset+命令的字节长度。从节点在收到主节点发送的命令后,也会增加自己的offset,并把自己的offset发送给主节点。这样,主节点同时保存自己的offset,从节点的offset,通过对比offset来判断主从节点数据是否一致

repl_backlog_size:保存在主节点上的一个固定长度的先进先出队列,默认大小为1MB

1)主节点发送数据给从节点过程中,主节点还会进行一些写操作,这时候的数据存储在复制缓冲区。从节点同步主节点数据完成后,主节点将缓冲区的数据继续发送给从节点,用于部分复制;

2)主节点(master)响应写命令时,不但会把命名发送给从节点,还会写入复制积压缓冲区,用于复制命令丢失的数据补救;

【全量复制流程】

1)从节点发送psync ? -1命令,因为第一次发送,不知道主节点的runId,所以为 ?,因为是第一次复制,所以offset = -1

2)主节点发现从节点是第一次复制,变返回FULLRESYNC {runId} {offset},runId是主节点的runId,offset是主节点目前的offset

3)从节点接收主节点信息后,保存到info中

4)主节点在发送FULLRESYNC后,启动bgsave命令,生成RDB文件

5)主节点发送RDB文件给从节点。到从节点加载数据完成这段期间主节点的写命令放入缓冲区。

6)从节点清理自己的数据库数据。

7)从节点加载RDB文件,将数据保存的自己的数据库中

8)如果从节点开启了AOF,从节点会异步重写aof文件

【部分复制流程】

1)部分复制主要是Redis针对全量复制的过高开销做出的一种优化措施,使用psync {runId}{offset}命令实现。当从节点(slave)正在复制主节点(master)时,如果出现网络闪断或者命令丢失等异常情况时,从节点会向主节点要求补发丢失的命令数据,如果主节点的复制积压缓冲区内存将这部分数据则直接发送给从节点,这样就可以保持主从节点复制的一致性。

2)主从连接中断期间主节点依然响应命令,但因复制连接中断命令无法发送给从节点,不过主节点内部存在的复制积压缓冲区,依然可以保存最近一段时间的写命令数据,默认最大缓存1MB。当从节点网络恢复后,从节点会再次连上主节点。

3)当主从连接恢复后,由于从节点之前保存了自身已复制的偏移量和主节点的运行ID。因此会把它们当做psync参数发送个主节点,要求进行部分复制操作。

4)主节点接到psync命令后首先核对参数runId是否与自身一致,如果一致,说明之前复制的是当前主节点;之后根据参数offset在自身复制积压缓冲区查找,如果偏移量之后的数据存在缓冲区中,则对从节点发送+COUTINUE响应,表示可以进行部分复制。

5)主节点根据偏移量把复制积压缓冲区里的数据发送给从节点,保证主从复制进入正常状态。

http://www.cnnetsun.cn/news/3065398.html

相关文章:

  • 2026年免费试用、网页版、易上手的资产管理工具,适合中小企初次数字化
  • 终极免费指南:3步解锁Wand专业版所有功能,告别付费订阅!
  • python安装包 windows mac
  • PTA L1-011 A-B:从字符串中精准“剔除”字符的实战解析
  • 3步轻松提取视频中的PPT:extract-video-ppt完整使用指南
  • Parsec虚拟显示器:3步创建高性能Windows虚拟显示器的终极指南
  • TVA与具身智能之间复杂且深刻的结构性关联(2)
  • 告别音乐格式枷锁:ncmdumpGUI让你真正拥有网易云音乐
  • 科技助老暖心就医!天津职业技术师范大学团队打造CareLink·暖医随行无障碍就医导航助手破解老年人就医难题
  • Tomcat项目本地部署
  • 免费获取A股实时行情数据:MOOTDX终极指南
  • WandEnhancer技术架构深度解析:本地化增强如何实现WeMod Pro功能解锁
  • 从特征值到能量流:基于克里斯托弗方程的群速度计算与可视化实践
  • 2026深度实测:vibe coding常用工具完整上手教程
  • 专知智库三驾马车:管理体检 + 技术引擎,助您从“优秀”迈向“卓越”
  • Transformer多因子预测模型:央行购金预期升温背后的黄金定价逻辑,AI动态决策引擎解析短期变量
  • Python+Flask+MySQL图书管理系统
  • GitHub中文插件:3步打造你的专属中文GitHub开发环境
  • WebGoat靶场实战:手把手复现反射型XSS攻击与防御
  • 3个实用场景揭秘:为什么你的Windows电脑需要这个“防休眠神器“
  • 插板阀密封失效的技术诊断:原因分析与快速修复方案
  • AMD Ryzen处理器终极调试工具:ZenStatesDebugTool完全指南
  • 3分钟上手 AtomCode,让 AI 帮你写代码
  • Zephyr 源码调试:从零搭建 QEMU 虚拟化调试环境
  • 从信息熵到相位传递熵:原理、计算与代码实战(MATLAB/Python)
  • 演唱会荧光棒XL2400T芯片加PA放大后距离可达700米
  • 剑与翼官方下载指南 2026 最新入口,力魔野外单挑拉扯连招输出手法详解
  • 微信聊天记录跨电脑迁移:从手动备份到一键同步的完整指南
  • 鲁L蒲公英6.29股市日记:管住手,管住心!
  • Qt6.5.2 集成官方MQTT模块:从源码编译到项目部署的CMake实践指南