集群分片
CLUSTER SHARDS
- Available since:
- 7.0.0
- Time complexity:
- O(N) where N is the total number of cluster nodes
- ACL categories:
-
@slow
,
CLUSTER SHARDS
返回有关集群分片的详细信息。
分片被定义为一组节点的集合,这些节点服务于相同的插槽集并且彼此之间进行复制。
在给定的时间内,一个分片可能只有一个主节点,但可能有多个或没有副本。
一个分片可能不服务于任何插槽,但仍然有副本。
此命令通过提供更高效和可扩展的集群表示,取代了CLUSTER SLOTS
命令。
该命令适合由Redis集群客户端库使用,以便理解集群的拓扑结构。 客户端应在启动时发出此命令,以检索将集群哈希槽与实际节点信息关联的映射。 此映射应用于将命令定向到可能服务于与给定命令关联的槽的节点。 如果命令被发送到错误的节点,即收到'-MOVED'重定向,则可以使用此命令更新集群的拓扑结构。
该命令返回一个分片数组,每个分片包含两个字段,'slots' 和 'nodes'。
'slots'字段是由此分片服务的槽范围列表,存储为一对整数,表示范围的包含起始和结束槽。 例如,如果一个节点拥有槽1、2、3、5、7、8和9,槽范围将存储为[1-3]、[5-5]、[7-9]。 因此,slots字段将由以下整数列表表示。
1) 1) "slots"
2) 1) (integer) 1
2) (integer) 3
3) (integer) 5
4) (integer) 5
5) (integer) 7
6) (integer) 9
'nodes' 字段包含分片内所有节点的列表。 每个单独的节点都是一个描述节点属性的映射。 一些属性是可选的,未来可能会添加更多属性。 当前的属性列表:
- id: 此特定节点的唯一节点ID。
- endpoint: 访问节点的首选端点,有关此字段可能值的更多信息,请参见下文。
- ip: 发送请求到此节点的IP地址。
- hostname (可选): 为此节点发送请求的公告主机名。
- port(可选):节点的TCP(非TLS)端口。至少会存在port或tls-port中的一个。
- tls-port(可选):节点的TLS端口。至少会存在port或tls-port中的一个。
- role: 该节点的复制角色。
- replication-offset: 此节点的复制偏移量。此信息可用于向最新的副本发送命令。
- 健康状态:可能是
online
、failed
或loading
。此信息应用于确定应向哪些节点发送流量。loading
健康状态应被用来了解节点当前不适合处理流量,但未来可能适合。
端点与端口一起定义了客户端应使用的位置,以发送给定槽的请求。
端点的NULL值表示节点具有未知的端点,客户端应连接到用于发送CLUSTER SHARDS
命令的相同端点,但使用命令返回的端口。
当Redis节点位于Redis不知道端点的负载均衡器后面时,这种未知端点配置非常有用。
设置的端点由cluster-preferred-endpoint-type
配置决定。
空字符串""
是端点字段的另一个异常值,也是IP字段的异常值,如果节点不知道自己的IP地址,则会返回此值。
这可能发生在仅由一个节点组成的集群中,或者节点尚未与集群的其余部分连接。
如果节点配置错误以使用宣布的主机名,但未使用cluster-announce-hostname
配置主机名,则会显示值?
。
客户端可以将空字符串视为与NULL相同的方式,即用于发送当前命令的相同端点,而"?"
应视为未知节点,不一定是服务于当前命令的同一节点。
示例
> CLUSTER SHARDS
1) 1) "slots"
2) 1) (integer) 0
2) (integer) 5460
3) "nodes"
4) 1) 1) "id"
2) "e10b7051d6bf2d5febd39a2be297bbaea6084111"
3) "port"
4) (integer) 30001
5) "ip"
6) "127.0.0.1"
7) "endpoint"
8) "127.0.0.1"
9) "role"
10) "master"
11) "replication-offset"
12) (integer) 72156
13) "health"
14) "online"
2) 1) "id"
2) "1901f5962d865341e81c85f9f596b1e7160c35ce"
3) "port"
4) (integer) 30006
5) "ip"
6) "127.0.0.1"
7) "endpoint"
8) "127.0.0.1"
9) "role"
10) "replica"
11) "replication-offset"
12) (integer) 72156
13) "health"
14) "online"
2) 1) "slots"
2) 1) (integer) 10923
2) (integer) 16383
3) "nodes"
4) 1) 1) "id"
2) "fd20502fe1b32fc32c15b69b0a9537551f162f1f"
3) "port"
4) (integer) 30003
5) "ip"
6) "127.0.0.1"
7) "endpoint"
8) "127.0.0.1"
9) "role"
10) "master"
11) "replication-offset"
12) (integer) 72156
13) "health"
14) "online"
2) 1) "id"
2) "6daa25c08025a0c7e4cc0d1ab255949ce6cee902"
3) "port"
4) (integer) 30005
5) "ip"
6) "127.0.0.1"
7) "endpoint"
8) "127.0.0.1"
9) "role"
10) "replica"
11) "replication-offset"
12) (integer) 72156
13) "health"
14) "online"
3) 1) "slots"
2) 1) (integer) 5461
2) (integer) 10922
3) "nodes"
4) 1) 1) "id"
2) "a4a3f445ead085eb3eb9ee7d8c644ec4481ec9be"
3) "port"
4) (integer) 30002
5) "ip"
6) "127.0.0.1"
7) "endpoint"
8) "127.0.0.1"
9) "role"
10) "master"
11) "replication-offset"
12) (integer) 72156
13) "health"
14) "online"
2) 1) "id"
2) "da6d5847aa019e9b9d2a8aa24a75f856fd3456cc"
3) "port"
4) (integer) 30004
5) "ip"
6) "127.0.0.1"
7) "endpoint"
8) "127.0.0.1"
9) "role"
10) "replica"
11) "replication-offset"
12) (integer) 72156
13) "health"
14) "online"