您当前的位置:首页 > 电脑百科 > 数据库 > Redis

记一次生产环境Redis主从同步异常事故

时间:2022-04-27 09:23:53  来源:  作者:BlueCore

故障

生产环境zabbix突然告警,redis主从服务器的CPU使用率过高。通过堡垒机连接生产服务器查看具体情况。发现占用CPU较高的是redis进程。

遂进一步查看redis实例的日志,发现进行几个小时内,从库出现了多次尝试重新连接主库的日志信息。同样,主库redis日志中也出现了类似的日志信息:

182780:M 25 Apr 2020 14:00:57.423 * Replica 10.135.11.2:6379 asks for synchronization
182780:M 25 Apr 2020 14:00:57.423 * Full resync requested by replica 10.135.11.2:6379
182780:M 25 Apr 2020 14:00:57.423 * Can't attach the replica to the current BGSAVE. WAIting for next BGSAVE for SYNC
155515:C 25 Apr 2020 14:05:10.743 * DB saved on disk
155515:C 25 Apr 2020 14:05:11.463 * RDB: 2546 MB of memory used by copy-on-write
182780:M 25 Apr 2020 14:05:12.701 * Background saving terminated with success
182780:M 25 Apr 2020 14:05:12.701 * Starting BGSAVE for SYNC with target: disk
182780:M 25 Apr 2020 14:05:13.562 * Background saving started by pid 155647
182780:M 25 Apr 2020 14:05:40.585 # Client id=6140013 addr=10.135.11.2:42026 fd=631 name= age=283 idle=283 flags=S db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=14930 oll=13092 omem=268438368 events=r cmd=psync scheduled to be closed ASAP for overcoming of output buffer limits.
182780:M 25 Apr 2020 14:05:40.646 # Connection with replica 10.135.11.2:6379 lost.

根据上面的日志,不难发现其中的关键信息:

cmd=psync scheduled to be closed ASAP for overcoming of output buffer limits.

问题根源

经查资料,上面提示的关键信息意思是:

psync的命令超过了output-buffer-limits参数给定的限制值,master主动关闭了slave的连接。然后slave又重新尝试连接master实例请求同步,同样的,无论请求多少次,都会由于这个参数的限制,同步失败,继而周而复始,陷入了恶性循环。slave找master做全同步的过程是一个很消耗cpu消耗io消耗带宽的过程,所以会一直持续地告警。

一句话总结问题:生产环境数据量过大,主备切换以后要同步的数据过大。Slave实例请求同步的过程中,达到了参数 output-buffer-limits的最大值,被主库强制断开连接。从库多次尝试重新同步主库的数据。

解决方案

调整redis实例 output-buffer-limits 参数值。

redis 默认配置中,该参数的配置项为:

client-output-buffer-limit slave 256mb 64mb 60

该参数作为redis的一项自我保护机制,默认硬性限制为256MB,或者达到软限制64MB后,并持续60秒钟,master实例会强制断开与slave的连接。

解决方法

# 登录Master实例执行如下命令,取消针对slave这种客户端类型的限制
127.0.0.2:6379>config set client-output-buffer-limit 'slave 0 0 0'
# 执行 config rewrite 将变更保存到redis配置文件
127.0.0.2:6379>config rewrite

记得登录Slave实例执行同样的操作,以免Redis在下一次出现主从切换后,出现同样的问题。

参数解析

该参数配置格式:

client-output-buffer-limit <class> <hard limit> <soft limit> <soft seconds>

具体参数含义如下:

class: 客户端种类,包括Normal,Slaves和Pub/Sub

  • Normal: 普通的客户端。默认limit 是0,也就是不限制。
  • Pub/Sub: 发布与订阅的客户端的。默认hard limit 32M,soft limit 8M/60s。
  • Slaves: 从库的复制客户端。默认hard limit 256M,soft limit 64M/60s。

hard limit: 缓冲区大小的硬性限制。

soft limit: 缓冲去大小的软性限制。

soft seconds: 缓冲区大小达到了(超过)soft limit值的持续时间。

 

当client buffer的大小达到了soft limit并持续了soft seconds时间,master会立即断开和客户端的连接;

当client buffer的大小达到了hard limit,master会立即断开和客户端的连接。



