Redis--复制
复制功能的实现
- 1.通过SLAVEOF命令可以让从服务器同步主服务器的数据。
旧版复制实现的机制
- 1.复制主要是同步和命令传播。
- 2.同步(1):从服务器向主服务器发送SYNC命令,主服务器执行BGSAVE,在后台生成一个RDB文件,并使用一个缓冲记录从现在开始执行的所有写命令。
- 3.同步(2):主服务器把生成好的RDB文件传递给从服务器,从服务器利用RDB文件更新至主数据库执行命令BGSAVE.
- 4.同步(3):主服务器将缓冲区命令发给从服务器,从服务器执行完毕则状态和主服务器状态一致。
- 5.命令传播(1):同步完成之后,主服务器执行的命令会传播到从服务器,进而数据库状态就一致。
旧版复制实现的缺陷
- 1.复制功能主要是两种情况:初次复制,断线后重复制。
- 2.旧版本复制对于初次复制来说是没有缺陷的,但是断线后重复制却会导致重新全同步进而导致效率变低。
新版复制功能的实现
- 1.对比旧版本复制,采用PSYNC替代SYNC
- 2.PSYNC命令采用:完整重同步和部分重同步两种模式。
- 3.完整重同步:步骤和SYNC一致。
- 4.部分重同步:只需要将从服务器断线连接期间未接收到的命令重新发给从服务器。
部分重同步的实现
- 1.主服务的复制偏移量和从服务器的复制偏移量
- 2.主服务器的复制积压缓冲区
- 3.服务器的运行ID
PSYNC命令的实现
- 1.从服务器接收到客户端的SLAVEOF命令
- 2.从服务器判断是否是第一次执行复制
- 3.是的话就直接发送PSYNC?-1 直接全同步。
- 4.如果不是的话向主服务器发送PSYNC runid offset
- 5.主服务器返回contine就执行部分重同步,否则就是全同步。
- 6.主服务接收到PSYNC runid offset:首先 主服务器判断runid是否以前同步过
没有的话就直接执行全同步,有的话就查看offset在命令缓冲区是否存在,如果存在
执行半同步,否则就执行全同步。
复制的实现
- 1.在从服务器的配置问中配置主服务器的地址和端口
- 2.建立socket
- 3.发送PING命令
- 4.身份验证
- 5.从服务器将自己的监听端口号发送给从服务器。
- 6.同步
- 7.命令传播
心跳检测
- 0.在命令传播阶段,从服务器默认每秒一次向主服务器发送命令,命令会传递从服务器复制的偏移量
- 1.该命令可以检测主从服务器网络。
- 2.命令会检测 从服务器的下面配置。通过min-slaves-to-write (从服务器的数量),min-slaves-max-lag(从服务器的延迟大于10秒)
- 3.检测命令丢失,即偏移量是否丢失
网友评论