PSYNC 部分重同步的原理
PSYNC 部分重同步的原理
部分重同步分为三部分:
主服务器的复制偏移量和从服务器的复制偏移量
主服务器的复制积压缓冲区
服务器的运行 ID
主服务器的复制偏移量和从服务器的复制偏移量
执行复制的主服务器和从服务器都会分别维护一个复制偏移量,主服务器每次向从服务器传播 N 个字节的数据,将自己的复制偏移量的值加 N,从服务器每次收到主服务器传播来的 N 个字节的数据,将自己的复制偏移量加 N
当主从服务器的偏移量相同说明主从服务器处于一致状态
主服务器的复制积压缓冲区
复制积压缓冲区是由主服务器维护的一个固定长度先进先出队列,默认大小为 1MB
当主服务器进行命令传播时,不仅会将写命令发送给所有从服务器,还会将写命令入队到复制积压缓冲区里面,复制积压缓冲区为队列中的每个字节记录相应的复制偏移量
当从服务器重新连上主服务器时,从服务器会通过 PSYNC 命令将自己的复制偏移量 offset 发送给主服务器,主服务器根据这个复制偏移量决定进行部分重同步操作还是完整重同步,如果偏移量之后的数据存在于复制积压缓冲区里,对从服务器执行部分重同步操作,如果不存在进行完整重同步
服务器的运行 ID
每个 Redis 服务器都有个运行 ID,运行 ID 在服务器启动时自动生成,由 40 个随机的十六进制字符组成,当从服务器对主服务器进行初次复制时,主服务器将自己的运行 ID 传给从服务器,从发起将这个运行 ID 保存起来。当从服务器断线后重连主服务器,将运行 ID 发送给主服务器,如果两个 ID 相同,说明从服务器断线之前复制的就是当前连接的这个主服务器,进行部分重同步,如果两者不相同就需要进行完整重同步
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/6667bafb2213f54f95b28d6c8】。文章转载请联系作者。
评论