首页 > 数据库 >生产环境 Redis 优化记录

生产环境 Redis 优化记录

时间:2022-12-20 12:00:20浏览次数:44  
标签:缓存 记录 keys Redis found avg 优化 size

1.现状描述

1.1.生产环境

生产环境配置6套 Redis 服务。

1、配置为3节点物理服务器的 Redis 缓存群集,通过控制应用的主、备处于不同的物理服务器实现 Redis 访问的高可用,按不同的应用访问配置对应的内存大小。

2、单台物理服务器的 Redis 服务,主要用于应急备用资源。

3、配置为3节点的虚拟服务器 Redis 集群,用于电商类应用。

4、单独配置的IOT、智能门店、会员应用的缓存资源,使用 6.0.5版本。

 生产环境的物理服务器群集采用 SSD 盘配置,Redis 的版本为4.0.1,硬盘同步的模式采用 AOF 数据持久化配置;

虚拟群集的Redis 版本为 6.0.5,取消 AOF 持久化配置,启用新版本的多线程功能。

4、生产环境的 Redis 服务器集群配置开源性能监控软件cacheCloud,通过GUI图形方式呈现群集的慢查询情况。

1.2.测试环境

试环境配置3台 Redis 虚拟群集,在6月初配置升级为 6.0.5版本(由4.x 升级到 6.x)。版本升级完成后测试环境的应用数据访问无异常。

2.故障现象

Redis 主从频繁切换导致业务访问异常,出现无法登录或页面无响应的情况

3.故障原因

1、群集启用持久化配置,磁盘写入频繁导致主从检查超时引起自动切换

2、业务程序代码缓冲池占用链接过多不释放

3、Redis 资源应用不规范,将缓存服务器当数据库使用

4.问题分析

4.1.Redis AOF 存在IO瓶颈

集群采用 RDB 与 AOF 双持久化的机制。其中RDB平均约2分钟运行一次,持续时间为28秒,数据量为2700余万左右;而AOF实时记录写操作,对master资源占用更高。对Linux服务器进行监控,观察到15时左右写入操作峰值约100MB/s,存在瞬时数据写入压力

生产环境 Redis 优化记录_缓存

生产环境 Redis 优化记录_缓存_02

4.2.Redis 使用不规范

例如wmXXXX系列和openid系列大量使用根目录或者随机目录使用数据,未建立层级目录(如外卖系统做的就比较好,可以借鉴),导致无法通过工具查看redis中数据,首先不利于运维查看,其次也不利于监控维护。

生产环境 Redis 优化记录_优化_03

生产环境 Redis 优化记录_优化_04

生产环境 Redis 优化记录_优化_05


实例对

键值对数量

过期时间为-1

过期时间大于3600

2(192.168.5.145:9010)

3,773,854

794,586

2,960,407

3(192.168.5.145:9030)

7,148,392

1,515,295

5,585,320

超时时间设置为-1的(永不删除)的约占20%,超时时间大于1个小时的约占78%,两者相加共占98%。大量数据超时时间设置为-1,导致无法利用Redis自动回收数据机制,降低查询命中率,同时增加了数据的维护资源消耗。

4.3.Redis 应用没有读写分离

网络资源消耗在主从切换时波动较大,切换时访问流量自动迁移至master节点,而slave节点几乎无访问。

生产环境 Redis 优化记录_优化_06

生产环境 Redis 优化记录_服务器_07

生产环境 Redis 优化记录_缓存_08

除切换主从引发的流量异常增加外,选取7月10日1:00~11:00数据进行观察,观察到只有Master发生读写,Slave几乎无读写,只有数据同步引发的IO。

缓存服务 IP

入口平均流量

出口平均流量

同步平均流量

192.168.5.152

10.24Mbps

34.05Mbps

5Mbps

192.168.5.142

8.25Mbps

17.68Mbps

5Mbps

192.168.5.145

5.3Mbps

5.52Mbps

5Mbps

4.4.应用代码缓冲池应用不规范

代码缓冲池持续占用缓存服务器网络连接,影响缓存服务器整体网络性能

生产环境 Redis 优化记录_Redis_09

生产环境 Redis 优化记录_缓存_10

开发回收缓冲池后缓存群集稳定性提升(没有出现自动切换报警)。其中 192.168.0.203 占用的连接数由1.36K降为30、192.168.0.218由372降为124。

4.5.电商应用

优化前(2020-7-28)

生产环境 Redis 优化记录_优化_11

Sampled 202749 keys in the keyspace!
Total key length in bytes is 8949425 (avg len 44.14)

Biggest string found '001:002:003:groupon:activity:indexlist:' has 949198 bytes
Biggest list found 'addoplog' has 6365167 items
Biggest set found '001:002:003:store:groupstore:20' has 22013 members
Biggest hash found 'alipay:mp:coupon_user_get_count' has 1291419 fields
Biggest zset found '001:002:003:store:geo:channel:1' has 21310 members

