百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

Redis合集-必备的几款运维工具

mhr18 2025-05-14 14:59 4 浏览 0 评论

Redis

在应用 Redis 时,经常会面临的运维工作,包括 Redis 的运行状态监控数据迁移主从集群切片集群的部署和运维。

接下来,从这三个方面,介绍一些工具。先来学习下监控 Redis 实时运行状态的工具,这些工具都用到了 Redis 提供的一个监控命令:INFO

最基本的监控命令:INFO 命令

Redis 本身提供的 INFO 命令会返回丰富的实例运行监控信息,这个命令是 Redis 监控工具的基础。

INFO 命令在使用时,可以带一个参数 section,这个参数的取值有好几种,相应的,INFO 命令也会返回不同类型的监控信息。把 INFO 命令的返回信息分成 5 大类,其中,有的类别当中又包含了不同的监控内容,如下表所示:

编辑

在监控 Redis 运行状态时,INFO 命令返回的结果非常有用。如果想了解 INFO 命令的所有参数返回结果的详细含义,可以查看 Redis官网的介绍。

这里说几个运维时需要重点关注的参数以及它们的重要返回结果。

首先,无论是运行单实例或是集群,建议重点关注一下 statcommandstatcpumemory 这四个参数的返回结果,这里面包含了命令的执行情况(比如命令的执行次数和执行时间、命令使用的 CPU 资源),内存资源的使用情况(比如内存已使用量、内存碎片率),CPU 资源使用情况等,这可以判断实例的运行状态和资源消耗情况。

另外,当启用 RDBAOF 功能时,就需要重点关注下 persistence 参数的返回结果,可以通过它查看到 RDB 或者 AOF 的执行情况。

如果在使用主从集群,就要重点关注下 replication 参数的返回结果,这里面包含了主从同步的实时状态。

不过,INFO 命令只是提供了文本形式的监控结果,并没有可视化,所以,在实际应用中,还可以使用一些第三方开源工具,将 INFO 命令的返回结果可视化。接下来的 Prometheus,就可以通过插件将 Redis 的统计结果可视化。

面向 Prometheus 的 Redis-exporter 监控

Prometheus是一套开源的系统监控报警框架。它的核心功能是从被监控系统中拉取监控数据,结合Grafana工具,进行可视化展示。

而且,监控数据可以保存到时序数据库中,以便运维人员进行历史查询。同时,Prometheus 会检测系统的监控指标是否超过了预设的阈值,一旦超过阈值,Prometheus 就会触发报警。

对于系统的日常运维管理来说,这些功能是非常重要的。而 Prometheus 已经实现了使用这些功能的工具框架。只要能从被监控系统中获取到监控数据,就可以用 Prometheus 来实现运维监控。

Prometheus 正好提供了插件功能来实现对一个系统的监控,把插件称为 exporter,每一个 exporter 实际是一个采集监控数据的组件。exporter 采集的数据格式符合 Prometheus 的要求,Prometheus 获取这些数据后,就可以进行展示和保存了。

Redis-exporter就是用来监控 Redis 的,它将INFO命令监控到的运行状态和各种统计信息提供给 Prometheus,从而进行可视化展示和报警设置。目前,Redis-exporter可以支持Redis 2.06.0版本,适用范围比较广。

除了获取 Redis 实例的运行状态,Redis-exporter还可以监控键值对的大小和集合类型数据的元素个数,这个可以在运行 Redis-exporter 时,使用 check-keys 的命令行选项来实现。

此外,可以开发一个 Lua 脚本,定制化采集所需监控的数据。然后,使用 scripts 命令行选项,让 Redis-exporter 运行这个特定的脚本,从而可以满足业务层的多样化监控需求。

最后,还有两个小工具:redis-statRedis Live。跟 Redis-exporter 相比,这两个都是轻量级的监控工具。它们分别是用 RubyPython 开发的,也是将 INFO 命令提供的实例运行状态信息可视化展示。

虽然这两个工具目前已经很少更新了,不过,如果想自行开发 Redis 监控工具,它们都是不错的参考。

除了监控 Redis 的运行状态,还有一个常见的运维任务就是数据迁移。接下来,再来学习下数据迁移的工具。

数据迁移工具Redis-shake

有时候,需要在不同的实例间迁移数据。目前,比较常用的一个数据迁移工具是Redis-shake,这是阿里云 Redis 和 MongoDB 团队开发的一个用于 Redis 数据同步的工具。

