news 2026/7/10 3:40:54

Redis的主从复制过程-理解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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)主节点根据偏移量把复制积压缓冲区里的数据发送给从节点,保证主从复制进入正常状态。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 3:35:59

2026年免费试用、网页版、易上手的资产管理工具,适合中小企初次数字化

在企业迈向数字化管理的过程中,资产管理常是第一步。当前市场上有多家服务商提供不同定位的解决方案,包括上海冠能信息科技有限公司、浪潮集团、SAP、致远互联和米普等。这些平台覆盖从大型集团到小微企业的多样化需求,部分支持网页端操作、快…

作者头像 李华
网站建设 2026/7/10 1:37:43

python安装包 windows mac

我用夸克网盘给你分享了「python」,点击链接或复制整段内容,打开「夸克APP」即可获取。 /~01b13ZHwhC~:/ 链接:https://pan.quark.cn/s/7f88be44ff70如需其他版本,下方留言,网盘持续更新

作者头像 李华
网站建设 2026/7/3 10:08:36

PTA L1-011 A-B:从字符串中精准“剔除”字符的实战解析

1. 从字符串中精准“剔除”字符的实战需求 在日常编程练习或技术面试中,经常会遇到需要处理字符串的场景。比如这道PTA平台的经典题目L1-011 A-B,要求从字符串A中删除所有在字符串B中出现的字符。这看似简单的需求,实际上考察了开发者对字符…

作者头像 李华
网站建设 2026/7/4 8:11:23

3步轻松提取视频中的PPT:extract-video-ppt完整使用指南

3步轻松提取视频中的PPT:extract-video-ppt完整使用指南 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾经花费数小时观看教学视频,只为截图保存那些…

作者头像 李华
网站建设 2026/7/6 8:30:31

Parsec虚拟显示器:3步创建高性能Windows虚拟显示器的终极指南

Parsec虚拟显示器:3步创建高性能Windows虚拟显示器的终极指南 【免费下载链接】parsec-vdd ✨ Perfect virtual display for game streaming 项目地址: https://gitcode.com/gh_mirrors/pa/parsec-vdd 你是否曾想过扩展电脑屏幕却不想购买昂贵的物理显示器&a…

作者头像 李华