自Redis 3.0.0起可用
时间复杂度:O(N)其中N是 Cluster 节点的总数
Redis 集群中的每个节点都有其当前集群配置的视图,由一组已知节点、我们与这些节点的连接状态、它们的标志、属性和分配的插槽等给出。
CLUSTER NODES以序列化格式提供所有这些信息,即我们正在联系的节点的当前集群配置,该格式恰好与 Redis 集群本身用于在磁盘上存储集群状态的格式完全相同(但是磁盘集群状态在末尾附加了一些附加信息)。
请注意,通常愿意获取集群哈希槽和节点地址之间映射的客户端应该使用CLUSTER SLOTS。
CLUSTER NODES,提供更多信息,应用于管理任务、调试和配置检查。它也被用来redis-cli管理集群。
序列化格式
CLUSTER SLOTS
CLUSTER NODES
该命令的输出只是一个以空格分隔的 CSV 字符串,其中每一行代表集群中的一个节点。以下是 Redis上的输出示例。
每行字符串均由以下字段拼接成:
<id> <ip:port@cport[,hostname]> <flags> <master> <ping-sent> <pong-recv> <config-epoch> <link-state> <slot> <slot> ... <slot>
每个字段的含义如下:
1.id:节点id,一个40个字符的全局唯一字符串,在创建节点时生成,不会再更改(除非使用CLUSTER RESET HARD)。
2.ip:port@cport:客户端运行查询时需要联系的节点地址。
3.hostname:一个可识别的字符串,可以通过clusterannounce -hostname设置进行配置。字符串的最大长度是256个字符,不包括空结束符。名称可以包含ascii字母数字字符、'-'和'.'。
4.flags:一个逗号分隔的标志列表:myself, master, slave, fail?, fail, handshake, noaddr, nofailover, noflags。旗标的解释如下。
5.master:如果节点是副本,并且主节点已知,则主节点ID,否则使用“-”字符。
6.ping-sent:以毫秒为单位发送当前活动ping的Unix时间,如果没有挂起的ping,则为零。
7.pong-recv:以毫秒为单位,最后一次收到pong的Unix时间。
8.config-epoch:当前节点的配置纪元(或版本)(如果节点是副本,则为当前主节点)。每次发生故障转移时,都会创建一个新的、唯一的、单调递增的配置纪元。如果多个节点声称提供相同的哈希槽,那么具有较高配置epoch的节点获胜。
9.link-state:用于节点到节点集群总线的链路状态。使用此链路与节点通信。可以是connected也可以是disconnected。
10.slot:哈希槽号或范围。从参数编号位置9开始,但总共可能有多达16384个条目(从未达到限制)。这是该节点所服务的哈希槽列表。如果条目只是一个数字,则按数字解析。如果它是一个范围,它的形式是start-end,这意味着节点负责从头到尾的所有哈希槽,包括开始值和结束值。
标志是:
myself:你正在联系的节点。
master:节点是主节点。
slave:节点是副本。
fail?:节点处于PFAIL状态。您正在联系的节点无法访问,但逻辑上仍然可以访问(不在FAIL状态)。
fail:节点处于失败状态。将PFAIL状态提升为FAIL的多个节点不可访问。
handshake:不受信任的节点,我们正在握手。
noaddr:该节点没有已知的地址。
nofailover:副本不会尝试故障转移。
noflags:没有任何标志。