当前位置:首页 > 问答 > 正文

怎么用Redis快速看看集群里都有哪些节点和状态信息呢?

要快速查看Redis集群里有哪些节点以及它们的状态,最直接、最核心的命令就是 CLUSTER NODES,这个命令会返回一个包含集群内所有节点详细信息的列表,当你连接到集群中的任意一个节点(无论是主节点还是从节点)并执行这个命令时,它都会给你一份关于整个集群拓扑的“全景地图”。

核心命令:CLUSTER NODES

你只需要打开一个终端,连接到你的Redis集群中的任何一个实例,连接命令通常像这样:redis-cli -h <节点IP> -p <节点端口> -a <密码>(如果设置了密码的话),连接成功后,直接输入 CLUSTER NODES 并回车。

命令会输出多行文本,每一行代表一个节点,初看可能有点复杂,但它的结构是很清晰的,每一行都遵循固定的格式,由空格分隔的一系列字段组成,我们来拆解一个典型的输出行:

f4b0d12c6e46e8e687e49d1f7ac6b6d9c79b6f22 192.168.1.101:6379@16379 myself,master - 0 1657894501000 3 connected 0-5460

  • 节点ID:开头那一长串字符串(如 f4b0d12c...)是每个节点的唯一标识符,集群内部通过这个ID来识别节点,而不是IP和端口。
  • IP:端口:这是客户端用来连接这个节点的地址和端口,168.1.101:6379,后面的 @16379 是集群总线端口,用于节点间通信,我们一般不需要关心。
  • 标志(flags):这部分非常重要,它告诉你这个节点的当前角色和状态,多个标志用逗号分隔,常见的标志有:
    • myself:表示你当前连接的就是这个节点,这是最快速的定位方式。
    • master:表示这是一个主节点,负责存储数据的一部分(槽位)。
    • slave:表示这是一个从节点,是某个主节点的副本。
    • fail?:节点可能下线了,正在被怀疑,需要集群进一步确认。
    • fail:节点已被集群确认为下线状态。
    • handshake:新节点正在尝试加入集群。
  • 主节点ID:如果当前行描述的是一个从节点(slave),那么这个字段就是它的主节点的ID,如果是主节点,这个字段就是 ,通过这个字段,你可以清晰地看到主从复制关系。
  • 最后PING发送和接收的时间戳:这些是集群用于检测节点是否存活的心跳信息,对于快速故障排查很有用。
  • 配置纪元(config epoch):这是集群配置的版本号,在故障转移和配置更新时使用,对于日常查看可以稍后关注。
  • 连接状态:通常就是 connected,表示该节点是集群的一部分。
  • 哈希槽(slot):这是最关键的信息之一,它告诉你这个主节点负责管理哪些数据,示例中的 0-5460 表示哈希槽从0到5460都由这个节点负责,Redis集群一共有16384个槽,数据就是通过哈希算法分配到这些槽上的,你可能会看到单个数字(如 1025)、范围(如 1000-2000)或多个范围的组合(如 0-99 200-300)。

通过仔细阅读 CLUSTER NODES 的输出,你就能立刻知道:集群总共有哪些节点(IP和端口),哪些是主节点,哪些是从节点,从节点分别隶属于哪个主节点,每个主节点负责哪些数据槽,以及是否有节点被标记为故障状态。

更简明的视图:CLUSTER SLOTS

怎么用Redis快速看看集群里都有哪些节点和状态信息呢?

如果你只关心数据是如何在各个主节点间分布的,而不太关心从节点和故障状态等细节,CLUSTER SLOTS 命令提供了一个更清晰、更面向数据的视图。

这个命令的输出是一个数组,数组的每个元素代表一个连续的哈希槽范围,以及负责这个范围的主节点和它的从节点列表,输出看起来会更规整,

1) 1) (integer) 0      # 哈希槽起始编号
   2) (integer) 5460   # 哈希槽结束编号
   3) 1) "192.168.1.101" # 主节点IP
      2) (integer) 6379  # 主节点端口
      3) "f4b0d12c6e46e8e687e49d1f7ac6b6d9c79b6f22" # 主节点ID
   4) 1) "192.168.1.102" # 第一个从节点IP
      2) (integer) 6379  # 从节点端口
      3) "a1b2c3d4..."   # 从节点ID

这个命令让你一眼就能看出0到5460号槽在101这台机器的主节点上,并且102是其从节点,对于快速了解数据分片情况非常方便。

检查集群健康状态:CLUSTER INFO

怎么用Redis快速看看集群里都有哪些节点和状态信息呢?

CLUSTER INFO 命令不列出具体节点,而是给你一个关于集群整体健康状况的“体检报告”,它返回一系列键值对,包括:

  • cluster_state:理想状态是 ok,表示所有槽都已分配,如果是 fail,意味着有槽没有被分配(比如负责它的主节点挂了且没有可用的从节点进行故障转移),这时集群将拒绝部分或全部读写请求。
  • cluster_slots_assigned:已分配的槽数量,正常情况下应该是16384。
  • cluster_slots_ok:状态为OK的槽数量,正常情况下也应该是16384。
  • cluster_slots_pfailcluster_slots_fail:被怀疑失败和已确认失败的槽数量,理想情况下都是0。
  • cluster_known_nodes:集群已知的节点总数。
  • cluster_size:集群中负责数据分片的主节点数量。

这个命令能让你在5秒钟内判断出集群是否处于健康状态。cluster_stateok,那么基本可以放心。

实践建议

在实际操作中,你可以结合使用这些命令来快速获取信息:

  1. CLUSTER INFO 看一眼集群整体是否健康。
  2. 如果健康,但你想知道节点详情,就用 CLUSTER NODES,你可以结合 grep 命令来过滤信息,redis-cli -h 192.168.1.101 CLUSTER NODES | grep myself 来快速找到你连的是哪个节点,或者 grep master 来只看主节点。
  3. 如果你只关心数据是怎么分布的,用 CLUSTER SLOTS,它的格式更友好。

你只需要连接到集群中的任何一个存活节点,就能获取到整个集群的信息,这是Redis集群架构的一个便利之处,通过这些命令,你就能像管理员一样,对集群的“家庭成员”和它们的“健康状况”了如指掌了。