咱们在利用 Redis 时,常常会面临的运维工作,包含 Redis 的运行状态监控,数据迁徙,主从集群、切片集群的部署和运维。接下来,我就从这三个方面,给你介绍一些工具。
咱们先来学习下监控 Redis 实时运行状态的工具,这些工具都用到了 Redis 提供的一个监控命令:INFO。
最根本的监控命令:INFO 命令
Redis 自身提供的 INFO 命令会返回丰盛的实例运行监控信息,这个命令是 Redis 监控工具的根底。
INFO 命令在应用时,能够带一个参数 section,这个参数的取值有好几种,相应的,INFO 命令也会返回不同类型的监控信息。我把 INFO 命令的返回信息分成 5 大类,其中,有的类别当中又蕴含了不同的监控内容,如下表所示:
在监控 Redis 运行状态时,INFO 命令返回的后果十分有用。如果你想理解 INFO 命令的所有参数返回后果的具体含意,能够查看 Redis 官网的介绍。
这里,我给你提几个运维时须要重点关注的参数以及它们的重要返回后果。
首先,无论你是运行单实例或是集群,我倡议你重点关注一下 stat、commandstat、cpu 和 memory 这四个参数的返回后果,这外面蕴含了命令的执行状况(比方命令的执行次数和执行工夫、命令应用的 CPU 资源),内存资源的应用状况(比方内存已使用量、内存碎片率),CPU 资源应用状况等,这能够帮忙咱们判断实例的运行状态和资源耗费状况。
另外,当你启用 RDB 或 AOF 性能时,你就须要重点关注下 persistence 参数的返回后果,你能够通过它查看到 RDB 或者 AOF 的执行状况。
如果你在应用主从集群,就要重点关注下 replication 参数的返回后果,这外面蕴含了主从同步的实时状态。
不过,INFO 命令只是提供了文本模式的监控后果,并没有可视化,所以,在理论利用中,咱们还能够应用一些第三方开源工具,将 INFO 命令的返回后果可视化。接下来,我要讲的 Prometheus,就能够通过插件将 Redis 的统计后果可视化。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.0 至 6.0 版本,适用范围比拟广。
除了获取 Redis 实例的运行状态,Redis-exporter 还能够监控键值对的大小和汇合类型数据的元素个数,这个能够在运行 Redis-exporter 时,应用 check-keys 的命令行选项来实现。
此外,咱们能够开发一个 Lua 脚本,定制化采集所需监控的数据。而后,咱们应用 scripts 命令行选项,让 Redis-exporter 运行这个特定的脚本,从而能够满足业务层的多样化监控需要。
最初,我还想再给你分享两个小工具:redis-stat 和 Redis Live。跟 Redis-exporter 相比,这两个都是轻量级的监控工具。它们别离是用 Ruby 和 Python 开发的,也是将 INFO 命令提供的实例运行状态信息可视化展现。
尽管这两个工具目前曾经很少更新了,不过,如果你想自行开发 Redis 监控工具,它们都是不错的参考。
除了监控 Redis 的运行状态,还有一个常见的运维工作就是数据迁徙。接下来,咱们再来学习下数据迁徙的工具。
数据迁徙工具 Redis-shake
有时候,咱们须要在不同的实例间迁徙数据。目前,比拟罕用的一个数据迁徙工具是 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 负责把这些增量命令再同步给目标实例。
上面这张图展现了 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 是一个不错的工具。
更多对于 Redis 技术栈的学习,能够查阅民工哥技术之路的 Redis 技术系列专栏文章:Redis 技术学习笔记总结 ( 点我中转)
起源:time.geekbang.org/column/article/305195