开发者学堂课程【Redis 入门到精通(进阶篇):主从复制-工作流程(2)数据同步与命令传播阶段(全)】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/765/detail/13456
主从复制-工作流程(2)数据同步与命令传播阶段(全)
本章的内容主要介绍数据同步以及命令阶段的工作流程
一,数据同步+命令传播阶段工作流程
以下流程顺序依次为数据大小所运行
1.slave 方流程
(1).发送指令: psync2 ?-1
psync2 <runid> <offset>
(4)收到 +FULLRESYNC
保存 master 的 runid 和 offset
清空当前全部数据,通过 socket 接收 RDB 文件,恢复 RDB 数据。
(5).发送命令:psync2 runid offset
(8).收到 +CONTINUE保存 master 的 offset
接收信息后,执行 bgrewriteaof,恢复数据。
2.master 方流程
(2).执行 bgsave 生成 RDB 文件,记录当前的复制偏移量 offset
(3).发送 +FULLRESYNC runid offset
通过 socket 发送 RDB 文件给 slave
期间接收客户端命令,offset 发生了变化
(6).接收命令,判定 runid 是否匹配,判定 offset 是否在复制缓冲区中。
(7).①如果 runid 或 offset 有一个不满足,执行全量复制。
②如果 runid 或 offset 校验通过,offset 与 offset 相同,忽略。
③如果 runid 或 offset 校验通过,offset 与 offset 不相同时
发送+CONTINUE offset
通过 socket 发送复制缓冲区中 offset 到 offset 的数据
注意:其中[1,2,3,4]顺序的流程为全量复制,[5,6,7,8]的过程为部分复制。