当前位置: 首页 > news >正文

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

http://www.jsqmd.com/news/481267/

相关文章:

  • 毕设程序java车辆保养管理平台 基于SpringBoot的汽车养护服务系统 智慧车辆维保一体化平台
  • 揭秘团团圆家具价格,其客户评价和市场口碑哪个好? - 工业推荐榜
  • 导师推荐 10个一键生成论文工具:本科生毕业论文+开题报告写作全测评
  • 织带来样定制费用多少,恒信服饰的口碑咋样? - 工业品网
  • 2026年埃斯顿机器人价格盘点,生产厂哪家技术强有答案 - mypinpai
  • 毕设程序java车险理赔管理系统 基于SpringBoot的车辆保险智能定损与理赔平台 汽车保险全流程数字化管理与在线理赔系统
  • 医疗系统如何开发KindEditor的截图OCR智能识别?
  • 计算机毕业设计 java 养老院管理系统 Java+SpringBoot 智慧养老服务平台 Web 版养老院综合管理系统
  • 聊聊2026年上海人才引进落户中介哪家性价比高,靠谱之选揭秘 - 工业设备
  • 2026年广州靠谱的拉链袋定制供应商排名,泓信塑料名列前茅 - myqiye
  • 计算机毕业设计 java 养殖基地信息管理系统 Java+SpringBoot 养殖基地运营管理平台 Web 版牲畜养殖产销管理系统
  • 2026年手续简便的海运公司排名,盘点靠谱海运品牌让你轻松选 - 工业推荐榜
  • 互联网企业如何配置KindEditor的文档溯源功能?
  • 实力强的五轴高速机品牌有哪些推荐? - 工业品牌热点
  • 医疗系统实践:Vue如何通过百度WebUploader组件优化病历图片的多线程分块上传?
  • 计算机毕业设计springboot城市的地铁综合服务管理系统 基于SpringBoot的城市地铁一体化服务管理平台 城市轨道交通数字化运营与乘客服务系统
  • 2026年靠谱家具公司推荐,团团圆家具的欧式风格产品亮眼 - mypinpai
  • 导师又让重写?千笔写作工具,一键生成论文神器
  • 赶deadline必备!全场景通用AI论文神器 —— 千笔·专业论文写作工具
  • 好人事科技办上海落户好吗,能解决落户难题吗? - 工业设备
  • 跨平台方案:JS如何通过百度WebUploader组件实现多终端大文件的目录结构分片?
  • 计算机毕业设计springboot四川特色小吃管理系统 基于SpringBoot的巴蜀风味小吃数字化运营平台 基于SpringBoot的川渝美食文化传承与商业管理系统
  • 教育行业案例:jQuery如何集成百度WebUploader实现学校官网课件的自动分片续传?
  • 2026年求推荐直流调速器维修企业,天津施德科技技术硬核靠谱 - 工业品网
  • 聊聊实轴靠谱厂家,浙江屹立机器人服务费用多少钱? - 工业品牌热点
  • DEFCON CTF Write-up — de-jean-erative
  • 教育信息化如何优化KindEditor的Web端PDF编辑功能?
  • DEFCON CTF Write-up — zig-show
  • IndexCache:跨层索引复用,让稀疏注意力推理再快一倍
  • DEFCON CTF Write-up — elixir-of-life