集群体检三件套
集群出问题时第一个要看的是 CLUSTER INFO:它给出整体状态、槽覆盖情况与节点数量。CLUSTER NODES 展开每个节点的角色、负责的槽与连接状态。Redis 7.0 起新增 CLUSTER SHARDS,用结构化格式描述分片与主从关系,比解析 NODES 那一长串字段友好得多,适合脚本化巡检。
基本信息
| 核心命令 | CLUSTER INFO / CLUSTER NODES / CLUSTER SHARDS(7.0+) |
|---|---|
| 槽总数 | 固定 16384,全部覆盖才可能处于 ok 状态 |
| 状态字段 | cluster_state、cluster_slots_assigned、cluster_slots_pfail、cluster_slots_fail |
| 规模字段 | cluster_known_nodes、cluster_size(主节点数) |
| 辅助命令 | redis-cli --cluster check 给出可读性更好的整体体检 |
典型使用场景
- 集群报错时先确认是否整体不可用,还是只有部分槽受影响
- 扩容或缩容前后核对槽分布与主节点数量是否与设计一致
- 判断某个节点是主观下线还是客观下线,决定是否介入
- 巡检主从配对关系,确认每个主节点都有从节点兜底
- 槽迁移结束后验证 slots_assigned 是否回到 16384
查看集群状态
查看集群状态
redis-cli -c -p 6379 CLUSTER INFO
# cluster_state:ok cluster_slots_assigned:16384
# cluster_known_nodes:6 cluster_size:3
# cluster_slots_pfail:0 cluster_slots_fail:0
redis-cli -c -p 6379 CLUSTER MYID
redis-cli -c -p 6379 CLUSTER NODES # 字段多,适合人工看
redis-cli -c -p 6379 CLUSTER SHARDS # 7.0+ 结构化视图
redis-cli --cluster check 10.0.0.1:6379 # 整体体检,输出可读性最好关键字段逐项读法
| 字段 | 含义 | 异常判读 |
|---|---|---|
| cluster_state | 集群整体可用性 | 非 ok 会拒绝写,先查槽与多数派 |
| cluster_slots_assigned | 已分配的槽数量 | 必须等于 16384,差一个都是 fail |
| cluster_slots_pfail | 主观下线节点持有的槽数 | 不为 0 说明有节点被多数哨兵式标记 |
| cluster_slots_fail | 客观下线节点持有的槽数 | 不为 0 说明有槽真的不可用 |
| cluster_size | 正在提供服务的主节点数 | 与设计不符要立刻排查 |
| flags / link-state | 节点角色标记与连接状态 | 含 fail 才是客观下线,connected 之外的连接要查网络 |
cluster_state 为 fail 时按顺序查三件事:槽是否 16384 全覆盖、cluster_slots_fail 是否为 0、节点间是否在 cluster-node-timeout 内互相收到心跳。
fail? 表示主观下线(pfail),需要多数派确认才会升级为 fail。把 fail? 当彻底故障会误判并制造不必要的切换,把 fail 当抖动则会错过真实故障。
CLUSTER NODES 的字段格式随版本有过调整,用字符串切割做自动化巡检很脆弱。7.0 以上优先用 CLUSTER SHARDS 或 redis-cli --cluster check。