1.redis 内部会发出一个同步命令,刚开始是Psync ? -1 表示要求master主机同步数据
2.主机会向从机发送 runid 和 offset,因为slave并没有对应的offset,所以是全量复制
3.从机slave会保存主机master的基本信息 save masterInfo
4.主节点收到全量复制的命令后,执行bgsave(异步执行),在后台生成RDB文件(快照,4.0之后不用生成RDB文件也可以,使用无磁盘化复制),并使用一个缓冲区(称为复制缓冲区,会记录偏移量)记录从现在开始的写命令
5.主机send RDB 文件给从机
6.发送缓冲区数据
7.刷新旧的数据,从节点在载入主节点的数据之前要先将老数据清除
8.加载RDB 文件将数据库状态更新至主节点执行bgsave时的数据库状态和缓冲区数据的加载
-----部分复制------
1.如果出现网络抖动(连接断开 connection lost)
2.主机master 还是会写 replbackbuffer(复制缓冲区)
3.从机slave 会继续尝试连接主机
4.从机slave会把自己当前runid和偏移量传输给主机master,并且执行pysnc命令同步
5.如果master发现你的偏移量是在缓冲区范围内,就会返回continue命令
6.同步了offset的部分数据,所以部分复制的基础就是偏移量offset