redis-复制

273 阅读1分钟

redis主从之间的复制逻辑

  • redis2.8版本之前只有完全复制功能,命令SYNC
  • redis2.8版本之后新增部分重同步实现,命令PSYNC
  • redis2.8版本之后新增心跳检测,命令REPLCONF ACK <replication_offset>

1、SYNC命令的步骤请看下图

2、PSYNC命令执行的过程请看下图

2.1、什么是积压缓冲区

redis的积压缓冲区的默认大小为1MB,从服务器在执行PSYNC 命令,如果runid是主服务器的runid,则在积压缓冲区里面查找offset如果存在则返回 CONTINUE,开启重同步。复制积压缓冲区是一个固定长度的FIFO对了。

3、复制的实现步骤

  • SLAVEOF 127.0.0.1 6379 执行复制命令
  • 建立套接字连接
  • 从服务器发送PING命令,主返回PONG表ok。如果timeout或则返回错误则重新建套接字
  • 身份验证如下图
  • 发送端口信息,从执行REPLCONF listening-port 命令,信息保存主服务器信息中
  • 同步,执行PSYNC命令
  • 命令传播,主给从发送写命令

4、心跳检测

每个1s,从向主服务器发送REPLCONF ACK <replication_offset>

  • 检测主从服务器的网络连接状态。
  • 辅助实现min-slaves选项
  • 检测命令丢失