Skip to main content
  1. All Posts/

redis-tool

Tools Shell

redis-tool

Redis Cluster Daily Maintenance Tool/Redis集群日常运维工具

工具简介

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

  • 集群监控:能够获取集群节点的键值数、内存使用量、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

使用帮助

直接运行redis-tool可查看到使用帮助:

$ ./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:  查询/修改集群运行参数 & 集群运行参数差异检查

使用示例

注意事项

  1. 请提前设置REDIS_HOME环境变量为redis-cli工具所在目录(如果PATH环境变量中包含该目录,可省略)
  2. 强烈建议使用REDISCLI_AUTH环境变量来传入Redis访问密码,提升安全性

Redis集群监控

使用nodes子命令可以汇总集群各节点的主要指标信息,并按照主从关系进行级联展示(当未指定子命令时,默认执行Redis集群监控子命令),可以针对Redis Cluster、主从Redis、自定义集群(codis、ctgcache)等形式集群的监控。

Redis Cluster集群

使用-h-p参数传入集群中任一节点的IP和PORT,即可获取整个集群节点的监控指标信息:

$ ./redis-tool -h 172.16.18.80 -p 6380 nodes
================================================== 2022-04-28 18:44:02 ==================================================
SERVER                   STATUS ROLE    VERSION  UPTIME(s) KEYS      USEMEM   %CPU   CLIENTS OPS    RTT(us)   SLOTS 
-------------------------------------------------------------------------------------------------------------------------
172.16.18.80:6379        OK     master  6.2.6    120542    55        21.56M   0.2    1       2      87        0-5460
 |-172.16.18.81:6380     OK     slave   6.2.6    120538    55        21.56M   0.2    2       0      7702     
172.16.18.81:6379        OK     master  6.2.6    120542    56        21.66M   12.7   2       1317   179       5461-10922
 |-172.16.18.82:6380     OK     slave   6.2.6    120538    56        21.56M   0.2    2       2      424      
172.16.18.82:6379        OK     master  6.2.6    120542    45        21.56M   0.3    1       0      151       10923-16383
 |-172.16.18.80:6380     OK     slave   6.2.6    120539    45        21.57M   0.2    2       0      84       
_________________________________________________________________________________________________________________________
SUM(master/all): NODE=3/6 KEY=156/312 MEM=64.8M/129.5M CLI=4/10 OPS=1319/1321 CPU=13.2/13.8
=========================================================================================================================

主从Redis

同样使用-h-p参数传入主从Redis中任一节点的IP和PORT,即可获取主从节点的监控指标信息:

$ redis-tool -h 172.16.18.80 -p 7770
================================================== 2022-10-12 12:26:54 ==================================================
SERVER                   STATUS ROLE    VERSION  UPTIME(s) KEYS      USEMEM   %CPU   CLIENTS OPS    RTT(us)   SLOTS 
-------------------------------------------------------------------------------------------------------------------------
172.16.18.80:7770        OK     master  6.2.6    251       3         1.87M    0.3    1       1      193       single-M
 |-172.16.18.80:7772     OK     slave   6.2.6    237       3         1.85M    0.3    2       0      140       single-S
 |-172.16.18.80:7771     OK     slave   6.2.6    243       3         1.85M    0.2    2       2      119       single-S
_________________________________________________________________________________________________________________________
SUM(master/all): NODE=1/3 KEY=3/9 MEM=1.9M/5.6M CLI=1/5 OPS=1/3 CPU=0.3/0.8
=========================================================================================================================

自定义集群

使用-i参数传入自定义Redis集群的节点信息文件(适配codis等基于PROXY构建的集群模式)
文件格式(每行一个分片):<slots1> <MasterAddr> [SlaveAddr] [SlaveAddr]

# 例如:自定义Redis集群中共有4个分片,每个分片包含1主1从节点 
$ cat cluster93.conf
1...