失败判定与报告计数
Redis Cluster 的故障判定是分布式的:主节点在 cluster-node-timeout 内联系不上对端时,先把对端记为 PFAIL,然后向其他主节点收集状态,当同样认定 PFAIL 的主节点数达到多数派,该节点被判为 FAIL 并广播全网。CLUSTER COUNT-FAILURE-REPORTS <node-id> 返回本节点当前收集到的、把目标节点标记为疑似失败的报告条数,用于观察判定过程而不是判定结论。
基本信息
| 命令 | CLUSTER COUNT-FAILURE-REPORTS <node-id> |
|---|---|
| 返回值 | 当前累积的失败报告条数(整数) |
| 触发条件 | 超过 cluster-node-timeout 未应答进入 PFAIL |
| 升级条件 | 报告数达到主节点多数派则升级为 FAIL |
| 适用平台 | Redis Cluster 3.0 及以上;单机与哨兵模式没有该命令 |
| 权限要求 | 普通用户即可,只读命令 |
典型使用场景
- 误判排查:节点被标记 FAIL 但业务仍可访问时,看报告数是否在少数派区间反复起落
- 抖动定位:多次采样对比计数,区分持续失联与瞬时丢包
- 迁移前体检:扩容、迁移期间确认没有节点正处于报告累积阶段
- 复盘取证:结合 CLUSTER NODES 的 flags 与报告数还原判定链条
- 阈值调优:调整 cluster-node-timeout 前后对比报告数峰值,评估误判风险
常用写法
常用写法
redis-cli --cluster check 127.0.0.1:6379 # 先看集群整体健康
redis-cli -c CLUSTER NODES | grep -E 'fail|pfail' # 找出可疑节点及其 ID
redis-cli -c CLUSTER COUNT-FAILURE-REPORTS <node-id> # 采样目标节点的报告数
redis-cli -c CLUSTER COUNT-FAILURE-REPORTS <node-id> # 隔几十秒再采一次看趋势
redis-cli CLUSTER INFO | grep cluster_state # 集群状态是否已变 fail
redis-cli CONFIG GET cluster-node-timeout # 对照超时阈值判断合理性报告数怎么读
| 表现 | 含义 | 处置方向 |
|---|---|---|
| 持续为 0 | 没有节点在报告失败 | 正常,无需动作 |
| 少量且波动 | 个别链路抖动或节点变慢 | 查丢包、交换机与节点 CPU 饱和 |
| 持续增长直至多数派 | 真实失联或网络分区 | 按分区预案处置,不要先重启节点 |
| 清零后又快速累积 | 判定在反复震荡 | 核对超时阈值与节点负载波动 |
多数派统计只算主节点:从节点的报告不参与投票,判断对象要在主节点集合内看,节点角色变了结果口径也会变。
报告数上升时不要直接重启节点:重启会清空本节点状态与报告,把分区证据抹掉。先留存 CLUSTER NODES 输出、日志与网络指标,再决定动作。