redis-复制

redis主从之间的复制逻辑

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

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

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

2.一、什么是积压缓冲区

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

三、复制的实现步骤

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

四、心跳检测

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

  • 检测主从服务器的网络链接状态。
  • 辅助实现min-slaves选项
  • 检测命令丢失
相关文章
相关标签/搜索