Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Redis集群主备缓存区满了导致主备频繁倒换

Redis集群主备缓存区满了导致主备频繁倒换

作者头像
zeekling
发布于 2022-07-17 07:31:40
发布于 2022-07-17 07:31:40
1K00
代码可运行
举报
运行总次数:0
代码可运行

问题现象

Redis 频繁进行主备倒换,通过查看主实例的日志:redis.log发现下面报错:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Client id=1317049445 addr=192.168.2.45:8004 fd=40 name= age=314 idle=0 flags=S db=0 sub=0
 psub=0 multi=-1 qbuf=0 qbuf-free=32568 obl=0 oll=4430 omem=761143439 events=rw cmd=psync 
scheduled to be closed ASAP for overcoming of output buffer limits

其中:psync scheduled to be closed ASAP for overcoming of output buffer limits 明显就是问题所在,那是什么问题呢。

解决思路

于是我在源码中搜索了scheduled to be closed ASAP for overcoming of output buffer limits(psync明显是一个命令,就不用在代码里面搜索了)。

于是,我找到了下面代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/* If the source client contains a partial response due to client output
     * buffer limits, propagate that to the dest rather than copy a partial
     * reply. We don't wanna run the risk of copying partial response in case
     * for some reason the output limits don't reach the same decision (maybe
     * they changed) */
    if (src->flags & CLIENT_CLOSE_ASAP) {
        sds client = catClientInfoString(sdsempty(),dst);
        freeClientAsync(dst);
        serverLog(LL_WARNING,"Client %s scheduled to be \
                closed ASAP for overcoming of output buffer limits.", client);
        sdsfree(client);
        return;
    }

单从代码来看,看不出啥,但是代码上面存在注释,我使用我那四级水平翻译了下,可以看出缓存区满了,于是可以想到可能主备同步的时候可能会限制缓存区大小,并且这个缓存区被占满了。

于是我又在redis.conf中找了缓冲区的相关配置,找到了下面是三个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60

配置格式为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>

具体含义:

  • class:我理解就是缓冲区的类型,目前Redis的缓冲区分为三个:
    • 普通客户端:normal
    • 主备同步:replica
    • 发布订阅:pubsub
  • hard limit: 缓冲区大小的硬性限制。当达到这个限制之后,连接就会断开。
  • soft limit: 缓冲去大小的软性限制。
  • soft seconds: 缓冲区大小达到了(超过)soft limit值的持续时间。