135631 strings with 66782153 bytes (66.90% of keys, avg size 492.38)
6449 lists with 6818691 items (03.18% of keys, avg size 1057.33)
38894 sets with 2347603 members (19.18% of keys, avg size 60.36)
21770 hashs with 1521001 fields (10.74% of keys, avg size 69.87)
5 zsets with 76302 members (00.00% of keys, avg size 15260.40)

生产环境 Redis 优化记录_优化_12

生产环境 Redis 优化记录_优化_13

优化后

192.18.5.145:9020

生产环境 Redis 优化记录_优化_14

生产环境 Redis 优化记录_缓存_15

Sampled 16701335 keys in the keyspace!

Total key length in bytes is 755221587 (avg len 45.22)

Biggest string found 'portal.mp_coupon_allstorecodeV1' has 840115 bytes
Biggest list found 'groupon:activity_user_behavior_list' has 4047488 items
Biggest set found 'portal:mp:sendgiftbaguser:' has 4182827 members
Biggest hash found 'alipay:mp:coupon_user_get_count' has 7822308 fields
Biggest zset found 'alipay:store:geo:temp' has 24579 members

14805770 strings with 1318411927 bytes (88.65% of keys, avg size 89.05)
12479 lists with 4583765 items (00.07% of keys, avg size 367.32)
3284 sets with 4499371 members (00.02% of keys, avg size 1370.09)
1879799 hashs with 12640365 fields (11.26% of keys, avg size 6.72)
3 zsets with 45714 members (00.00% of keys, avg size 15238.00)
0 streams with 0 entries (00.00% of keys, avg size 0.00)

解决方案

1、调整缓存群集内存空间、调整系统硬盘配置参数等基于服务器硬件的调整

2、增加临时单主机独立的 Redis 服务器配置,迁移部分业务,如电商应用部分功能

3、增加电商、会员、IOT、智能门店的独立 Redis 资源,独立缓存版本升级为 6.0.3,启用多线程支持。

4、增加服务器端口监控,调整业务程序代码;调整缓存持久化配置参数

5、迁移业务应用到独立缓存;会员、智能门店应用需要优化和调整代码。


标签:缓存,记录,keys,Redis,found,avg,优化,size
From: https://blog.51cto.com/waringid/5954704

相关文章

  • 如何优化大场景实时渲染?HMS Core 3D Engine这么做
    在先前举办的华为开发者大会2022(HDC)上,华为通过3D数字溪村展示了自有3D引擎“HMSCore3DEngine”(以下简称3DEngine)的强大能力。作为一款高性能、高画质、高扩展性的3D引......
  • 数据库性能优化小结
    近期部门有大牛分享了下数据库的相关知识,自己这里趁热也总结一下对应测试来说比较容易涉及到的性能优化方面的知识。数据库的性能从宏观上可以分为:查询、插入;这里小结了下影......
  • 实例说明optimize table在优化mysql时很重要
    实例说明optimizetable在优化mysql时很重要张映发表于2011-03-07分类目录:mysql标签:mysql,optimizetable,优化今天在看CU的时候,发现有人问有关optimize来......
  • 基于MATLAB的pso粒子群算法优化——计算样本再拟合函数最大值
    1.算法概述       PSO是粒子群优化算法(——ParticleSwarmOptimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模......
  • vivo 推荐业务 x DeepRec:全链路优化实践
    作者:vivo-人工智能推荐团队:何鑫、李恒、周健、黄金宝背景vivo人工智能推荐算法团队在深耕业务同时,也在积极探索适用于搜索/广告/推荐大规模性稀疏性算法训练框架。分别探......
  • RedisTemplate
    SpringBoot中Jedis几个api返回值的确认 @RequestMapping("/del/{key}")publicStringdel(@PathVariable("key")Stringkey){try{//键不存在......
  • linux 中记录程序运行的时间
     001、[root@pc1test1]#start=$(date+%s)##记录程序的开始时间[root@pc1test1]#echo$start1671529118[root@pc1test1]#end=$(date+%s)##......
  • 【问题记录】Caused by: java.lang.ClassNotFoundException: org.springframework.boo
    1 报错现象2022-12-2008:53:48:371[restartedMain]INFOorg.springframework.boot.devtools.env.DevToolsPropertyDefaultsPostProcessor.logTo(DevToolsPropertyD......
  • 使用Tomcat基于redis的session共享机制集群部署
    常见的session集群方案:session复制和session共享Session复制:指session信息会在集群节点之间复制,每个节点服务上都会有相同的session信息;主要是实现后端多个节点的冗余功......
  • 聊聊如何利用redis实现多级缓存同步
    前言前阵子参加业务部门的技术方案评审,故事的背景是这样:业务部门上线一个专为公司高管使用的系统。这个系统技术架构形如下图按理来说这个系统因为受众很小,可以说基本上......