目录:
- 复制过程
- 数据间的同步
- 全量复制
- 部分复制
- 心跳
- 异步复制
复制原理
1. 复制过程
复制的过程步骤如下:
- 从节点执行 slaveof 命令
- 从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制
- 从节点内部的定时任务发现有主节点的信息,开始使用 socket 连接主节点
- 连接建立成功后,发送 ping 命令,希望得到 pong 命令响应,否则会进行重连
- 如果主节点设置了权限,那么就需要进行权限验证;如果验证失败,复制终止。
- 权限验证通过后,进行数据同步,这是耗时最长的操作,主节点将把所有的数据全部发送给从节点。
- 当主节点把当前的数据同步给从节点后,便完成了复制的建立流程。接下来,主节点就会持续的把写命令发送给从节点,保证主从数据一致性。
2. 数据间的同步
上面说的复制过程,其中有一个步骤是“同步数据集”,这个就是现在讲的‘数据间的同步’。
redis 同步有 2 个命令:sync 和 psync,前者是 redis 2.8 之前的同步命令,后者是 redis 2.8 为了优化 sync 新设计的命令。我们会重点关注 2.8 的 psync 命令。
psync 命令需要 3 个组件支持:
1.主从节点各自复制偏移量
2.主节点复制积压缓冲区
3.主节点运行 ID
主从节点各自复制偏移量
参与复制的主从节点都会维护自身的复制偏移量。 主节点在处理完写入命令后,会把命令的字节长度做累加记录,统计信息在 info replication 中的 master_repl_offset 指标中。 从节点每秒钟上报自身的的复制偏移量给主节点,因此主节点也会保存从节点的