Redis-shake的基本运行原理,是先启动Redis-shake进程,这个进程模拟了一个 Redis 实例。

然后,Redis-shake进程和数据迁出的源实例进行数据的全量同步。

这个过程和 Redis 主从实例的全量同步是类似的。

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

下面这张图展示了Redis-shake进行数据迁移的过程:

编辑

Redis-shake的一大优势,就是支持多种类型的迁移。

首先,它既支持单个实例间的数据迁移,也支持集群到集群间的数据迁移。

其次,有的 Redis 切片集群(例如 Codis)会使用 proxy 接收请求操作,Redis-shake也同样支持和 proxy 进行数据迁移。

另外,因为 Redis-shake 是阿里云团队开发的,所以,除了支持开源的 Redis 版本以外,Redis-shake 还支持云下的 Redis 实例和云上的 Redis 实例进行迁移,可以实现 Redis 服务上云的目标。

在数据迁移后,通常需要对比源实例和目的实例中的数据是否一致。如果有不一致的数据,需要把它们找出来,从目的实例中剔除,或者是再次迁移这些不一致的数据。

这里,再介绍一个数据一致性比对的工具了,就是阿里云团队开发的Redis-full-check

Redis-full-check的工作原理很简单,就是对源实例和目的实例中的数据进行全量比对,从而完成数据校验。不过,为了降低数据校验的比对开销,Redis-full-check采用了多轮比较的方法。

在第一轮校验时,Redis-full-check会找出在源实例上的所有 key,然后从源实例和目的实例中把相应的值也都查找出来,进行比对。第一次比对后,Redis-full-check会把目的实例中和源实例不一致的数据,记录到 sqlite 数据库中。

从第二轮校验开始,Redis-full-check只比较上一轮结束后记录在数据库中的不一致的数据。

为了避免对实例的正常请求处理造成影响,Redis-full-check 在每一轮比对结束后,会暂停一段时间。随着 Redis-shake 增量同步的进行,源实例和目的实例中的不一致数据也会逐步减少,所以,校验比对的轮数不用很多。

可以自己设置比对的轮数。具体的方法是,在运行 Redis-full-check 命令时,把参数 comparetimes 的值设置为想要比对的轮数。

等到所有轮数都比对完成后,数据库中记录的数据就是源实例和目的实例最终的差异结果了。

这里有个地方需要注意下,Redis-full-check 提供了三种比对模式,可以通过 comparemode 参数进行设置。comparemode 参数有三种取值,含义如下:

  • KeyOutline,只对比 key 值是否相等;
  • ValueOutline,只对比 value 值的长度是否相等;
  • FullValue,对比 key 值、value 长度、value 值是否相等。

在应用 Redis-full-check 时,可以根据业务对数据一致性程度的要求,选择相应的比对模式。如果一致性要求高,就把 comparemode 参数设置为 FullValue

再介绍一个用于 Redis 集群运维管理的工具 CacheCloud

集群管理工具CacheCloud

CacheCloud是搜狐开发的一个面向 Redis 运维管理的云平台,它实现了主从集群、哨兵集群和 Redis Cluster 的自动部署和管理,用户可以直接在平台的管理界面上进行操作。

针对常见的集群运维需求,CacheCloud提供了 5 个运维操作。

  • 下线实例:关闭实例以及实例相关的监控任务。
  • 上线实例:重新启动已下线的实例,并进行监控。
  • 添加从节点:在主从集群中给主节点添加一个从节点。
  • 故障切换:手动完成 Redis Cluster 主从节点的故障转移。
  • 配置管理:用户提交配置修改的工单后,管理员进行审核,并完成配置修改。

当然,作为运维管理平台,CacheCloud除了提供运维操作以外,还提供了丰富的监控信息。

CacheCloud不仅会收集 INFO 命令提供的实例实时运行状态信息,进行可视化展示,而且还会把实例运行状态信息保存下来,例如内存使用情况、客户端连接数、键值对数据量。这样一来,当 Redis 运行发生问题时,运维人员可以查询保存的历史记录,并结合当时的运行状态信息进行分析。

如果希望有一个统一平台,把 Redis 实例管理相关的任务集中托管起来,CacheCloud 是一个不错的工具。

相关推荐

