0

0

Redis如何分析主从全量同步的耗时瓶颈_从RDB生成、网络带宽限制、从库加载三方面拆解

P粉602998670

P粉602998670

发布时间:2026-03-10 19:32:01

|

324人浏览过

|

来源于php中文网

原创

全量同步卡顿需分三阶段定位:主节点rdb生成(查bgsave_in_progress、cpu及bigkey)、rdb传输(看master_sync_left_bytes下降速度及repl-backlog配置)、从节点加载(避aof重写冲突、用ssd、禁save)。

redis如何分析主从全量同步的耗时瓶颈_从rdb生成、网络带宽限制、从库加载三方面拆解

怎么看全量同步卡在哪一步?用监控+日志交叉验证

全量同步慢不是“感觉慢”,而是三个环节中至少一个明显拖后腿:主节点生成RDB、RDB文件传输、从节点加载RDB。不拆开看,容易误判是网络问题,实际是主库CPU被bgsave压垮了。

实操建议:

  • 在主节点执行redis-cli --stat,观察bgsave_in_progress是否长期为1,同时used_cpu_sysused_cpu_user是否飙升——说明RDB生成阶段已成瓶颈
  • 在从节点查看INFO replication输出中的master_sync_in_progress:1持续时间,再对比master_sync_left_bytes下降速度:如果字节数下降极慢,大概率是网络或主节点发送卡住
  • 启用slowlog并设阈值为100ms(CONFIG SET slowlog-log-slower-than 100000),重点抓bgrewriteaofbgsavereplconf类命令是否频繁超时

主节点RDB生成慢:别只怪fork,先查内存和大key

很多人以为bgsave慢=机器配置低,其实更常见的是Redis实例内存过大(>10GB)+ 存在bigkey,导致fork子进程耗时暴涨,主线程被阻塞,复制缓冲区replication buffer迅速积压,最终触发全量重试。

实操建议:

  • redis-cli --bigkeys扫描,重点关注hash/zset中元素数超5000或单value >1MB的key;这类key会显著拉长bgsave的内存页拷贝时间
  • 避免在高峰时段手动触发SAVEBGSAVE,它们会直接加剧主线程压力;改用CONFIG SET save ""临时禁用RDB自动保存,仅靠AOF保障数据安全(需评估业务容忍度)
  • 确认是否启用了THP(Transparent Huge Pages):cat /sys/kernel/mm/transparent_hugepage/enabled,若显示[always],必须关掉——它会让fork时的写时复制单位从4KB变成2MB,延迟翻倍

网络传输卡顿:不是带宽不够,而是缓冲区配置失配

跨机房同步时,即使带宽有1Gbps,repl-backlog-size设太小也会导致增量同步失败,反复退化为全量同步;而client-output-buffer-limit slave设太紧,又会让主节点在RDB传输中途就断开从节点连接。

秘塔回响
秘塔回响

秘塔AI语音输入法

下载

实操建议:

  • 按公式粗略估算repl-backlog-size:假设主库写QPS为5000,平均命令大小200B,预期容忍断连120秒 → 至少需要 5000 × 200 × 120 = 120MB;生产环境建议直接设为1024mb(环形缓冲,不怕设大)
  • client-output-buffer-limit slave不能只看内存上限,更要关注512mb 60这类“60秒内累计超512MB即断连”的软限制;高写入场景下应调为1024mb 512mb 60,避免RDB传输未完成就被踢
  • 禁用repl-diskless-sync no(默认),改用repl-diskless-sync yes + repl-diskless-sync-delay 5,让主节点跳过落盘RDB文件,直接通过socket把RDB流式发给从节点,减少磁盘IO和临时文件开销

从节点加载慢:别急着加CPU,先看磁盘和AOF重写冲突

从节点收到RDB后,并非“解压完就完事”。它要清空本地数据、加载RDB、再回放repl_backlog里的增量命令——这三个步骤都可能被阻塞,尤其是当从节点同时开启AOF且正在做bgrewriteaof时,磁盘I/O竞争会导致加载停滞数分钟。

实操建议:

  • 检查从节点INFO persistenceaof_rewrite_in_progress:1是否与loading:1共存;若是,立刻CONFIG SET auto-aof-rewrite-percentage 0临时禁用AOF重写
  • 确保从节点使用SSD,且vm.swappiness设为0(避免内存交换到慢速磁盘);加载RDB是纯顺序IO,机械盘极易成为瓶颈
  • 从节点不要开启save配置项(如save 900 1),防止加载RDB中途触发自动快照,引发二次bgsave竞争

真正卡住全量同步的,往往不是单一环节,而是RDB生成慢 → 复制缓冲区溢出 → 增量同步失败 → 触发新一轮全量 → 循环恶化。所以排查时必须按时间线串起来看:主节点bgsave起止时间、RDB传输开始/结束时间、从节点loading_start_time/loading_end_time,缺一不可。

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

764

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

764

2023.08.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1005

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

671

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

501

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

413

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

408

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

482

2024.04.07

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号