爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。
*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
一、主从复制简介
二、主从复制风暴
三、问题现象
3.1 CPU:
3.2 磁盘:
3.3 内存与网络:
四、出现的场景
单 master 节点(主机上只 有一台redis实例)当机器发生故障导致网络中断或重启恢复时。 多 m aster 节点在同一台机 器上,当机器发生故障导致网络中断或重启恢复时。 大量 slave 节点同时重启恢复。 复制缓冲区过小,缓冲区的上限是由 client-output-buffer-limit 配置项决定的,当 slave 还在恢复 RDB 快照时,master 节点持续产生数据,缓冲区如果被写满了,会导致 slave 节点连接断开,再次发起重建复制请求。发起全量复制->复制缓冲区溢出->连接中断->重连->发起全量复制->复制缓冲区溢出->连接中断->重连... 网络长时间中断导致的连接异常:跨机房、跨云、DNS 解析异常等导致的主从节点之间连接丢失。主从节点判断超时(触发了repl-timeout),且丢失的数据过多,超过了复制积压缓冲区所能存储的范围。 数据量过大,生成 RDB 快照的 fork 子进程操作耗时过长,导致 slave 节点长时间收不到数据而触发超时,此时 slave 节点会重连 master 节点,再次请求进行全量复制,再次超时,再次重连。
五、解决方案
5.1 降低存储上限
5.2 复制缓冲区调整
5.3 部署方式调整
5.4 架构调整
减少 slave 节点个数。或调整 slave 架构层级,在 Redis 4.0 版本之后,sub-slave 订阅 slave 时将会收到与 master 一样的复制数据流。
本文关键字:#Redis主从复制# #Redis复制风暴#