因此我们可以将client-output-buffer-limit replica 256mb 64mb 60作出简单调整,重启Redis服务之后解决这个问题。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何解决Redis复制风暴?
作为一个DBA,已经遇到过很多次Redis复制异常了。下面让我来介绍一下Redis复制风暴原因及其处理方式。
用户10842762
2023/11/24
6531
面试题:讲讲Redis主从架构?
单机的 redis,能够承载的 QPS 大概就在上万到几万不等。对于缓存来说,一般都是用来支撑读高并发的。因此架构做成主从(master-slave)架构,一主多从,主负责写,并且将数据复制到其它的 slave 节点,从节点负责读。所有的读请求全部走从节点。这样也可以很轻松实现水平扩容,支撑读高并发。
用户1263954
2019/07/04
5830
Redis复制缓冲区案例
可以看到,主库在进行了bgsave的时候,发生了中断,和从库之间的连接被断开了,原因也很清楚,就是超过了output buffer的值
AsiaYe
2021/10/14
1.3K0
Redis缓冲区不会还有人不知道吧?
会导致缓冲区需越来越多内存暂存数据。当缓冲区占用内存>设定上限阈值,就会出现缓冲区溢出。发生溢出,就会丢数据。不给缓冲区设上限,不就没这问题了?No!随累积数据增多,缓冲区所占内存空间越大,耗尽Redis机器可用内存时,Redis实例就会崩溃!
JavaEdge
2023/02/01
1.2K0
redis灵魂拷问:聊一聊主从复制缓冲区
在我之前《redis灵魂拷问:怎样搭建一个哨兵主从集群》搭建的集群主从哨兵集群,有1个主节点和2个从节点环境如下表:
jinjunzhu
2020/11/04
1.4K0
redis灵魂拷问:聊一聊主从复制缓冲区
Redis知识思维导图总结
Redis基础知识总结思维导图,系统的学习Redis。不定时更新。 主要包括: 基本数据和应用场景 常见问题分析 性能优化 持久化 集群模式 子模块 基本知识 基本数据类型和使用场景 基本数据类型 string 二进制安全,可以包含任何数据,一个键最大能存储512M hash 键值对集合,存储、读取、修改用户属性 list 链表(双向链表),可用于最新消息排行等功能(比如朋友圈的时间线)和消息队列 set 哈希表实现,元素不重复。可用于利用唯一性,统计访问网站的所有独立ip和好友推荐时
zeekling
2022/08/26
4480
Redis知识思维导图总结
Redis:22---客户端API:client、monitor)
一、client list client list命令能列出与Redis服务端相连的所有客户端连接信息。例如下面代码是在一个Redis实例上执行client list的结果,其中每一行代表一个客户端信
用户3479834
2021/02/03
8210
Redis:22---客户端API:client、monitor)
Redis pipeline(12)原
Pipeline模式:是一次性发送多个命令,最后一次取回所有的返回结果,这种模式通过减少网络的往返时间和io读写次数,大幅度提高通信性能。
兜兜毛毛
2020/04/23
9840
记录一次redis cluster集群故障-运维笔记
公司的一个系统业务出现故障,提示查询redis失败。查询相关日志,分析过程记录如下:
洗尽了浮华
2018/12/04
5.3K0
Redis学习五(Redis 阻塞的原因及其排查方向).
因为 Redis 是单线程的,大量的慢查询可能会导致 redis-server 阻塞,可以通过 slowlog get n 获取慢日志,查看详情情况。
JMCui
2020/11/05
2.2K0
Redis学习五(Redis 阻塞的原因及其排查方向).
如何保证 redis 的高并发和高可用?(redis 主从架构)
如果你用 redis 缓存技术的话,肯定要考虑如何用 redis 来加多台机器,保证 redis 是高并发的,还有就是如何让 redis 保证自己不是挂掉以后就直接死掉了,即 redis 高可用。
IT技术小咖
2019/11/22
2K0
redis.conf翻译与配置(六)【redis6.0.6】
当散列有少量条目且最大条目不超过给定的阈值时,使用内存高效数据结构对其进行编码。可以使用以下指令配置这些阈值:
看、未来
2022/05/06
6850
redis8.0新特性之Rdb Channel Replication:如何使复制过程更快,提升主节点在全量同步期间的性能
水平及维护精力所限,译文不免存在错误或过时之处,如有疑问,请查阅原文(文末英文链接)。
崔认知
2025/03/03
2350
redis8.0新特性之Rdb Channel Replication:如何使复制过程更快,提升主节点在全量同步期间的性能
redisclient命令_redisconnection
对于每个与服务器进行连接的客户端,服务器都为这些客户端建立了相应的 redis.h/redisClient结构(客户端状态),这个结构保存了客户端当前的状态信息,以及执行相关功能时需要用到的数据结构,其中包括:
全栈程序员站长
2022/11/04
5130
redisclient命令_redisconnection
如何确保Redis Pub/Sub模式的数据安全?
最近遇到一个生产环境问题,排查了比较久,记录一下,方便以后反思。 业务场景:实现每天的考勤打卡提醒,根据配置的规则数据,比如每天提前几分钟,提醒员工打卡,所以会下班前几分钟推送消息到微信公众号,提醒员工,记得打卡考勤
SmileNicky
2024/12/23
1580
《Redis设计与实现》读书笔记(十九) ——Redis客户端创建关闭及客户端总结
《Redis设计与实现》读书笔记(十九) ——Redis客户端创建关闭及客户端总结 (原创内容,转载请注明来源,谢谢) 一、客户端的创建于关闭 1、普通客户端连接 普通的客户端,通过connect
用户1327360
2018/03/07
1.7K0
《Redis设计与实现》读书笔记(十九)  ——Redis客户端创建关闭及客户端总结
Redis事件循环
Redis基于IO多路复用模式开发了自己的网络事件处理器,这个处理器被称为文件事件处理器,该处理器核心运作流程如下:
大忽悠爱学习
2022/12/30
5640
Redis事件循环
redis安装配置
redis安装配置文档 # 非常详细redis的介绍 http://blog.chinaunix.net/uid-790245-id-3766268.html wget http://redis.googlecode.com/files/redis-2.6.10.tar.gz tar zxvf redis-2.6.10.tar.gz -C /usr/local/ cd /usr/local/redis-2.6.10 make make install # make命令执行完成后,会在src目录下生成5个可执
程序员同行者
2018/07/02
9290
Redis的缓冲区
在Redis中,也存在缓冲区,即使Redis本身就是将数据存储在内存中,但也利用了内存缓冲区来避免因为请求处理速度跟不上请求接收速度而导致的数据丢失和性能问题。
夜半钟鸣
2021/02/19
1.4K0
Redis 复制过程详解
Redis 的复制功能分为同步( sync )和命令传播( command propagate )两个步骤:
程序员历小冰
2019/09/22
4810
Redis 复制过程详解
相关推荐
如何解决Redis复制风暴?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验