*Redis CLUSTER NODES 命令
CLUSTER NODES 返回集群中所有节点的配置信息、状态、角色和连接关系,是 Redis Cluster 运维和诊断的核心命令。
*语法
CLUSTER NODES
*参数说明
无参数。
*返回值
- String:多行文本,每行代表一个节点,包含以下字段(以空格分隔):
node-id:40 位十六进制节点 IDip:port@cport:IP、客户端端口和集群总线端口flags:节点标志(如master,slave,myself,fail,fail?,handshake,noaddr)master-id:若是副本,则为主节点 ID;若是主节点,则为-ping-sent:最近一次发送 ping 的时间(毫秒时间戳,0 表示未发送)pong-recv:最近一次收到 pong 的时间(毫秒时间戳)config-epoch:配置纪元link-state:连接状态(connected或disconnected)slot:该节点负责的槽范围(如0-5460,5461-10922)
*时间复杂度
O(N),其中 N 为集群中所有节点的总数。
*示例
*查看 6 节点集群状态
> CLUSTER NODES
3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b 192.168.1.10:6379@16379 myself,master - 0 1700000000000 1 connected 0-5460
67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1 192.168.1.11:6379@16379 master - 0 1700000001000 2 connected 5461-10922
07c37dfeb235213a872192d90877d0cd55635b91 192.168.1.12:6379@16379 master - 0 1700000002000 3 connected 10923-16383
e7d1eecce10fd2bb2b5f7755b0c1d6c2d1e1f2a3 192.168.1.13:6379@16379 slave 3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b 0 1700000003000 1 connected
f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9 192.168.1.14:6379@16379 slave 67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1 0 1700000004000 2 connected
b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0 192.168.1.15:6379@16379 slave 07c37dfeb235213a872192d90877d0cd55635b91 0 1700000005000 3 connected
*存在故障节点
> CLUSTER NODES
3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b 192.168.1.10:6379@16379 myself,master - 0 1700000000000 1 connected 0-5460
67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1 192.168.1.11:6379@16379 master,fail? - 0 1700000001000 2 disconnected 5461-10922
...
*槽迁移中的状态
> CLUSTER NODES
3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b 192.168.1.10:6379@16379 myself,master - 0 1700000000000 1 connected 0-5460 [5798->-67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1]
...
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR This instance has cluster support disabled | 未启用集群模式 | 在 redis.conf 中设置 cluster-enabled yes |
*最佳实践
- 这是集群诊断的第一命令:通过 flags 列可快速识别主节点(
master)、副本(slave)、疑似故障(fail?)、已故障(fail)、无地址(noaddr)等状态 - 连接状态
disconnected表示节点间通信中断,但节点不一定已故障。需结合ping-sent/pong-recv时间判断 - 槽迁移时,输出会包含
[slot->-node-id]或[slot-<-node-id]格式,表示槽正在迁出或迁入 - 生产环境建议将此命令输出解析后接入监控,重点监控
fail、fail?、disconnected状态以及槽分布均衡性 - 副本节点的
master-id字段可用于快速构建主从拓扑关系
*FAQ
Q1: flags 中的 myself 是什么意思?
A: myself 表示当前执行命令的节点。每个 CLUSTER NODES 输出中只有一行会带有 myself 标志。
Q2: fail? 和 fail 有什么区别?
A: fail? 表示节点被标记为疑似故障(PFAIL),需要更多节点确认;fail 表示已被确认为故障(FAIL),集群会触发故障转移将该节点的副本提升为主节点。
Q3: 为什么有些行末尾没有槽范围?
A: 副本节点(slave)不直接负责槽,因此没有槽范围。只有主节点(master)的行末尾才会显示负责的槽范围,如 0-5460。