news 2026/8/17 4:09:04

Redis 集群从裸奔到全副武装:搭建、可视化、监控、告警、看板一条龙

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Redis 集群从裸奔到全副武装:搭建、可视化、监控、告警、看板一条龙

你的 Redis 集群还在"裸奔"吗?跑着跑着挂了不知道,内存爆了没人管,慢查询堆成山还蒙在鼓里。网上教程要么只讲搭建,要么只讲监控,想找一篇从头到尾串起来的——没有。所以我写了这篇,从搭建集群 → 可视化管理 → 指标监控 → 告警规则 → Grafana 看板,一条龙给你安排明白。

文章目录

    • 一、整体架构
    • 二、搭建 Redis 集群
      • 2.1 部署方案
      • 2.2 启动 6 个节点
      • 2.3 初始化集群
      • 2.4 验证集群状态
    • 三、可视化:RedisInsight
      • 3.1 为什么选 RedisInsight
      • 3.2 部署
      • 3.3 连接 Redis 集群
    • 四、监控:Prometheus + Redis Exporter
      • 4.1 Exporter 选型
      • 4.2 部署 Exporter
      • 4.3 Prometheus 配置
    • 五、告警:Prometheus Rules
    • 六、看板:Grafana Dashboard
      • 6.1 导入看板
      • 6.2 效果展示
    • 七、总结

一、整体架构

先看全貌,心里有数:

Redis Cluster(3主3从) ↓ 数据管理 RedisInsight(Web 可视化) ↓ 指标采集 Redis Exporter × 6(每个节点一个) ↓ 指标存储 Prometheus(采集 + 告警规则) ↓ 数据展示 Grafana(看板 + 告警通知)
组件作用一句话总结
Redis Cluster缓存服务干活的
RedisInsight数据可视化看数据的
Redis Exporter指标采集体检的
Prometheus指标存储 + 告警盯梢的
Grafana看板展示看报告的

二、搭建 Redis 集群

2.1 部署方案

基于 Docker 部署3 主 3 从,共 6 个节点,Redis 版本7.4.2

环境建议
生产环境至少 3 台机器,主从分布在不同机器上,使用--network=host
测试环境1 台机器即可,端口映射方式

本文没有用 docker-compose,原因很实际:生产环境多台机器部署时,直接粘贴 docker 命令比 compose 更灵活。

2.2 启动 6 个节点

6 个节点的命令结构完全一样,只有名称、端口、IP三处不同。这里给出完整的第一个节点命令,后面用表格列出差异:

节点 1(完整命令)

dockerrun-d\--name=redis1\--volume/data/redis-cluster/redis1:/data\--workdir=/data\--restart=always\-eTIME_ZONE='Asia/Shanghai'\-p6379:6379\-p16379:16379\redis:7.4.2\redis-server\--port6379\--bind0.0.0.0\--cluster-announce-ip10.0.1.1\--cluster-announce-port6379\--cluster-announce-bus-port16379\--protected-mode no\--cluster-enabledyes\--cluster-config-file nodes-6379.conf\--cluster-node-timeout5000\--appendonlyyes\--appendfsynceverysec\--save''\--maxmemory6g\--maxmemory-policy allkeys-lru\--slowlog-log-slower-than1000\--slowlog-max-len512\--requirepass'YourStr0ngP@ssw0rd'\--masterauth'YourStr0ngP@ssw0rd'

生产环境建议加上--network=host,去掉-p端口映射。

不需要提前创建nodes-6379.conf,执行命令后,/data/redis-cluster/redis1下会自动创建该文件

其余 5 个节点的差异

节点–name–port-p(服务端口)-p(总线端口)–cluster-announce-ip–cluster-config-file数据目录
redis2redis263806380:638016380:1638010.0.1.2nodes-6380.confredis2
redis3redis363816381:638116381:1638110.0.1.3nodes-6381.confredis3
redis4redis463826382:638216382:1638210.0.1.1nodes-6382.confredis4
redis5redis563836383:638316383:1638310.0.1.2nodes-6383.confredis5
redis6redis663846384:638416384:1638410.0.1.3nodes-6384.confredis6

照着节点 1 的命令,把表格里的差异项替换一下就行。复制粘贴改三处,程序员最擅长的事。

