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选项
- 检测命令丢失