reids(四)多机数据库复制

复制

  • 同步
    • 旧版本(sync)
    • 命令传播
    • 旧复制功能的缺陷
  • 复制(psync)
  • 复制的实现

这里主要涉及到了主从复制的问题。
复制主要涉及到2个功能:同步和命令传播

同步

旧版本(sync)

reids(四)多机数据库复制_第1张图片
步骤:

  1. 从服务器发送sync命令给主服务器
  2. 主服务器发送rdb文件给从服务器
  3. 并将缓冲区的所以写命令都发给从服务器

reids(四)多机数据库复制_第2张图片

命令传播

reids(四)多机数据库复制_第3张图片
reids(四)多机数据库复制_第4张图片
需要主服务器发送命令给从服务器,他们的数据才会保存一致性。

旧复制功能的缺陷

reids(四)多机数据库复制_第5张图片
在上表中,从服务器如果断开了连接,然后进行了重连,只好再次发送sync命令,然后再次载入rdb文件,这样对实现相对来说比较简单,但是,从服务器启动的时间会随着rdb文件的增大,而越慢。

复制(psync)

reids(四)多机数据库复制_第6张图片
reids(四)多机数据库复制_第7张图片
可以看到服务器增加了一个offset值,这个值说明着当前服务器上数据与主服务器是否同步。
如果是同步的,则主从的offset值是相同的。利用这个offset值,则可以在复制节点进行高效率同步
reids(四)多机数据库复制_第8张图片
同时主服务器会在里面维护着一个复制积压缓冲区。

  • 从服务器如果断开连接后,再次进行同步的话,
  • 使用psync命令发送给主服务器,并且发送的时候会带上自己的offset值。
  • 主服务器会判断从服务器的offset值之后的是否还在复制积压缓冲区当中,如果存在则返回continue
  • 从复制积压缓冲区中发送从服务器offset之后的所有命令
  • 如果不存在,则执行完整重同步。sync过程

reids(四)多机数据库复制_第9张图片

复制的实现

  1. 设置主服务器的地址和端口
  2. 建立套接字连接
  3. 发送ping命令
  4. 如果需要身份验证,则进行身份验证
  5. 发送端口信息,让主服务器保存从服务器的信息
  6. 进行同步,如果是第一次连接,执行完整重同步,如果有offset值,则进行判断是否需要执行部分重同步。
  7. 命令传播

你可能感兴趣的:(redis)