关键参数说明

参数说明
--cluster-announce-ip实际 IP集群节点间通信地址,不能用 127.0.0.1
--cluster-announce-bus-port服务端口+10000集群总线端口,节点间 gossip 通信用
--appendonly yes开启 AOF 持久化
--appendfsync everysec每秒刷盘,兼顾性能和数据安全
--save ''关闭 RDB 快照(已有 AOF)
--maxmemory-policy allkeys-lru内存满时淘汰最近最少使用的 Key
--slowlog-log-slower-than 1000微秒超过 1ms 的命令记入慢查询日志
--requirepass/--masterauth同一密码客户端认证 + 主从复制认证

2.3 初始化集群

6 个节点都启动后,进入任意一个容器初始化集群:

# 进入容器dockerexec-itredis1bash# 初始化集群:3 主 3 从(--cluster-replicas 1 表示每个主节点分配 1 个从节点)redis-cli-a'YourStr0ngP@ssw0rd'\--clustercreate\10.0.1.1:6379\10.0.1.2:6380\10.0.1.3:6381\10.0.1.1:6382\10.0.1.2:6383\10.0.1.3:6384\--cluster-replicas1

2.4 验证集群状态

# 查看集群信息redis-cli-a'YourStr0ngP@ssw0rd'cluster info# 期望输出:# cluster_state:ok# cluster_slots_assigned:16384# cluster_known_nodes:6# 查看节点角色分布redis-cli-a'YourStr0ngP@ssw0rd'cluster nodes

确认cluster_state:ok且 16384 个 slot 全部分配完毕,集群就绑好了。


三、可视化:RedisInsight

集群跑起来了,但redis-cli敲命令看数据,效率约等于用记事本写代码。上个可视化工具吧。

3.1 为什么选 RedisInsight

工具优势劣势
RedisInsightRedis 官方出品,支持集群、支持 Web 访问功能较重
Another Redis Desktop Manager轻量,开源桌面客户端,不适合团队共享
redis-cli轻量到极致只适合临时操作

推荐Web 版 RedisInsight:一次部署,团队所有人浏览器直接访问,不用每人装客户端。

3.2 部署

dockerrun-d\--name=redisinsight\--volume/data/redisinsight:/data\--restart=always\-p5540:5540\--user=node\--env=TZ=Asia/Shanghai\--env=LANG=zh_CN.UTF-8\--workdir=/usr/src/app\redislabs/redisinsight:latest

3.3 连接 Redis 集群

访问http://<你的IP>:5540,进入主界面:

点击Add Redis Database,填写集群任意一个节点的地址和密码:

连接成功后,点击进入,就能直观地浏览 Key、执行命令、查看慢查询:

到这一步,你已经能看数据了。但"看得见"不等于"盯得住"——Redis 半夜挂了,RedisInsight 可不会打电话叫你。接下来上监控。


四、监控:Prometheus + Redis Exporter

4.1 Exporter 选型

ExporterStars特点
oliver006/redis_exporter3k+社区主流,支持集群、支持密码认证、Grafana 模板丰富
redis-stat较少自带 Web UI,但指标不够全

oliver006/redis_exporter是事实标准,Grafana 官方模板都基于它,没什么好纠结的。

4.2 部署 Exporter

每个 Redis 节点部署一个 Exporter,同样给出第一个的完整命令 + 差异表格:

节点 1 的 Exporter

dockerrun-d\--name=redis1-exporter\-p9121:9121\--restart=always\oliver006/redis_exporter:latest\--redis.addr=redis://10.0.1.1:6379\--redis.password='YourStr0ngP@ssw0rd'\--is-cluster\--web.listen-address=:9121

其余 5 个 Exporter 的差异

Exporter–name-p–redis.addr
节点2redis2-exporter9122:9121redis://10.0.1.2:6380
节点3redis3-exporter9123:9121redis://10.0.1.3:6381
节点4redis4-exporter9124:9121redis://10.0.1.1:6382
节点5redis5-exporter9125:9121redis://10.0.1.2:6383
节点6redis6-exporter9126:9121redis://10.0.1.3:6384

验证 Exporter 是否正常:访问http://<IP>:9121/metrics,能看到一堆redis_开头的指标就对了。

4.3 Prometheus 配置

prometheus.ymlscrape_configs中添加:

scrape_configs:-job_name:"redis-cluster"metrics_path:"/metrics"static_configs:-targets:-"10.0.1.1:9121"-"10.0.1.2:9122"-"10.0.1.3:9123"-"10.0.1.1:9124"-"10.0.1.2:9125"-"10.0.1.3:9126"

6 个节点放在同一个job_name下即可,Prometheus 会通过instance标签自动区分。不需要写 6 个 job。

重新加载 Prometheus 配置:

# 方式一:热加载(需要启动时加 --web.enable-lifecycle 参数)curl-XPOST http://localhost:9090/-/reload# 方式二:重启容器dockerrestart prometheus

在 Prometheus 页面搜索redis,能看到一堆指标就说明采集成功:


五、告警:Prometheus Rules

指标采到了,但你不可能 24 小时盯着 Prometheus 看曲线。该让机器替你盯着了。

在 Prometheus 的rules目录下新建redis-rules.yml

groups:-name:redis-rulesrules:# Redis 宕机-alert:redis downexpr:redis_up == 0for:1mlabels:severity:criticalannotations:summary:"redis down (instance {{ $labels.instance }})"description:"redis instance is down."# 内存使用率 > 90%-alert:redis memory usage highexpr:redis_memory_used_bytes / redis_config_maxmemory>0.9for:5mlabels:severity:criticalannotations:summary:"redis memory usage high (instance {{ $labels.instance }})"description:"redis memory usage is {{ humanizePercentage $value }}, higher than 90% of maxmemory."# 内存碎片率过高-alert:redis memory fragmentation highexpr:redis_memory_used_bytes>0 and redis_mem_fragmentation_ratio>1.5for:10mlabels:severity:warningannotations:summary:"redis memory fragmentation high (instance {{ $labels.instance }})"description:"redis memory fragmentation ratio is {{ $value }}, higher than 1.5."# 连接数过高-alert:redis connection highexpr:redis_connected_clients>2000for:5mlabels:severity:warningannotations:summary:"redis connection high (instance {{ $labels.instance }})"description:"redis connected clients is {{ $value }}, higher than 2000."# 拒绝连接-alert:redis rejected connectionsexpr:increase(redis_rejected_connections_total[5m])>0for:1mlabels:severity:criticalannotations:summary:"redis rejected connections (instance {{ $labels.instance }})"description:"redis rejected {{ $value }} connections in the last 5 minutes."# 命令执行速率过高-alert:redis command execution rate highexpr:rate(redis_commands_processed_total[1m])>5000for:1mlabels:severity:warningannotations:summary:"redis command execution rate high (instance {{ $labels.instance }})"description:"redis command execution rate is {{ humanize $value }}/s, higher than 5000/s."# Key 驱逐(触发 maxmemory 淘汰策略)-alert:redis keys evictedexpr:increase(redis_evicted_keys_total[5m])>0for:1mlabels:severity:warningannotations:summary:"redis keys evicted (instance {{ $labels.instance }})"description:"redis evicted {{ $value }} keys in the last 5 minutes, maxmemory policy triggered."# 主从断开-alert:redis master link downexpr:redis_connected_slaves < 1 and redis_instance_info{role="master"}== 1for:2mlabels:severity:criticalannotations:summary:"redis master has no slaves (instance {{ $labels.instance }})"description:"redis master has {{ $value }} connected slaves, replication may be broken."# 慢查询增长-alert:redis slowlog growingexpr:increase(redis_slowlog_length[5m])>10for:1mlabels:severity:warningannotations:summary:"redis slowlog growing (instance {{ $labels.instance }})"description:"redis slowlog increased by {{ $value }} in the last 5 minutes."

告警规则一览:

规则触发条件级别说明
宕机redis_up == 0critical实例不可达
内存使用率高> 90% maxmemorycritical即将触发淘汰或 OOM
内存碎片率高> 1.5warning内存浪费,考虑重启或MEMORY PURGE
连接数高> 2000warning可能存在连接泄漏
拒绝连接5 分钟内有拒绝critical已达 maxclients 上限
命令速率高> 5000/swarning负载过高,排查热 Key
Key 驱逐5 分钟内有驱逐warningmaxmemory 策略已触发
主从断开master 无 slavecritical复制链路断裂
慢查询增长5 分钟增长 > 10warning排查大 Key 或复杂命令

