Redis案例:Redis Cluster分片数据不均匀
前言
对于分布式系统来说,整个集群的存储容量和处理能力,往往取决于集群中容量最大或响应最慢的节点。因此在前期进行系统设计和容量规划时,应尽可能保证数据均衡。但是,在生产环境的业务系统中,由于各方面的原因,数据倾斜的现象还是比较常见的。Redis Cluster也不例外,究其原因主要包括两个:一个是不同分片间key数量不均匀,另一个是某分片存在bigkey;接下来我们看看,在腾讯云数据库redis中,如何及时发现和解决分片数据不均匀的问题。
问题排查
(1)我们可以通过以下命令生成一些bigkey,以模拟分片数据不均匀
# redis-benchmark -h xxx -p xxx -a xxx -c 10 -n 100 -r 50 -d 104857600 -t set
(2)在 控制台-节点管理 界面,查看key数量和容量,确定是否存在数据不均匀?是什么原因导致?从监控数据来看,本集群其中1个分片容量约2GB,其它2个分片容量均在50MB左右,存在严重数据倾斜问题;不过,3个分片的key数量均在15w左右,可以排除是key数量分布不均匀导致
(3)在 控制台-系统监控-Key分析 界面,确定存在哪些bigkey?占用大小是多少?从监控数据来看,本集群存在多个100MB左右的bigkey
(4)登录Redis,通过cluster slots/cluster keyslot xxx命令,确定bigkey具体分布在哪个分片?从输出结果来看,bigkey所在槽位均位于0~5460范围内,属于同一个分片
解决方案
对于分片间key数量不均匀,导致数据倾斜问题,可考虑以下方案(可能性小):
(1)垂直扩容:扩容单分片内存容量(不推荐)
(2)水平扩容:扩容分片数,以把key打散到不同分片(推荐)
对于某分片存在bigkey,导致数据倾斜问题,可考虑以下方案(可能性大):
(1)垂直扩容:扩容单分片内存容量(不推荐)
(2)对bigkey进行改造,拆分成多个key打散(推荐)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux常用命令之chmod修改文件权限777和754
- 解决CentOS 7升级Python到3.6.6后yum出错问题总结
- Linux下如何挂载磁盘的方法示例
- centos7 PHP环境搭建 GD库 等插件安装方法
- CentOS服务器环境下MySQL主从同步配置方法
- awk命令
- linux下C语言实现写日志功能
- centOS7下Spark安装配置教程详解
- linux tail 查看日志文件方法
- Linux下Python脚本自启动和定时启动的详细步骤
- linux后台执行命令&和nohup的具体使用方法
- Linux修改hostname与免密码登录的方法
- Linux启动与停止spring boot工程的脚本示例
- 在Linux上如何检查用户所属组详解
- Linux中移除(删除)符号链接的命令