Tags:Redis   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
兄弟,王者荣耀的段位排行榜是通过Redis实现的?
在王者荣耀中,我们会打排位赛,而且大家最关注的往往都是你的段位,还有在好友中的排名。作为程序员的你,是否思考过这个段位排行榜是怎么实现的?了解它的实现原理,会不会对上分有所...【详细内容】
2024-04-15  Search: Redis  点击:(3)  评论:(0)  加入收藏
16个Redis常见使用场景总结
来源:blog.csdn.net/qq_39938758/article/details/105577370目录 缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息...【详细内容】
2024-04-11  Search: Redis  点击:(8)  评论:(0)  加入收藏
Linux获取Redis 性能指标方法
一、监控指标&Oslash; 性能指标:Performance&Oslash; 内存指标: Memory&Oslash; 基本活动指标:Basic activity&Oslash; 持久性指标: Persistence&Oslash; 错误指标:Error二、监...【详细内容】
2024-04-11  Search: Redis  点击:(10)  评论:(0)  加入收藏
Redis与缓存一致性问题
缓存一致性问题是在使用缓存系统,如Redis时经常遇到的问题。当数据在原始数据源(如数据库)中发生变化时,如何确保缓存中的数据与数据源保持一致,是开发者需要关注的关键问题。一...【详细内容】
2024-04-11  Search: Redis  点击:(8)  评论:(0)  加入收藏
Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证
Redis 官方于21日宣布修改开源协议 &mdash;&mdash; 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause...【详细内容】
2024-03-27  Search: Redis  点击:(23)  评论:(0)  加入收藏
Redis“叛逃”开源,得罪了几乎所有人
内存数据库供应商Redis近日在开源界砸下了一块“巨石”。Redis即将转向双许可模式,并实施更为严格的许可条款。官方对此次变更的公告直截了当:从Redis 7.4版本开始,Redis将在Re...【详细内容】
2024-03-25  Search: Redis  点击:(13)  评论:(0)  加入收藏
如何使用 Redis 实现消息队列
Redis不仅是一个强大的内存数据存储系统,它还可以用作一个高效的消息队列。消息队列是应用程序间或应用程序内部进行异步通信的一种方式,它允许数据生产者将消息放入队列中,然...【详细内容】
2024-03-22  Search: Redis  点击:(22)  评论:(0)  加入收藏
Redis不再 “开源”
Redis 官方今日宣布修改开源协议 &mdash;&mdash; 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause 开...【详细内容】
2024-03-21  Search: Redis  点击:(14)  评论:(0)  加入收藏
在Redis中如何实现分布式锁的防死锁机制?
在Redis中实现分布式锁是一个常见的需求,可以通过使用Redlock算法来防止死锁。Redlock算法是一种基于多个独立Redis实例的分布式锁实现方案,它通过协调多个Redis实例之间的锁...【详细内容】
2024-02-20  Search: Redis  点击:(50)  评论:(0)  加入收藏
手动撸一个 Redis 分布式锁
大家好呀,我是楼仔。今天第一天开工,收拾心情,又要开始好好学习,好好工作了。对于使用 Java 的小伙伴,其实我们完全不用手动撸一个分布式锁,直接使用 Redisson 就行。但是因为这些...【详细内容】
2024-02-19  Search: Redis  点击:(46)  评论:(0)  加入收藏
▌简易百科推荐
兄弟,王者荣耀的段位排行榜是通过Redis实现的?
在王者荣耀中,我们会打排位赛,而且大家最关注的往往都是你的段位,还有在好友中的排名。作为程序员的你,是否思考过这个段位排行榜是怎么实现的?了解它的实现原理,会不会对上分有所...【详细内容】
2024-04-15    dbaplus社群  Tags:Redis   点击:(3)  评论:(0)  加入收藏
16个Redis常见使用场景总结
来源:blog.csdn.net/qq_39938758/article/details/105577370目录 缓存 数据共享分布式 分布式锁 全局ID 计数器 限流 位统计 购物车 用户消息时间线timeline 消息...【详细内容】
2024-04-11    书圈  Tags:Redis   点击:(8)  评论:(0)  加入收藏
Linux获取Redis 性能指标方法
一、监控指标&Oslash; 性能指标:Performance&Oslash; 内存指标: Memory&Oslash; 基本活动指标:Basic activity&Oslash; 持久性指标: Persistence&Oslash; 错误指标:Error二、监...【详细内容】
2024-04-11  上海天正信息科技有限    Tags:Redis   点击:(10)  评论:(0)  加入收藏
Redis与缓存一致性问题
缓存一致性问题是在使用缓存系统,如Redis时经常遇到的问题。当数据在原始数据源(如数据库)中发生变化时,如何确保缓存中的数据与数据源保持一致,是开发者需要关注的关键问题。一...【详细内容】
2024-04-11  后端Q    Tags:Redis   点击:(8)  评论:(0)  加入收藏
Redis 不再 “开源”,未来采用 SSPLv1 和 RSALv2 许可证
Redis 官方于21日宣布修改开源协议 &mdash;&mdash; 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause...【详细内容】
2024-03-27  dbaplus社群    Tags:Redis   点击:(23)  评论:(0)  加入收藏
Redis“叛逃”开源,得罪了几乎所有人
内存数据库供应商Redis近日在开源界砸下了一块“巨石”。Redis即将转向双许可模式,并实施更为严格的许可条款。官方对此次变更的公告直截了当:从Redis 7.4版本开始,Redis将在Re...【详细内容】
2024-03-25    51CTO  Tags:Redis   点击:(13)  评论:(0)  加入收藏
如何使用 Redis 实现消息队列
Redis不仅是一个强大的内存数据存储系统,它还可以用作一个高效的消息队列。消息队列是应用程序间或应用程序内部进行异步通信的一种方式,它允许数据生产者将消息放入队列中,然...【详细内容】
2024-03-22  后端Q  微信公众号  Tags:Redis   点击:(22)  评论:(0)  加入收藏
Redis不再 “开源”
Redis 官方今日宣布修改开源协议 &mdash;&mdash; 未来所有版本都将使用 “源代码可用” 的许可证 (source-available licenses)。具体来说,Redis 将不再遵循 BSD 3-Clause 开...【详细内容】
2024-03-21  OSC开源社区    Tags:Redis   点击:(14)  评论:(0)  加入收藏
在Redis中如何实现分布式锁的防死锁机制?
在Redis中实现分布式锁是一个常见的需求,可以通过使用Redlock算法来防止死锁。Redlock算法是一种基于多个独立Redis实例的分布式锁实现方案,它通过协调多个Redis实例之间的锁...【详细内容】
2024-02-20  编程技术汇    Tags:Redis   点击:(50)  评论:(0)  加入收藏
手动撸一个 Redis 分布式锁
大家好呀,我是楼仔。今天第一天开工,收拾心情,又要开始好好学习,好好工作了。对于使用 Java 的小伙伴,其实我们完全不用手动撸一个分布式锁,直接使用 Redisson 就行。但是因为这些...【详细内容】
2024-02-19  楼仔  微信公众号  Tags:Redis   点击:(46)  评论:(0)  加入收藏
站内最新
站内热门
站内头条