*Redis CLUSTER SHARDS 命令
CLUSTER SHARDS 返回集群中所有分片(shard)与槽的映射关系,包括每个分片的主节点和副本节点的详细信息。该命令在 Redis 7.0.0 引入,用于替代已弃用的 CLUSTER SLOTS。
*语法
CLUSTER SHARDS
*参数说明
无参数。
*返回值
- Array:每个分片为一个数组元素,包含以下字段:
slots:该分片负责的槽范围数组(如[0, 5460])nodes:分片内所有节点的数组,每个节点包含:id:节点 IDport、endpoint:连接信息role:角色(master或replica)replication-offset:复制偏移量health:健康状态(online或failed)
*时间复杂度
O(N),其中 N 为集群中所有节点的总数。
*示例
*查看集群分片映射
> CLUSTER SHARDS
1) 1) "slots"
2) 1) (integer) 0
2) (integer) 5460
3) "nodes"
4) 1) 1) "id"
2) "3c3a0c74aae0b56179ccb1a76b7850a3b1f1b26b"
3) "port"
4) (integer) 6379
5) "endpoint"
6) "192.168.1.10"
7) "role"
8) "master"
9) "replication-offset"
10) (integer) 1000000
11) "health"
12) "online"
2) 1) "id"
2) "e7d1eecce10fd2bb2b5f7755b0c1d6c2d1e1f2a3"
3) "port"
4) (integer) 6379
5) "endpoint"
6) "192.168.1.13"
7) "role"
8) "replica"
9) "replication-offset"
10) (integer) 999999
11) "health"
12) "online"
2) 1) "slots"
2) 1) (integer) 5461
2) (integer) 10922
3) "nodes"
4) 1) 1) "id"
2) "67ed2db8d677e59ec4a4cefb06858cf2a1a89fa1"
...
*常见错误
| 错误 | 原因 | 解决 |
|---|---|---|
| ERR This instance has cluster support disabled | 未启用集群模式 | 在 redis.conf 中设置 cluster-enabled yes |
*最佳实践
- 作为 CLUSTER SLOTS 的替代命令,推荐使用 SHARDS 获取分片级别的拓扑信息。SHARDS 的输出以分片为单位,包含完整的节点信息,更适合客户端驱动和运维工具
- 客户端驱动在初始化集群连接时,可通过此命令获取分片拓扑,构建键到节点的路由表
- 关注
health字段为failed的节点,及时排查故障 - 通过
replication-offset对比主从节点,可判断副本同步延迟
*FAQ
Q1: SHARDS 和 SLOTS 有什么区别? A: CLUSTER SLOTS 以槽为单位返回映射信息,只包含 IP、端口和节点 ID;CLUSTER SHARDS 以分片为单位返回,包含更完整的节点信息(如角色、复制偏移量、健康状态)。CLUSTER SLOTS 在 Redis 7.0 中已弃用,推荐用 SHARDS 替代。
Q2: 为什么返回的 slots 是数组而不是范围字符串?
A: SHARDS 使用数组格式 [start, end] 表示槽范围,便于客户端程序直接解析,比 SLOTS 的字符串格式(如 0-5460)更结构化。
Q3: health 字段有哪些可能的值?
A: 目前主要有 online(节点健康)和 failed(节点故障)。如果节点处于 handshake 状态或其他过渡状态,可能不显示在 nodes 列表中或显示为特殊状态。具体取值取决于 Redis 版本。