redis主从复制

2019-05-24  本文已影响0人  绝色天龙

复制

旧版复制功能(2.8版本以前)

旧版复制功能的缺陷

从服务器从未进行过复制,或者当前要复制的主服务器和上一次复制的主服务器不同

处于命令传播阶段的主从服务器因为网络中断了复制,从服务器自动重连成功继续复制

旧版复制在断线重连后会重新执行一次同步操作,主服务器会将完整的RDB文件发送给从服务器

新版复制功能的实现

部分重同步实现

复制偏移量可以用来判断主从服务器状态是否一致

由主服务器维护的一个固定长度的FIFO队列,默认大小为1MB

从服务器重新连上主服务器后会通过PSYNC发送自己的offset,主服务器会进行判断:

  1. offset后的数据还在积压缓冲区,则执行部分重同步
  2. offset后的数据不在积压缓冲区,则执行完整同步

复制积压缓冲区的设置:repl-backlog-size

  1. 每个服务器都有,服务启动自动生成,40位随机的16进制字符
  2. 初次复制,主服务发送本机run ID 给从服务器,从服务器保存
  3. 断线重连参考下图

PSYNC命令实现

复制的实现

  1. 从服务器设置主服务器的地址和端口
  1. 从服务器与主服务器建立套接字连接
  1. 从服务器发送PING命令
  1. 身份验证
  1. 发送端口信息
  2. 同步
  1. 命令传播

心跳检测

  1. 检测网络连接状态
  2. 辅助实现min-slaves配置选项
  3. 检测命令丢失(心跳会携带复制偏移量)
上一篇 下一篇

猜你喜欢

热点阅读