技术解读丨分布式缓存数据库Redis大KEY问题定位及优化建议
摘要:如何定位分布式缓存数据库Redis大KEY问题,实操案例带你掌握优化方法。
【背景】
访问Redis 5.0 cluster集群出现OOM报错,报错信息为(error) OOM command not allowed when used memory > ‘maxmemory’,部分ECS应用程序无法向数据库写入,影响服务的正常使用。执行set t2 s2时,数据库报错OOM,如下图:
【拓扑】
环境信息:
Redis 5.0 cluster集群 4G内存
DCS网段:192.168.1.0/24
分片1:master 192.168.1.12 slave 192.168.1.37
分片2:master 192.168.1.10 slave 192.168.1.69
分片3:master 192.168.1.26 slave 192.168.1.134
【分析思路】
【详细步骤】
一、查看监控
查看Redis实例监控,显示Redis集群内存占用46.97%,无明显异常,结果如下图所示:
查看节点的内存监控。其中分片2中master节点192.168.1.10内存使用率达到100%,其余两个分片分内存使用率均在20%左右,结果如下图所示:
二、确认异常分片信息
通过上述监控信息可得知,该redis集群中的分片2中内存使用率达100%。有且仅有该分片内存异常。
三、大KEY分析
在线分析
① 工具分析:使用华为云管理控制台缓存分析-大Key分析工具。执行完成后,查看信息即可。结果如下图所示:(string类型保存top20,list/set/zset/hash类型保存top80)
具体使用方法参考以下链接:https://support.huaweicloud.com/usermanual-dcs/dcs-ug-190808001.html
② 命令分析:使用redis-cli -h IP -p port –bigkeys命令,该工具会列出各个类型数据中大Key中的最大的那个key的信息。结果如下图所示:
如上图所示,可以得出该环境中string类型的大key为“nc_filed/_pk”,大小为13283byte,list、set、hash、zset类型的数据未发现大key。
离线方式
离线分析需要使用专门的rdb_bigkeys分析工具,对rdb文件进行分析。工具地址: https://github.com/weiyanwei412/rdb_bigkeys。具体步骤如下:
编译方法:
# yum install git go -y
# mkdir /home/gocode/
# cd /home/gocode/
# git clone https://github.com/weiyanwei412/rdb_bigkeys.git
# cd rdb_bigkeys
# go build
执行完成生成可执行文件rdb_bigkeys。
使用方法:
./rdb_bigkeys -bytes 1024 -file bigkeys.csv -sorted -threads 4 /home/redis/dump.rdb
参数说明:
-bytes 1024:筛选大于1024字节的key
-file bigkeys.csv:将结果保存到bigkeys.csv文件
-sorted:从大到小进行排序
-threads:使用的线程个数
/home/redis/dump.rdb:实际的rdb文件路径
生成文件样式如下所示:
每列分别为数据库编号,key类型,key名,key大小,元素数量,最大值元素名,元素大小,key过期时间。文档链接:https://www.cnblogs.com/yqzc/p/12425533.html
四、解决方案
导致本次OOM问题的根因为大KEY导致数据大小分布不均匀,某一个分片内存达到maxmemory,在进行数据写入的过程中,如果调度到该分片,则会产生OOM问题。将该分片的rdb文件导出一份,以便于后期针对大key做对应的优化。
临时方案:
为尽快回复业务,删除上有步骤中查询到的大KEY,执行操作如下:(非字符串的bigkey,不要使用 del 删除,使用 hscan、sscan、zscan 方式渐进式删除)
长期方案:
通过对大KEY进行拆分,将一个大的KEY拆分为多个小的KEY, 变成value1,value2… valueN,打散分不到不同的分片中,避免因为数据倾斜导致的数据分布不均。
其他的类型的数据也可以按照相同的方式进行拆分重组,从而避免大KEY带来的影响。
五、 结果验证
查看分片监控,192.168.1.10内存使用率下降到24%,结果如下图所示:
执行set t2 s2,返回正常,登录集群,执行get命令,正常返回数据信息。结果如下所示,至此业务恢复正常。
【优化及建议】
1) 配置节点级别的内存利用率监控指标的告警。如果某个节点存在大key,这个节点比其他节点内存使用率高很多,会触发告警,便于用户发现潜在的大key。
2) 配置节点级别的入网最大带宽、出网最大带宽、CPU利用率监控指标的告警。如果某个节点存在热key,这个节点的带宽占用、CPU利用率都比其他节点高,该节点会容易触发告警,便于用户发现潜在热key。
3) string类型控制在10KB以内,hash、list、set、zset元素尽量不超过5000。
4) 定期通过大key、热key分析工具检查集群中是否存在大key问题,尽早识别风险。
点击关注,第一时间了解华为云新鲜技术~
技术解读丨分布式缓存数据库Redis大KEY问题定位及优化建议相关推荐
- 深度评测丨GaussDB(for Redis)大Key操作的影响
本文分享自华为云社区<墨天轮评测:GaussDB(for Redis)大Key操作的影响>,作者: 高斯 Redis 官方博客. 在前一篇文章<墨天轮评测:GaussDB(for R ...
- Redis大key 问题
背景 双十一大促期间, 收到客服反馈通知,说 APP 领券接口缓慢.找到一个case,通过调用链路发现,是操作redis 缓慢,并且还搜到一些redis 异常. 最后定位到原因:是发券场景下拿redi ...
- Redis——大Key问题
上一篇文章讲了Redis的热点key问题,本篇介绍Redis大Key问题的概念,大Key问题产生的原因.危害以及解决大Key问题的思路: 1. 什么是大key?多大算大key? 其实关于"大 ...
- Redis 大key与热key
目录 Redis中BigKey解决方案 什么是BigKey? 大key场景 大key问题 如果redis的key较长时,会产生什么样的影响呢? 如何查看Redis中的bigKey? 查看所有BigKe ...
- 解决Redis大key问题,看这一篇文章就够了
作者 | 个推数据库工程师 嘉木 个推作为国内第三方推送市场的早期进入者,专注于为开发者提供高效稳定的推送服务,经过9年的积累和发展,服务了包括新浪.滴滴在内的数十万APP.由于我们推送业务对并发量 ...
- 技术前沿:分布式缓存Redis Cluster在华泰证券的探索与实践
关注↑↑↑我们获得更多精彩内容! 本文选自<交易技术前沿>总第三十期文章(2018年3月) 作者:樊建 陈营 葛宝磊/华泰证券股份有限公司 Redis Cluster作为最热门的开源分布式 ...
- 技术分享丨华为鲲鹏架构Redis知识二三事
摘要:华为云鲲鹏Redis,业界首个基于自研ARM-Based全栈整合的Redis云服务,支持双机热备的HA架构,提供单机.主备.Proxy集群.Cluster集群实例类型,满足高读写性能场景及弹性变 ...
- 分布式缓存系统Redis原理解析
Redis作为内存数据库已经广泛应用于大数据领域,已经成为分布式架构下的基础组件.本文主要介绍了Redis内部的实现原理包括IO模型.内存管理.数据持久化等以及三种集群架构,旨在了解其中的实现机制. ...
- 面试精讲之面试考点及大厂真题 - 分布式专栏 11 Redis热点key大Value解决方案
11 Redis热点key大Value解决方案 时间像海绵里的水,只要你愿意挤,总还是有的. --鲁迅 引言 上期分析了<Redis 雪崩,穿透,击穿三连问>,看了我的分析后回答面试官肯定 ...
最新文章
- python找零钱_Python递归 - 找零钱
- 微软熊辰炎:如何利用图神经网络解决半结构化数据问题?
- 在工作中有被动转主动的体会_积极主动应对眼前的一切,就是对自己最好的犒赏...
- Xara Designer Pro中文版
- Redis数据分布一致性哈希
- 获取当前目录绝对路径
- 敏捷开发中史诗故事与用户故事的颗粒度
- 大数据分析的优势有哪些特点
- 我在项目中运用 IOC(依赖注入)--入门篇
- Dijkstra(堆优)模板
- 用Java解决牛客网题目JD1年终奖
- 联想笔记本e43l_联想昭阳E43L电脑配置
- 华为+android+root权限获取root,华为root权限获取的方法有哪些【图文】
- Win10 Win11 安装和使用手记
- 微信小程序上线缓存及解决办法
- 动手做一个小机器人——语音控制篇
- Skip List——跳表,一个高效的索引技术
- 大数据与JS实现2014巴西世界杯冠军预测图
- 上海市公积金、养老保险、医疗保险转出事宜
- 代理服务器导致连接不上局域网问题
热门文章
- JavaScript 删除Cookie
- HTML section元素
- 堆、队列、栈、链表对比
- matlab 判断两个矩阵有元素相等_如何使用MATLAB对Excel中的多参数进行计算?
- Android已申请动态权限报错,Android 读取或者写入U盘时,报错:Permission denied
- linux oa系统搭建,linux版OA系统的安装配置
- linux制作chroot环境,Linux构造chroot环境
- H5的本地保存localStorage、sessionStorage用法总结
- Quartz+log4net实现控制台程序定时运行,并且记录日志
- 各位加了一天班累了吧?那我们来继续未完的表单验证吧