这个过程就是主从复制最齐全的流程讲解 。那么下来我们对每一步进程简单的介绍
- 从节点发送指令psync ? 1 psync runid offset 找对应的runid索取数据 。但是这里可以考虑一下,当从节点第一次连接的时候根本就不知道主节点的runid 和 offset。所以第一次发送的指令是psync ? 1意思就是主节点的数据我全要 。
- 主节点开始执行bgsave生成RDB文件,记录当前的复制偏移量offset
- 主节点这个时候会把自己的runid 和 offset 通过 +FULLRESYNC runid offset 指令 通过socket发送RDB文件给从节点 。
- 从节点接收到+FULLRESYNC 保存主节点的runid和offset 然后清空当前所有数据,通过socket接收RDB文件,开始恢复RDB数据 。
- 在全量复制后,从节点已经获取到了主节点的runid和offset,开始发送指令 psync runid offset
- 主节点接收指令,判断runid是否匹配,判断offset是否在复制缓冲区中 。
- 主节点判断runid和offset有一个不满足,就会在返回到步骤2继续执行全量复制 。这里的runid不匹配只有的可能是从节点重启了这个问题后边会解决,offset(偏移量)不匹配就是复制积压缓冲区溢出了 。如果runid或offset校验通过,从节点的offset和主节点的offset相同时则忽略 。如果runid或offset检验通过,从节点的offset与offset不相同,则会发送 +CONTINUE offset(这个offset为主节点的),通过socket发送复制缓冲区中从节点offset到主节点offset的数据 。
- 从节点收到+CONTINUE 保存master的offset 通过socket接收到信息后,执行bgrewriteaof,恢复数据 。
在主节点的第3步下面 主节点在主从复制的期间是一直在接收客户端的数据,主节点的offset是一直变化的 。只有有变化就会给每个slave进行发送,这个发送的过程称之为心跳机制
七. 心跳机制在命令传播阶段是,主节点与从节点之间一直都需要进行信息互换,使用心跳机制进行维护,实现主节点和从节点连接保持在线 。
- master心跳 指令:ping 默认10秒进行一次,是由参数repl-ping-slave-period决定的 主要做的事情就是判断从节点是否在线 可以使用info replication 来查看从节点租后一次连接时间的间隔,lag为0或者为1就是正常状态 。
- slave心跳任务 指令:replconf ack {offset} 每秒执行一次 主要做的事情是给主节点发送自己的复制偏移量,从主节点获取到最新的数据变更命令,还做一件事情就是判断主节点是否在线 。
这里有俩个参数可以进行配置调整:
min-slaves-to-write 2
min-slaves-max-lag 8
这俩个参数表示从节点的数量就剩余2个,或者从节点的延迟大于8秒时,主节点就会强制关闭maste功能,停止数据同步 。
那么主节点是如何知道从节点挂掉的数量和延迟时间呢! 在心跳机制里边slave 会每隔一秒发送perlconf ack 这个指令,这个指令可携带偏移量,也可以携带从节点的延迟时间和从节点的数量 。
八、部分复制的三个核心要素1. 服务器的运行id (run id)我们先看一下这个run id是什么,执行info命令即可看到 。在上文中我们查看启动日志信息也可以看到 。

文章插图
【写给大忙人的Redis主从复制,花费五分钟让你面试不尴尬】redis在启动时会自动生成一个随机的id(这里需要注意的是每次启动的id都会不一样),是由40个随机的十六进制字符串组成,用来唯一识别一个redis节点 。
在主从复制初次启动时,master会把自己的runid发送给slave,slave会保存master的这个id,我们可以使用info命令查看

文章插图
当断线重连时,slave把这个id发送给master,如果slave保存的runid与master现在的runid相同,master会尝试使用部分复制(这块能否复制成功还有一个因素就是偏移量) 。如果slave保存的runid与master现在的runid不同,则会直接进行全量复制 。
2. 复制积压缓冲区复制缓冲积压区是一个先进先出的队列,用户存储master收集数据的命令记录 。复制缓冲区的默认存储空间是1M 。
可以在配置文件修改repl-backlog-size 1mb来控制缓冲区大小,这个比例可以根据自己的服务器内存来修改,咔咔这边是预留出了30%左右 。
复制缓冲区到底存储的是什么?
推荐阅读
- 血糖高吃什么好
- 梦见自己参加别人的丧事戴孝帽 梦见自己参加别人的丧事半路又走了
- 哪些运动能够减少腹部脂肪?
- 15家成熟男人的服装品牌汇总 中年男士服装品牌
- 恐怖食人案视频 历史上人吃人的事件
- 披肩按摩器
- 陆小曼与徐志摩的爱情故事 徐志摩诗集写给陆小曼
- 额头长黄褐斑什么原因
- 梦见坐别人的车翻车了人没事 梦见自己坐车翻车了受伤了
- 男人到了中年思想什么样
