故障分析 | Redis 主从复制风暴
创始人
2025-06-01 03:29:01
0

作者:贲绍华

爱可生研发中心工程师,负责项目的需求与维护工作。其他身份:柯基铲屎官。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

一、主从复制简介

Redis 主从架构下,使用默认的异步复制模式来同步数据,其特点是低延迟和高性能。当 Redis master 下有多个 slave 节点,且 slave 节点无法进行部分重同步时, slave 会请求进行全量数据同步,此时 master 需要创建 RDB 快照快照发送给 slave ,从节点收到 RDB 快照到开始解析与加载。

二、主从复制风暴

在复制重建的过程中,slave 节点加载 RDB 还未完成,却因为一些原因导致失败了,slave 节点此时又会再次发起全量同步 RDB 的请求,循环往复。当多个 slave 节点同时循环请求时,导致了复制风暴的出现。

三、问题现象

3.1 CPU:

master 节点会异步生成 RDB 快照,数据量非常大时 fork 子进程非常耗时,同时 CPU 会飙升,且会影响业务正常响应。

3.2 磁盘:

从 Redis 2.8.18 版本开始,支持无磁盘复制,异步生成的RDB快照将在子进程中直接发送 RDB 快照至 slave 节点,多个 slave 节点共享同一份快照。所以磁盘 IO 并不会出现异常。

3.3 内存与网络:

由于 RDB 是在内存中创建与发送,当复制风暴发起时,master 节点创建RDB快照后会向多个 slave 节点进行发送,可能使 master 节点内存与网络带宽消耗严重,造成主节点的延迟变大,极端情况会发生主从节点之间连接断开,导致复制失败。slave 节点在失败重连后再次发起新一轮的全量复制请求,陷入恶性循环。

四、出现的场景

  • 单master节点(主机上只有一台redis实例)当机器发生故障导致网络中断或重启恢复时。
  • 多master节点在同一台机器上,当机器发生故障导致网络中断或重启恢复时。
  • 大量slave节点同时重启恢复。
  • 复制缓冲区过小,缓冲区的上限是由client-output-buffer-limit配置项决定的,当slave还在恢复RDB快照时,master节点持续产生数据,缓冲区如果被写满了,会导致slave节点连接断开,再次发起重建复制请求。发起全量复制->复制缓冲区溢出->连接中断->重连->发起全量复制->复制缓冲区溢出->连接中断->重连…
  • 网络长时间中断导致的连接异常:跨机房、跨云、DNS解析异常等导致的主从节点之间连接丢失。主从节点判断超时(触发了repl-timeout),且丢失的数据过多,超过了复制积压缓冲区所能存储的范围。
  • 数据量过大,生成RDB快照的fork子进程操作耗时过长,导致slave节点长时间收不到数据而触发超时,此时slave节点会重连master节点,再次请求进行全量复制,再次超时,再次重连。

五、解决方案

5.1 降低存储上限

Redis 实例的存储数据的上限不要过大,过高的情况下会影响 RDB 落盘速度、向 slave 节点发送速度、slave 节点恢复速度。

5.2 复制缓冲区调整

master 节点 client-output-buffer-limit 配置项阈值增大(或调整为不限制),repl_timeout 配置项阈值增大。使 slave 节点有足够的时候恢复RDB快照并且不会被动断开连接。

5.3 部署方式调整

单个主机节点内尽量不再部署多个 master 节点,防止主机因为意外情况导致的所有 slave 节点的全量同步请求发送至同一主机内。

5.4 架构调整

减少 slave 节点个数。或调整 slave 架构层级,在 Redis 4.0 版本之后,sub-slave 订阅 slave 时将会收到与 master 一样的复制数据流。

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...