*Redis CLUSTER SHARDS 命令

CLUSTER SHARDS 返回集群中所有分片(shard)与槽的映射关系,包括每个分片的主节点和副本节点的详细信息。该命令在 Redis 7.0.0 引入,用于替代已弃用的 CLUSTER SLOTS


*语法

CLUSTER SHARDS

*参数说明

无参数。


*返回值

  • Array:每个分片为一个数组元素,包含以下字段:
    • slots:该分片负责的槽范围数组(如 [0, 5460]
    • nodes:分片内所有节点的数组,每个节点包含:
    • id:节点 ID
    • portendpoint:连接信息
    • role:角色(masterreplica
    • replication-offset:复制偏移量
    • health:健康状态(onlinefailed

*时间复杂度

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 版本。