河北建设工程信息网正规网站,郑州市域名服务公司,网站开发的基本技术路线,开发公司春联背景#xff1a;
部分重同步则用于处理断线后重复制情况#xff1a;当从服务器在断线 后重新连接主服务器时#xff0c;如果条件允许#xff0c;主服务器可以将主从服务器连 接断开期间执行的写命令发送给从服务器#xff0c;从服务器只要接收并执行这 些写命令#xff…背景
部分重同步则用于处理断线后重复制情况当从服务器在断线 后重新连接主服务器时如果条件允许主服务器可以将主从服务器连 接断开期间执行的写命令发送给从服务器从服务器只要接收并执行这 些写命令就可以将数据库更新至主服务器当前所处的状态
部分重同步功能由以下三个部分构成
·主服务器的复制偏移量replication offset和从服务器的复制偏移量。
·主服务器的复制积压缓冲区replication backlog。
·服务器的运行IDrun ID。
1.复制偏移量
执行复制的双方——主服务器和从服务器会分别维护一个复制偏移 量
·主服务器每次向从服务器传播N个字节的数据时就将自己的复制 偏移量的值加上N。
·从服务器每次收到主服务器传播来的N个字节的数据时就将自己 的复制偏移量的值加上N 如果这时主服务器向三个从服务器传播长度为33字节的数据那么 主服务器的复制偏移量将更新为100863310119而三个从服务器在接 收到主服务器传播的数据之后也会将复制偏移量更新为10119‘ 通过对比主从服务器的复制偏移量程序可以很容易地知道主从服 务器是否处于一致状态
·如果主从服务器处于一致状态那么主从服务器两者的偏移量总 是相同的。
·相反如果主从服务器两者的偏移量并不相同那么说明主从服 务器并未处于一致状态
2.复制积压缓冲区
复制积压缓冲区是由主服务器维护的一个固定长度fixed-size先 进先出FIFO队列默认大小为1MB
当主服务器进行命令传播时它不仅会将写命令发送给所有从服务 器还会将写命令入队到复制积压缓冲区里面 主服务器的复制积压缓冲区里面会保存着一部分最近传播的 写命令并且复制积压缓冲区会为队列中的每个字节记录相应的复制偏 移量 自己的复制偏移量offset发送给主服务器主服务器会根据这个复制偏 移量来决定对从服务器执行何种同步操作
·如果offset偏移量之后的数据也即是偏移量offset1开始的数据 仍然存在于复制积压缓冲区里面那么主服务器将对从服务器执行部分 重同步操作。
·相反如果offset偏移量之后的数据已经不存在于复制积压缓冲 区那么主服务器将对从服务器执行完整重同步操作
3.服务器运行id
除了复制偏移量和复制积压缓冲区之外实现部分重同步还需要用 到服务器运行IDrun ID ·每个Redis服务器
不论主服务器还是从服务都会有自己的运行 ID。 ·运行ID在服务器启动时自动生成由40个随机的十六进制字符组 成例如53b9b28df8042fdc9ab5e3fcbbbabff1d5dce2b3。
当从服务器对主服务器进行初次复制时主服务器会将自己的运行 ID传送给从服务器而从服务器则会将这个运行ID保存起来。
当从服务器断线并重新连上一个主服务器时从服务器将向当前连 接的主服务器发送之前保存的运行ID
·如果从服务器保存的运行ID和当前连接的主服务器的运行ID相 同那么说明从服务器断线之前复制的就是当前连接的这个主服务器 主服务器可以继续尝试执行部分重同步操作
4.综合举例 主从服务器当前的复制偏 移量都为10086但是就在主服务器要向从服务器传播长度为33字节的 数据之前从服务器A断线了那么主服务器传播的数据将只有从服务 器B和从服务器C能收到在这之后主服务器、从服务器B和从服务器 C三个服务器的复制偏移量都将更新为10119而断线的从服务器A的复 制偏移量仍然停留在10086这说明从服务器A与主服务器并不一致
1.假设从服务器A在断线之后就立即重新连接主服务器并且成功 那么接下来从服务器将向主服务器发送PSYNC命令报告从服务器A 当前的复制偏移量为10086
2.主服务器收到从服务器发来的PSYNC命令以及偏移量10086之后 主服务器将检查偏移量10086之后的数据是否存在于复制积压缓冲区里 面结果发现这些数据仍然存在于是主服务器向从服务器发送 CONTINUE回复表示数据同步将以部分重同步模式来进行
3.接着主服务器会将复制积压缓冲区10086偏移量之后的所有数据 偏移量为10087至10119都发送给从服务器。 ·从服务器只要接收这33字节的缺失数据就可以回到与主服务器 一致的状态