Redis运维技巧大全

发表时间: 2022-12-23 15:40

info命令

最基本的监控运维手段。

Prometheus

接入Prometheus监控,

Prometheus 提供了插件功能来实现对一个系统的监控,我们把插件称为 exporter, 每一个 exporter 实际是一个采集监控数据的组件。

Redis-exporter就是用来监控 Redis 的

慢查询日志

慢查询日志的两个参数:

  • slowlog-log-slower-than:这个参数表示,慢查询日志对执行时间大于多少微秒的命 令进行记录。
  • slowlog-max-len:这个参数表示,慢查询日志最多能记录多少条命令记录。默认是 128。建议设置为 1000 左右

命令:


SLOWLOG GET 1

除了慢查询日志以外,Redis 从 2.8.13 版本开始,还提供了 latency monitor 监控工具, 这个工具可以用来监控 Redis 运行过程中的峰值延迟情况


config set latency-monitor-threshold 1000latency latest

查询bigkey

在执行 redis-cli 命令时带上–bigkeys 选项,进而对整个数据库中的键值对大小 情况进行统计分析。比如说,统计每种数据类型的键值对个数以及平均大小。

这个 命令执行后,会输出每种数据类型中最大的 bigkey 的信息


./redis-cli --bigkeys

不过,在使用–bigkeys 选项时,有一个地方需要注意一下。这个工具是通过扫描数据库来 查找 bigkey 的,所以,在执行的过程中,会对 Redis 实例的性能产生影响

如果你在使 用主从集群,我建议你在从节点上执行该命令。因为主节点上执行时,会阻塞主节点。

你两个小建议:

第一个建议是,在 Redis 实例业务压力的低峰 阶段进行扫描查询,以免影响到实例的正常运行;

第二个建议是,可以使用 -i 参数控制扫 描间隔,避免长时间扫描降低 Redis 实例的性能。


./redis-cli --bigkeys -i 0.1

对于集合类型来说,这个方法只统计集合元素个数的多少,而不是实际占用的内存量。 但是,一个集合中的元素个数多,并不一定占用的内存就多。

使用 MEMORY USAGE 命令(需要 Redis 4.0 及以上版本),查询一个键值对占用的内存空间


MEMORY USAGE user:info

查询主从复制

Redis 的 INFO replication 命令

master_repl_offset:主库接收写命令的进度信息

slave_repl_offset:从库复制写命令的进度信息

slot操作

查看slot


cluster slots

迁移slot


CLUSTER SETSLOT:使用不同的选项进行三种设置,分别是设置 Slot 要迁入的目标实例,Slot 要迁出的源实例,以及 Slot 所属的实例。CLUSTER GETKEYSINSLOT:获取某个 Slot 中一定数量的 key。MIGRATE:把一个 key 从源实例实际迁移到目标实例。

假设我们要把 Slot 300 从源实例(ID 为 3)迁移到目标实例(ID 为 5),那要怎么做 呢? 实际上,我们可以分成 5 步。

第 1 步,我们先在目标实例 5 上执行下面的命令,将 Slot 300 的源实例设置为实例 3,表 示要从实例 3 上迁入 Slot 300。


CLUSTER SETSLOT 300 IMPORTING 3

第 2 步,在源实例 3 上,我们把 Slot 300 的目标实例设置为 5,这表示,Slot 300 要迁 出到实例 5 上,如下所示:


CLUSTER SETSLOT 300 MIGRATING 5

第 3 步,从 Slot 300 中获取 100 个 key。因为 Slot 中的 key 数量可能很多,所以我们需 要在客户端上多次执行下面的这条命令,分批次获得并迁移 key。


CLUSTER GETKEYSINSLOT 300 100

第 4 步,我们把刚才获取的 100 个 key 中的 key1 迁移到目标实例 5 上(IP 为 192.168.10.5),同时把要迁入的数据库设置为 0 号数据库,把迁移的超时时间设置为timeout。我们重复执行 MIGRATE 命令,把 100 个 key 都迁移完。


MIGRATE 192.168.10.5 6379 key1 0 timeout

第5步,我们重复执行第 3 和第 4 步,直到 Slot 中的所有 key 都迁移完成。

从 Redis 3.0.6 开始,你也可以使用 KEYS 选项,一次迁移多个 key(key1、2、3),这 样可以提升迁移效率。


MIGRATE 192.168.10.5 6379 "" 0 timeout KEYS key1 key2 key3

命令重命名

高风险的命令,例如 KEYS、FLUSHDB、FLUSHALL 等

禁用命令,修改服务器的配置文件redis.conf,在SECURITY这一项中,我们新增以下命令:


rename-command FLUSHALL ""rename-command FLUSHDB  ""rename-command CONFIG   ""rename-command KEYS     ""

如果还想保留命令,只是想改名


rename-command FLUSHALL joYAPNXRPmcarcR4ZDgC81TbdkSmLAzRPmcarcRrename-command FLUSHDB  qf69aZbLAX3cf3ednHM3SOlbpH71yEXLAX3cf3erename-command CONFIG   FRaqbC8wSA1XvpFVjCRGryWtIIZS2TRvpFVjCRGrename-command KEYS     eIiGXix4A2DreBBsQwY6YHkidcDjoYA2DreBBsQ

说明:对于FLUSHALL命令,需要设置配置文件中appendonly no,否则服务器无法启动哦~

数据迁移工具 Redis-shake

是阿里云 Redis 和 MongoDB 团队开发的一个用于 Redis 数据同步的 工具。

Redis-shake 的基本运行原理,是先启动 Redis-shake 进程,这个进程模拟了一个 Redis 实例。然后,Redis-shake 进程和数据迁出的源实例进行数据的全量同步。 这个过程和 Redis 主从实例的全量同步是类似的

源实例相当于主库,Redis-shake 相当于从库,源实例先把 RDB 文件传输给 Redis-shake,Redis-shake 会把 RDB 文件发送给目的实例。接着,源实例会再把增量命令发送 给 Redis-shake,Redis-shake 负责把这些增量命令再同步给目的实例。

集群管理工具 CacheCloud

sohu开源的Redis 运维管理的云平台