一、复制

1.1 旧版复制功能的实现(Redis 2.8 以前)


命令传播:
主服务器会将自己执行的写命令,也即是造成主从服务器不一致的那条写命令,发送给从服务器执行,让两者再次回到一致状态。
1.2 旧版复制功能的缺陷

即旧版断线后的复制还是使用SYNC命令,相当于重新进行复制,而没有利用从服务器中已有的数据。
1.3 新版复制功能的实现

PSYNC 命令解决了旧版复制功能中断线重连的低效情况,当主服务器同意进行部分重同步后会给从服务器发送continue消息。


1.4 部分重同步的实现

1.4.1 复制偏移量


1.4.2 复制积压缓冲区
复制积压缓冲区是由主服务器维护的一个固定长度先进先出(FIFO)队列,默认大小为1MB(可改)。
当主服务器进行命令传播时,它不仅会将写命令发送给所有从服务器,还会将写命令入队到复制积压缓冲区。




1.4.3 服务器运行ID
除了复制偏移量和复制积压缓冲区之外,实现部分重同步还需要用到服务器运行ID。

1.5 复制的步骤









1.6 心跳检测

检测主从服务器的网络连接状态:

辅助实现min-slaves配置选项:

检查命令丢失:


1.7 重点回顾

本文主要介绍了Redis的复制功能。旧版(Redis 2.8以前)复制功能存在断线重连低效的问题,新版通过PSYNC命令解决了该问题。部分重同步的实现依赖复制偏移量、复制积压缓冲区和服务器运行ID。此外,还介绍了复制步骤和心跳检测的作用。
1552

被折叠的 条评论
为什么被折叠?



