当执行一个命令为set name kaka时,我们可以查看持久化文件查看

文章插图
那么复制积压缓冲区就是存储的aof持久化的数据,并且以字节分开,并且每个字节都有自己的偏移量 。这个偏移量也就是复制偏移量(offset)

文章插图
那为什么会说复制缓冲积压区有可能会导致全量复制呢
在命令传播阶段,主节点会把收集的数据存储到复制缓冲区中,然后在发送给从节点 。就是这里出现了问题,当主节点数据量在一瞬间特别大的时候,超出了复制缓冲区的内存,就会有一部分数据会被挤出去,从而导致主节点和从节点的数据不一致 。从而进行全量复制 。如果这个缓冲区大小设置不合理那么很大可能会造成死循环,从节点就会一直全量复制,清空数据,全量复制 。
3. 复制偏移量(offset)

文章插图
主节点复制偏移量是给从节点发送一次记录一次,从节点是接收一次记录一次 。
用于同步信息,对比主节点和从节点的差异,当slave断联时恢复数据使用 。
这个值也就是来自己于复制缓冲积压区里边的那个偏移量 。
九. 主从复制常见的问题1. 主节点重启问题(内部优化)当主节点重启后,runid的值将发生变化,会导致所有的从节点进行全量复制 。
这个问题我们无需考虑,知道系统是怎么优化的即可 。
在建立完主从复制后主节点会创建master-replid变量,这个生成的策略跟runid一样,长度是41位,runid长度是40位,然后发送给从节点 。
在主节点执行shutdown save命令时,进行了一次RDB持久化会把runid 和 offset保存到RDB文件中 。可以使用命令redis-check-rdb查看该信息 。

文章插图
主节点重启后加载RDB文件,将文件中的repl-id 和repl-offset加载到内存中 。纵使让所有从节点认为还是之前的主节点 。
2. 从节点网络中断偏移量越界导致全量复制由于网络环境不佳,从节点网络中断 。复制积压缓冲区内存过小导致数据溢出,伴随着从节点偏移量越界,导致全量复制 。有可能会导致反复的全量复制 。
解决方案:修改复制积压缓冲区的大小:repl-backlog-size
设置建议:测试主节点连接从节点的时间,获取主节点每秒平均产生的命令总量write_size_per_second
复制缓冲区空间设置 = 2 * 主从连接时间 * 主节点每秒产生的数据总量
3. 频繁的网络中断由于主节点的cpu占用过高,或者从节点频繁连接 。出现这种情况造成的结果就是主节点各种资源被严重占用,其中包括但不限于缓冲区,宽带,连接等 。
为什么会出现主节点资源被严重占用?
在心跳机制中,从节点每秒会发送一个指令replconf ack指令到主节点 。从节点执行了慢查询,占用大量的cpu 主节点每秒调用复制定时函数replicationCron,然后从节点长时间没有相应 。
解决方案:
设置从节点超时释放
设置参数:repl-timeout
这个参数默认为60秒 。超过60秒,释放slave 。
4. 数据不一致问题由于网络因素,多个从节点的数据会不一致 。这个因素是没有办法避免的 。
关于这个问题给出俩个解决方案:
第一个数据需要高度一致配置一台redis服务器,读写都用一台服务器,这种方式仅限于少量数据,并且数据需高度一致 。
第二个监控主从节点的偏移量,如果从节点的延迟过大,暂时屏蔽客户端对该从节点的访问 。设置参数为slave-serve-stale-data yes|no 。这个参数一但设置就只能响应info slaveof等少数命令 。
5. 从节点故障这个问题直接在客户端维护一个可用节点列表,当从节点故障时,切换到其他节点进行工作,这个问题在后边集群会说到 。
十. 总结本文主要讲解了什么是主从复制、主从复制工作的三大阶段以及工作流程、部分复制的三大核心 。命令传播阶段的心跳机制 。最后说明了主从复制常见问题
推荐阅读
- 血糖高吃什么好
- 梦见自己参加别人的丧事戴孝帽 梦见自己参加别人的丧事半路又走了
- 哪些运动能够减少腹部脂肪?
- 15家成熟男人的服装品牌汇总 中年男士服装品牌
- 恐怖食人案视频 历史上人吃人的事件
- 披肩按摩器
- 陆小曼与徐志摩的爱情故事 徐志摩诗集写给陆小曼
- 额头长黄褐斑什么原因
- 梦见坐别人的车翻车了人没事 梦见自己坐车翻车了受伤了
- 男人到了中年思想什么样
