CLUSTER SLOTS

用法
CLUSTER SLOTS
复杂度
O(N) 其中 N 是集群节点的总数
始于
3.0.0
ACL 类别
@slow

CLUSTER SLOTS 返回关于哪些集群槽映射到哪些 Valkey 实例的详细信息。此命令适用于 Valkey 集群客户端库的实现,以便检索(或在收到重定向时更新)将集群哈希槽与实际节点网络信息关联的映射,这样当接收到命令时,它可以被发送到最可能是该命令中指定键的正确实例。

每个节点的网络信息是一个包含以下元素的数组

  • 首选端点(可以是 IP 地址、主机名或 NULL)
  • 端口号
  • 节点 ID
  • 附加网络元数据的映射

首选端点和端口一起定义了客户端应发送给定槽请求的位置。端点的 NULL 值表示节点具有未知端点,客户端应连接到用于发送 CLUSTER SLOTS 命令的相同端点,但使用该命令返回的端口。当 Valkey 节点位于 Valkey 不知道其端点的负载均衡器后面时,这种未知端点配置非常有用。哪个端点被设置为首选端点由 cluster-preferred-endpoint-type 配置决定。空字符串 "" 是端点字段的另一个异常值,也适用于 IP 字段,如果节点不知道自己的 IP 地址,则返回此值。这可能发生在仅包含一个节点的集群中,或者节点尚未加入集群的其余部分。如果节点配置为使用通告主机名但没有使用 cluster-announce-hostname 配置主机名,则会显示值 ?。客户端可以像处理 NULL 一样处理空字符串,即用于发送当前命令的相同端点;而 "?" 应被视为未知节点,不一定是服务当前命令的同一节点。

附加网络元数据作为每个节点的第四个参数提供映射。可能会返回以下网络元数据:

  • IP:当首选端点未设置为 IP 时。
  • 主机名:当节点具有已通告的主机名但主端点未设置为主机名时。

嵌套结果数组

每个嵌套结果是

  • 槽范围起始
  • 槽范围结束
  • 槽范围的主节点,表示为嵌套网络信息
  • 槽范围主节点的第一个副本
  • 第二个副本
  • ...依此类推,直到返回此主节点的所有副本。

每个结果都包含所列槽范围的主实例的所有活跃副本。失败的副本不会返回。

命令响应在集群的所有节点上是确定性的,这意味着如果两个节点返回相同的响应,它们对集群具有相同的视图。主节点按其服务的槽排序,然后副本按集群分配的节点 ID 进行字典排序。第三个嵌套回复保证是槽范围的主实例的网络信息。第三个嵌套回复之后的所有网络信息都是主节点的副本。

如果集群实例具有非连续的槽(例如 1-400,900,1800-6000),则主节点和副本的网络信息结果将针对每个顶级槽范围回复重复。

> CLUSTER SLOTS
1) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 30001
      3) "09dbe9720cda62f7865eabc5fd8857c5d2678366"
      4) 1) hostname
         2) "host-1.valkey.example.com"
   4) 1) "127.0.0.1"
      2) (integer) 30004
      3) "821d8ca00d7ccf931ed3ffc7e3db0599d2271abf"
      4) 1) hostname
         2) "host-2.valkey.example.com"
2) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 30002
      3) "c9d93d9f2c0c524ff34cc11838c2003d8c29e013"
      4) 1) hostname
         2) "host-3.valkey.example.com"
   4) 1) "127.0.0.1"
      2) (integer) 30005
      3) "faadb3eb99009de4ab72ad6b6ed87634c7ee410f"
      4) 1) hostname
         2) "host-4.valkey.example.com"
3) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 30003
      3) "044ec91f325b7595e76dbcb18cc688b6a5b434a1"
      4) 1) hostname
         2) "host-5.valkey.example.com"
   4) 1) "127.0.0.1"
      2) (integer) 30006
      3) "58e6e48d41228013e5d9c1c37c5060693925e97e"
      4) 1) hostname
         2) "host-6.valkey.example.com"

警告:在未来的版本中,可能会有更多元素来更好地描述节点。通常,客户端实现应仅依赖于某些参数位于指定固定位置的事实,但可能会有更多参数跟随并应被忽略。同样,客户端库应尽可能尝试应对旧版本可能仅具有主端点和端口参数的事实。

RESP2/RESP3 回复

数组回复:带有网络信息的槽范围嵌套列表。

历史

版本 变更
4.0.0

添加了节点 ID。

7.0.0

添加了附加网络元数据字段。