主从架构配置

在 save 节点中的 redis.conf 中修改:

replicaof 192.168.12.106 6379
masterauth xxxx

启动主从节点即可

主从复制原理

流程概述

slave 节点启动后会根据配置文件中的 master 节点信息,
与 master 节点建立 socket 网络连接,
然后发送 ping 命令给 master 节点,如果 master 设置了 requirepass,那么 salve 节点必须发送 masterauth 的口令过去进行认证,
刚开始是 Psync 命令,Psync ? -1,表示要求 master 主机同步数据
主机会向从机发送Replication IDoffset,因为 slave 并没有对应的 offset,所以会进行一次全量复制。

全量复制

1、从机向主机发送 PSYNC 指令,

2、主机会向从机发送Replication IDoffset

3、从机 slave 会保存发过来的主机 master 信息

4、主节点收到全量复制的命令后,执行 bgsave(异步执行),在后台生成 RDB 文件(快照),并使用一个缓冲区(称为复制缓冲区)记录从现在开始执行的所有写命令

5、主机发送 RDB 文件给从机

6、发送缓冲区数据

7、刷新旧的数据。从节点在载入主节点的数据之前要先将老数据清除

8、加载 RDB 文件将数据库状态更新至主节点执行 bgsave 时的数据库状态和缓冲区数据的加载。

redis 从节点不可读设置_网络连接

backlog

master 节点有一个 backlog,默认是 1MB 大小,master node 给 slave node 复制数据时,也会将数据在 backlog 中同步写一份
backlog 主要是用来做全量复制中断候的增量复制的。

Replication ID

info replication,可以看到 master_replid,master_replid2
master_replid: 复制 id1(后文简称:replid1),一个长度为 41 个字节(40 个随机串+’0’)的字符串,每个 redis 实例都有,和 runid 没有直接关联,但和 runid 生成规则相同。当实例变为从实例后,自己的 replid1 会被主实例的 replid1 覆盖。
master_replid2:复制 id2(后文简称:replid2),默认初始化为全 0,用于存储上次主实例的 replid1。

增量复制

如果全量复制过程中,master-slave 网络连接断掉,那么 salve 重新连接 master 时,会触发增量复制,msater 会根据 slave 发送的 psync 中的 offset 来从 backlog 中获取丢失的数据,然后发送给 slave node,默认 backlog 就是 1MB。