1.简介
把一个存储了很多数据的主节点(master)数据全部同步给一个从节点(slave),在同步的过程中master写入的新数据也需要同步过来,这样才可以达到完整同步的效果。全量复制可以完成上述功能,首先将当前的RDB文件同步给slave,写入命令单独记录,当RDB文件加载完后,通过偏移量的对比将这期间产生的新数据命令同步给slave。
2.流程
- 首次同步时slave不知道master的runid和偏移量,slave将发送psync ? -1(psync是同步命令,可实现全量和部分复制的功能,这里有两个参数runid和offset,?表示runid,-1表示offset)来同步数据
- master将执行一个全量复制,同时返回自己的runid和offset给slave
- slave保存master的基本信息
- master执行bgsave命令做一个RDB的生成,在生成RDB和RDB传输过程中写入的新命令将被推入repl_back_buffer(复制缓冲区)
- master将RDB文件传给 slave
- master将repl_back_buffer(复制缓冲区)传给slave
- slave清除旧的数据
- slave根据RDB文件和repl_back_buffer(复制缓冲区)加载新的数据
3.开销
- bgsave耗费的时间
- RDB文件网络传输耗费的时间
- 从节点清空数据耗费时间(根据从节点的数据规模来定)
- 从节点加载RDB的耗费时间