一文掌握Redis集群实用运维工具redis-tool

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: redis-tool基于原生的redis-cli客户端工具来进行Redis集群的监控、配置、问题分析等运维管理,能够极大降低Redis cluster集群的运维成本。同时作为脚本化工具,下载即可用,即使对于Redis初学者,也能够快速掌握集群的运行状况,完成集群配置管理、性能问题排查,具备Redis集群的基本运维能力。

关于redis-tool工具

Redis作为nosql内存数据库,因为丰富的数据类型、可持久化,以及出色的性能在许多公司中都得到了广泛的应用。随着业务量的增长,单机Redis无论数据容量还是访问性能都逐渐满足不了实际需求,Redis cluster集群因为良好的可扩展性,以及故障自动切换能力,被越来越多的公司作为分布式缓存产品的解决方案,但随之而来的运维复杂度也越来越高。

redis-tool 基于原生的redis-cli客户端工具来进行Redis集群的监控、配置、问题分析等运维管理,能够极大降低Redis cluster集群的运维成本。同时作为脚本化工具,下载即可用,即使对于Redis初学者,也能够快速掌握集群的运行状况,完成集群配置管理、性能问题排查,具备Redis集群的基本运维能力。

工具可以做什么?

redis-tool工具主要面向日常运维管理中的常见工作,提升运维效率,简化操作复杂度:

  • 集群监控:能够获取集群节点的键值数、内存使用量、每秒请求量、CPU使用率、请求响应时延等格式化信息,并给出异常告警提示
  • 配置管理:可以按节点属性来统一查询或修改指定的运行参数,并且支持对集群各节点的运行参数进行差异对比
  • 问题分析:具备慢命令日志查询、热点key分析、TOP命令跟踪、KEY前缀统计等问题分析能力

如何使用工具?

redis-tool工具使用shell脚本实现,下载到具有redis-cli工具的主机上即可使用(通常可部署到redis服务主机上)。

# 1. 从github下载redis-tool工具
# 方法一:使用git下载
$ git clone https://github.com/iwhalecloud-platform/redis-tool.git
# 进入下载目录
$ cd redis-tool
# 方法二:使用wget下载
$ wget https://github.com/iwhalecloud-platform/redis-tool/archive/refs/heads/main.zip
# 解压工具包&修改目录名
$ unzip main.zip && mv redis-tool-main redis-tool
# 进入下载目录
$ cd redis-tool

# 2. 设置REDIS_HOME环境变量为redis-cli工具所在目录(如果PATH环境变量中包含该目录,则该步可省略)
$ echo "export REDIS_HOME=/path/to/redis-cli/" >> ~/.bashrc
$ source ~/.bashrc

# 3. 使用帮助:不带参数执行工具可以看到使用帮助
$ ./redis-tool
Usage: redis-tool [OPTIONS] [command]
OPTIONS:
   -h <IP>:       Redis集群中某个节点IP (默认值: 127.0.0.1).
   -p <port>:     Redis集群中某个节点端口 (默认值: 6379).
   -i <nodefile>: Redis集群节点信息文件(适配codis等基于PROXY构建的集群模式).
                  文件格式(每行一个分片):<slots1> <MasterAddr> [SlaveAddr] [SlaveAddr]
   -a <password>: Redis访问密码,也可使用'REDISCLI_AUTH'环境变量来传入.
   -c <count>:    1. TOP10命令统计滚动展示次数(默认无限次, 'moni'使用).
                  2. 从Redis节点中获取的慢命令记录数(默认值: 100, 'slowlog'使用).
                  3. 从Redis节点中随机获取的KEY名称数量(默认值: 100000, 'keys'使用).
   -d <delay>:    TOP10命令统计滚动展示等待间隔(单位: 秒, 默认值: 3, 'moni'使用).
   -t <time>:     实时命令监控跟踪运行时长(单位: 秒, 默认值: 10, 'trace'使用).
   -s:            只处理指定Redis节点('moni' & 'slowlog'使用).
   -l:            TOP10命令统计滚动展示包含命令执行平均处理耗时('moni'使用).
   -f <file>:     1. 基于监控的命令详情文件进行命令监控跟踪处理('trace'使用).
                  2. 基于指定的KEY名称列表文件进行前缀统计('keys'使用).
   -L <level>:    按KEY前缀统计层级(默认值: 3, 'keys'使用).
   -H:            基于监控的命令详情文件进行热点KEY访问分析('trace'使用).
   -C:            基于监控的命令详情文件按客户端IP进行命令统计('trace'使用).
   -r:            按裸输据形式输出集群节点监控指标,便于存储或上报至第三方监控系统 ('nodes'使用).
   -k <key>:      要查询或修改的Redis运行参数名('config'使用).
   -v <value>:    要修改的Redis运行参数值('config'使用).
   -M:            只访问集群中主节点的运行参数 ('config'使用).
   -S:            只访问集群中从节点的运行参数 ('config'使用).
   -w:            Redis节点运行参数修改后需要重写配置文件('config'使用).