B站收藏视频失效?mybili 收藏夹备份神器完整部署指南

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:羊刀仙很多B站用户都有过类似经历:自己精心收藏的视频突然“消失”,点开一看不是“已被删除”,就是“因UP主设置不可见”。而B站并不会主动通知...

中间件推荐初始化配置

Redis推荐初始化配置bind0.0.0.0protected-modeyesport6379tcp-backlog511timeout300tcp-keepalive300...

Redis中缓存穿透问题与解决方法

缓存穿透问题概述在Redis作为缓存使用时,缓存穿透是常见问题。正常查询流程是先从Redis缓存获取数据,若有则直接使用;若没有则去数据库查询,查到后存入缓存。但当请求的数据在缓存和数据库中都...

后端开发必看!Redis 哨兵机制如何保障系统高可用?

你是否曾在项目中遇到过Redis主服务器突然宕机,导致整个业务系统出现数据读取异常、响应延迟甚至服务中断的情况?面对这样的突发状况,作为互联网大厂的后端开发人员,如何快速恢复服务、保障系统的高可用...

Redis合集-大Key处理建议

以下是Redis大Key问题的全流程解决方案,涵盖检测、处理、优化及预防策略,结合代码示例和最佳实践:一、大Key的定义与风险1.大Key判定标准数据类型大Key阈值风险场景S...

深入解析跳跃表:Redis里的"老六"数据结构,专治各种不服

大家好,我是你们的码农段子手,今天要给大家讲一个Redis世界里最会"跳科目三"的数据结构——跳跃表(SkipList)。这货表面上是个青铜,实际上是个王者,连红黑树见了都要喊声大哥。...

Redis 中 AOF 持久化技术原理全解析,看完你就懂了!

你在使用Redis的过程中,有没有担心过数据丢失的问题?尤其是在服务器突然宕机、意外断电等情况发生时,那些还没来得及持久化的数据,是不是让你夜不能寐?别担心,Redis的AOF持久化技术就是...

Redis合集-必备的几款运维工具

Redis在应用Redis时,经常会面临的运维工作,包括Redis的运行状态监控,数据迁移,主从集群、切片集群的部署和运维。接下来,从这三个方面,介绍一些工具。先来学习下监控Redis实时...

别再纠结线程池大小 + 线程数量了,没有固定公式的!

我们在百度上能很轻易地搜索到以下线程池设置大小的理论:在一台服务器上我们按照以下设置CPU密集型的程序-核心数+1I/O密集型的程序-核心数*2你不会真的按照这个理论来设置线程池的...

网络编程—IO多路复用详解

假如你想了解IO多路复用,那本文或许可以帮助你本文的最大目的就是想要把select、epoll在执行过程中干了什么叙述出来,所以具体的代码不会涉及,毕竟不同语言的接口有所区别。基础知识IO多路复用涉及...

5分钟学会C/C++多线程编程进程和线程

前言对线程有基本的理解简单的C++面向过程编程能力创造单个简单的线程。创造单个带参数的线程。如何等待线程结束。创造多个线程,并使用互斥量来防止资源抢占。会使用之后,直接跳到“汇总”,复制模板来用就行...

尽情阅读,技术进阶,详解mmap的原理

1.一句话概括mmapmmap的作用,在应用这一层,是让你把文件的某一段,当作内存一样来访问。将文件映射到物理内存,将进程虚拟空间映射到那块内存。这样,进程不仅能像访问内存一样读写文件,多个进程...

C++11多线程知识点总结

一、多线程的基本概念1、进程与线程的区别和联系进程:进程是一个动态的过程,是一个活动的实体。简单来说,一个应用程序的运行就可以被看做是一个进程;线程:是运行中的实际的任务执行者。可以说,进程中包含了多...

微服务高可用的2个关键技巧,你一定用得上

概述上一篇文章讲了一个朋友公司使用SpringCloud架构遇到问题的一个真实案例,虽然不是什么大的技术问题,但如果对一些东西理解的不深刻,还真会犯一些错误。这篇文章我们来聊聊在微服务架构中,到底如...

Java线程间如何共享与传递数据

1、背景在日常SpringBoot应用或者Java应用开发中,使用多线程编程有很多好处,比如可以同时处理多个任务,提高程序的并发性;可以充分利用计算机的多核处理器,使得程序能够更好地利用计算机的资源,...

取消回复欢迎 发表评论: