集群监控分三层
集群监控要同时看三层:集群整体状态、逐节点的资源与复制指标、以及重定向与总线消息这类集群特有信号。只盯一层容易漏判,例如集群状态显示正常,但某个分片的主从都打满内存,业务照样会报错。
基本信息
| 整体状态 | CLUSTER INFO 的 cluster_state 与槽统计 |
|---|---|
| 逐节点 | CLUSTER NODES、INFO 的 memory 与 replication 段 |
| 集群特有 | 总线消息统计、节点间链路缓冲计数 |
| 客户端侧 | 重定向次数与连接池重连次数需自行采集 |
监控清单
- 集群状态:cluster_state 是否为 ok
- 槽覆盖:已分配槽是否为 16384,失败槽数是否为 0
- 节点健康:flags 里有没有失败、握手中、断连标记
- 复制健康:主从偏移差与确认延迟
- 资源水位:单节点内存与上限的比值、CPU、网络吞吐
- 集群特有:总线消息量、节点间链路缓冲溢出计数
- 客户端:重定向频率、连接池重连次数
采集示例
采集示例
redis-cli -p 7000 CLUSTER INFO # 集群整体状态
redis-cli -p 7000 CLUSTER NODES | grep -E 'fail|handshake' # 异常节点
redis-cli -p 7000 INFO replication | grep -E 'master_link_status|lag' # 复制健康
redis-cli -p 7000 INFO memory | grep -E 'used_memory:|maxmemory:' # 内存水位
redis-cli -p 7000 INFO stats | grep -E 'sync_full|sync_partial' # 全量同步次数
redis-cli -p 7000 CLUSTER INFO | grep -E 'messages|buffer' # 总线与链路缓冲指标读法
| 指标 | 含义 | 异常信号 |
|---|---|---|
| cluster_state | 集群可用状态 | 变为失败通常意味着有槽没有归属 |
| cluster_slots_assigned | 已分配槽数量 | 小于 16384 说明有槽没人负责 |
| cluster_slots_fail | 处于失败状态的槽数量 | 大于 0 表示这些槽不可服务 |
| cluster_known_nodes / cluster_size | 已知节点数与主节点数 | 与拓扑记录不符说明有节点丢失 |
| cluster_stats_messages_* | 节点间总线消息统计 | 突增可能与网络抖动或消息风暴有关 |
| sync_full | 触发全量同步的次数 | 持续增长说明部分同步失败,多为积压缓冲不足 |
| 内存与上限比值 | 单节点内存水位 | 接近上限会触发淘汰甚至写入失败 |
重定向次数不在服务端的 INFO 里,需要由客户端库或代理层统计。重定向频率突增往往早于业务报错,是很有效的先兆指标。
采集目标要覆盖每个主从节点,而不是随手上报一台。集群是按分片出故障的,只监控一个节点会漏掉整分片的异常。
集群总线还有一类隐形风险:某个节点处理慢,会让其他节点发往它的链路缓冲堆积。较新版本在 CLUSTER INFO 中提供了链路缓冲溢出计数,出现增长要立刻定位慢节点。