command:
   nodes:   集群节点状态监控 (默认执行)
   keys:    按KEY前缀层级进行统计分析
   moni:    TOP10命令周期性滚动统计
   trace:   实时命令监控跟踪 & 热点KEY访问分析
   slowlog: 集群慢命令日志查询
   config:  查询/修改集群运行参数 & 集群运行参数差异检查

什么时候使用?

Redis集群监控

场景介绍:日常运维中最常做的就是检查集群的运行状态、负载情况,作为排查业务访问慢、连接失败等问题的基本手段。虽然Redis本身提供的监控命令包含丰富的信息,但对于普通人员来说,掌握这些内容的门槛太高,而要整合集群所有节点的信息就更为繁琐。

使用nodes子命令可以汇总集群各节点的主要指标信息,并按照主从关系进行级联展示:

  1. 基本信息

    • 节点状态:可用于判断节点基本状态

      • OK:节点正常运行中
      • FAIL:节点连接失败
      • LOAD:节点正在进行数据加载
      • NOAUTH:节点密码认证失败(需指定正确的访问密码)
      • 节点角色:如果节点角色变更,可能是发生过故障切换,需要通过服务日志进一步核查

        • master:主节点
        • slave:从节点
    • 节点版本:对于Redis集群,版本号应该 >=3.0.0
    • 运行时长:节点已经运行的时长(单位:s),可用于判断节点是否发生重启
  2. 存储信息

    • 键值数:节点中存在的键值数
    • 使用内存:节点使用的内存量,建议不要超过10G,如果过高应该扩大集群规模
  3. 负载信息

    • 客户端数:节点当前接入的客户端连接数
    • %CPU:节点当前的CPU使用率百分比,通常不应该超过70%
    • OPS:节点当前每秒处理的命令请求量
    • RTT:节点当前请求响应时延(单位:us),通常不应该超过1000
  4. 汇总信息

    按主节点和集群维度,汇总节点数、键值数、内存使用量、客户端连接数、OPS、%CPU等指标信息

image.png

  • 主节点分布均匀,能够更好的发挥Redis性能,而且也有利于故障切换时的主从选举,所以对于主节点分布不均匀时,会给出告警信息
  • 工具支持-r参数,用于将集群节点指标以裸输据输出,方便进行指标文件存储,或上报至第三方监控平台

问题排查分析

慢命令分析

场景介绍:当客户端访问Redis存在时延过大时(上百毫秒),通常我们需要分析是否存在慢命令日志;Redis本身提供的日志信息未进行格式化,不利于查看;对于Redis集群来说,因为存在很多节点,进一步增大了慢命令日志分析难度。

使用slowlog子命令可以汇总集群各节点的慢命令日志,按日志生成时间进行排序展示格式化后的命令详情:

image.png

  • 日志按时间顺序展示,当前页面展示最新的日志信息
  • 对于存在慢命令日志的日期会进行日志数量汇总
  • 工具支持-c <count>参数,来指定查询节点最新的慢命令记录数(默认值:100

慢命令日志主要原因

  • 大key访问:key值包含的元素数太大时对Redis服务性能影响较大,建议优化业务逻辑,进行大key拆分或使用替代命令(例如使用HSCAN代替HGETALL
  • 复杂命令KEYSFLUSHDBHGETALL等,生产环境通常禁止使用
  • 主机内存不足:当主机因为内存不足,而使用了磁盘交换区时,对于Redis服务性能影响很大,需要进行内存使用限制或主机资源扩容
  • 主机CPU繁忙:主机CPU配置较低,或者部署了其他高CPU占用软件,生产环境建议Redis主机独占部署
  • CPU使用限制:通过cgroup限制了Redis进程的CPU使用率,导致访问性能下降,生产环境不建议进行限制

热点key分析

场景介绍:当业务应用性能出现瓶颈,而Redis集群整体访问量远未达到预期时,可能是因为热点key访问导致的性能问题,需要进行问题排查分析;redis-cli自带的热点key查找受限于服务版本、服务配置,以及查询的是整个运行周期内的热点key,问题定位的性能和准确性都难以达到期望效果。

当通过Redis集群监控发现某个Redis节点的%CPUOPS指标相对于其他节点高很多时,通常是因为存在热点key访问,此时可以使用trace子命令实时监控该节点的命令请求,并分析KEY的访问请求占比,从而发现热点key:

  1. 实时监控统计节点每秒处理的命令,并记录命令详情至文件中[172.16.18.81-6380.mon]

    image.png

  2. 基于监控的命令详情文件进行热点KEY访问分析,发现热点访问键key1

    image.png

热点key的存在通常需要从业务使用侧进行优化,主要的处理策略:

  • 将每次业务访问的key进行拆分,避免总是访问同一个key
  • 对需要频繁访问的key进行本地缓存,本地缓存数据可以通过定时策略进行更新
  • 优化业务流程处理逻辑,减少无效的交互访问次数

TOP命令跟踪

场景介绍:当Redis集群整体负载比较高,或者需要配合业务应用检查命令执行是否符合预期时,都需要我们对Redis集群的命令执行情况进行统计检查,并发现无效或高消耗的命令调用。

使用moni子命令能够滚动展示周期内TOP10命令执行次数、平均处理耗时、CPU使用率、新建客户端连接数、网络出入流量等信息;当存在大量非应用直接调用的命令时(例如PINGCLUSTER),或者某个命令执行次数或平均处理耗时不符合预期,都可以作为下一步排查的方向。

  1. 每秒滚动展示集群TOP10命令

    image.png

  2. 每3秒滚动展示集群TOP10命令及平均处理耗时(*数值,对应的即为平均处理耗时,单位:us)

    image.png

KEY前缀统计

场景介绍:当我们只是需要掌握Redis中存储的各类业务键值数量比例,以便提供给业务使用侧评估是否合理,是否存在大量无效键值可以清理;基于rdb文件可以进行深入分析,得到更多详细的内容,但是在节点数据量很大时,数据分析将占用更多的主机资源,耗时也更长。

使用keys子命令可以快速的抽取一定数量的KEY名称,对KEY按前缀统计键值数和占比信息后按前缀层级进行展示,其中第一层级会采用背景高亮,而键值占比达到一定阈值时会进行字体高亮区分:

image.png

配置参数管理

场景介绍:因为集群中会存在很多Redis节点,当我们要查看、修改某个运行参数,或者需要检查各节点配置差异时,就会因为操作繁杂,而增大操作出错的风险。

使用config子命令可以方便的检查各节点的配置差异,以及按角色来统一查询/修改指定配置参数。

检查节点配置差异

当未指定参数进行查询或修改时,默认会检查集群中各节点的配置差异,并且按各参数值数量(UNIQ)升序展示,其中存在不同值的参数行会高亮显示:

  • CONFIG_NAME:参数名
  • UNIQ:不同参数值数量,1表示各节点的参数值相同
  • DIFF_VALUES:参数值详情,不同参数值以逗号(,)间隔

image.png

查询/修改指定参数

集群参数查询/修改范围包括三类:所有节点(默认),所有主节点(-M),所有从节点(-S

  1. 查询集群各节点的slowlog-log-slower-than参数值

    image.png

  2. 修改集群主节点的slowlog-log-slower-than参数值为1000

    image.png

使用 -w参数时,当Redis运行参数修改后,会重写Redis配置文件,这样节点重启后能够继续生效
相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
3月前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
76 3
|
3月前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
70 4
|
3月前
|
运维 Linux Apache
Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例
【10月更文挑战第8天】本文介绍了Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例。Puppet通过定义资源状态和关系,确保系统配置始终如一,支持高效管理基础设施。文章详细讲解了Puppet的安装步骤、配置方法及DSL语言示例,帮助读者快速掌握Puppet的使用技巧。
97 2
|
6天前
|
弹性计算 运维 监控
云资源运维难?阿里云免费工具来帮忙
阿里云推出免费运维工具——云服务诊断,帮助用户提升对云资源的运维效率、降低门槛、减轻负担。其核心功能包括「健康状态」和「诊断」。通过「健康状态」可实时查看云资源是否正常;「诊断」功能则能快速排查网络、配置、安全等问题,并提供修复建议,助您迅速恢复业务。体验评测活动火热进行中,参与即有机会赢取索尼头戴耳机、小米背包等好礼。活动链接:https://developer.aliyun.com/topic/cloud-health。
144 9
|
29天前
|
存储 NoSQL Redis
redis主从集群与分片集群的区别
主从集群通过主节点处理写操作并向从节点广播读操作,从节点处理读操作并复制主节点数据,优点在于提高读取性能、数据冗余及故障转移。分片集群则将数据分散存储于多节点,根据规则路由请求,优势在于横向扩展能力强,提升读写性能与存储容量,增强系统可用性和容错性。主从适用于简单场景,分片适合大规模高性能需求。
41 5
|
29天前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
10天前
|
存储 NoSQL 网络协议
Redis性能攻略:Redis-benchmark工具与实用性能优化技巧
Redis 是一种高性能的内存数据库,广泛应用于各种业务场景。随着业务规模扩大和数据量增长,性能问题逐渐凸显。本文深入探讨 Redis 性能优化方案,包括硬件配置(网络、内存优化)、参数配置(maxmemory、timeout 等)、数据结构选择、过期策略、持久化机制(RDB、AOF)及集群方案(主从复制、哨兵模式、集群模式),帮助提升 Redis 的整体性能表现。
28 0
|
2月前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
2月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
71 4
|
2月前
|
运维 监控 数据安全/隐私保护
自动化运维工具的设计与实现
【10月更文挑战第34天】在现代IT基础设施管理中,自动化运维工具扮演着至关重要的角色。它们不仅提高了运维效率,还确保了服务的连续性和稳定性。本文将深入探讨如何设计并实现一个自动化运维工具,从需求分析到功能实现,再到最终的测试与部署。我们将通过一个简单的代码示例来展示如何自动执行常见的运维任务,如日志清理和性能监控。文章旨在为读者提供一套完整的方法论,以便他们能够构建自己的自动化运维解决方案。