进入 Prometheus Alerts


六、看板:Grafana Dashboard

最后一步,把枯燥的指标变成赏心悦目的图表。

6.1 导入看板

Grafana 官方模板市场有大量现成的 Redis 看板,推荐这两个:

看板模板 ID适用场景
Redis Dashboard for Prometheus763单节点详情(内存、命令、连接、Key 统计)
Redis Cluster Dashboard21914集群全局视角(节点分布、slot、主从状态)

导入步骤:Grafana → 仪表板 → 新建 → 导入 → 输入模板 ID → 加载 → 选择 Prometheus 数据源 → 导入

6.2 效果展示

Redis 单节点看板(ID: 763):

Redis 集群看板(ID: 21914):


七、总结

从裸奔到全副武装,完整链路回顾:

① 搭建集群(3主3从) ↓ ② 装上 RedisInsight(看数据) ↓ ③ 部署 Exporter(采指标) ↓ ④ 配置 Prometheus(存指标 + 告警规则) ↓ ⑤ 导入 Grafana 看板(看报表)
阶段完成后你获得的能力
集群搭建Redis 高可用,自动故障转移
RedisInsight浏览器看数据、执行命令、查慢查询
Exporter + Prometheus指标采集、历史趋势、告警触发
Grafana 看板一眼看穿集群健康状态

Redis 集群搭完不加监控,就像买了辆车不装仪表盘——跑是能跑,但油没了、水温高了、胎压低了,你一个都不知道。花半小时把监控配齐,能省你无数个凌晨 🍻

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 16:11:46

互联网企业如何配置KindEditor的文档溯源功能?

震惊&#xff01;PHP程序员遭遇"680元预算做Office全家桶"的奇幻漂流 大家好&#xff0c;我是北京某PHP码农老张&#xff08;头发比工资少的那种&#xff09;。最近接了个CMS项目&#xff0c;客户要求把Word、Excel、PPT、PDF甚至微信公众号内容统统塞进编辑器&…

作者头像 李华
网站建设 2026/7/14 16:11:36

微信小程序的基于Android的共享付费自习室座位选座系统APP

目录 需求分析与功能规划技术架构设计数据库设计核心功能实现逻辑支付系统集成实时同步与冲突处理测试与优化上线与运营注意事项 项目技术支持可定制开发之功能创新亮点源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 需求分析与功能规划 …

作者头像 李华
网站建设 2026/7/14 16:11:38

汽车与机器人领域的“全脑”计算平台引领者

黑芝麻智能是一家国内领先的车规级计算SoC及基于SoC的智能汽车和机器人解决方案供应商。公司是目前国内为数不多可以实现大规模车规高算力芯片量产的企业,并随着人形机器人行业的蓬勃发展,积极布局卡位机器人大小脑芯片。 目前公司计算SoC产品包括用于自动驾驶的“华山”系列…

作者头像 李华
网站建设 2026/7/14 16:11:49

vlm 当前图纸是否符合标注要求,如果不符合,请给出修改步骤;

根据您提供的图纸内容和标注要求&#xff0c;我们来逐条分析当前图纸是否符合规范&#xff0c;并提出修改建议。✅ 一、标注要求逐项检查与修改建议1. 直径用转折线&#xff08;直径符号 应使用“转折线”标注&#xff09;现状&#xff1a;图中直径标注如 10 -0.05 和 10 -0.0…

作者头像 李华
网站建设 2026/7/14 16:11:48

救命神器!多场景适配AI论文写作软件,千笔写作工具 VS 知文AI

随着人工智能技术的迅猛迭代与普及&#xff0c;AI辅助写作工具已逐步渗透到高校学术写作场景中&#xff0c;成为专科生、本科生、研究生完成毕业论文不可或缺的辅助手段。越来越多面临毕业论文压力的学生&#xff0c;开始依赖各类AI工具简化写作流程、提升创作效率。但与此同时…

作者头像 李华