《Redis设计与实现》夯实之路(十一) 第十五章 复制

《Redis设计与实现》学习笔记(十一) 第十五章 复制




一. 旧版复制功能的实现

1. 分为同步和命令传播两个部分:

  • 同步将从服务器更新到与主服务器一样的服务器状态
  • 命令传播用于主服务器被修改,需要回到主从一致的状态

2. 同步

  • 需要从服务器向主服务器发送SYNC命令
  • 主服务器接收到SYNC后,使用BGSAVE生成一个RDB文件
  • 从服务器使用生成的RDB更新到与主服务器一样的状态

3. 命令传播

发送造成了不一致的写命令给从服务器执行


二. 旧版的缺陷

对于断线后的重复制来说,效率非常低,需要复制所有RDB文件里的键值对


三. 新版复制功能的实现

1. 2.8版本后,用PSYNC代替SYNC

2. PSYNC有两种模式:

  • 完整重同步
  • 部分重同步:只同步断开后的缺失的键值对

四. 部分重同步的实现

1. 复制偏移量replication offset:

  • 在主服务器里表示向从服务器发送的数据字节数N1
  • 在从服务器里表示从主服务器收到的数据字节数N2
  • 通过对比N1,N2可以确定是否一致,也可以通过N1-N2的差值确定需要重新同步的数据量

2. 复制积压缓冲区

  • 由主服务器维护的一个固定长度,FIFO的队列
  • 当主服务器发送命令传播时,不仅会发送给所有从服务器,还会将写命令入队到复制积压缓冲区
  • 如果偏移量之后的数据仍在复制积压缓冲区,那可以执行部分重同步;否则只能执行完整重同步

3.服务运行期ID

用来验证重连后是否重连的是同一个主服务器


五. PSYNC的实现


六. 复制的实现

  • 设置主服务器的地址和端口
  • 建立接套字连接
  • 发送PING命令
  • 收到PONG回复后,身份验证
  • 从服务器发送监听端口号
  • 同步
  • 命令传播

七. 心跳检测

  • 从服务器会以每秒一次向主服务器发送:REPLCONF ACK
  • 三个作用:
    • 检测主从服务器的网络连接状态
    • 辅助实现min-slaves选项
    • 检测命令丢失
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值