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

Redis集群环境检查那些新指令你知道吗,教你快速掌握redis集群的各种检查命令

最近在翻看Redis的官方文档时,发现了一些在集群管理方面非常实用但可能不太被新手熟知的新指令和老指令的巧妙用法,这些命令能帮助我们像老中医“望闻问切”一样,快速诊断Redis集群的健康状况,下面就直接开讲,不绕弯子。

最基础的“体检”:CLUSTER INFO

这个命令是老朋友了,但永远是第一步,你连接到集群任意一个节点,输入 CLUSTER INFO,它会给出一份集群健康状况的概要报告,就像体检报告单,你要重点看几个关键指标:

  • cluster_state:这是最重要的指标,如果显示 ok,说明当前节点认为整个集群是正常的,如果是 fail,那就意味着这个节点认为集群已经下线了,出现了严重问题,比如有主节点宕机且没有从节点可以顶替。
  • cluster_slots_assigned:已分配的哈希槽数量,正常情况应该是16384,如果小于这个数,说明有槽位没有被分配,数据存储不完整。
  • cluster_slots_fail:标记为失败的哈希槽数量,只要这个数字不是0,就说明有槽位出了问题,可能对应主节点失联,这是非常严重的警报。
  • cluster_known_nodes:集群中当前节点已知的其他节点总数,你可以用它来核对集群节点数量是否正确,防止有节点意外脱离集群。

根据Redis官方文档的说明,CLUSTER INFO 是获取集群整体状态最直接的方式。

查看“家庭成员”清单:CLUSTER NODES

光知道整体健康不行,还得知道每个家庭成员(节点)的具体情况。CLUSTER NODES 命令会输出一个非常详细的列表,包含了集群中所有节点的信息。

Redis集群环境检查那些新指令你知道吗,教你快速掌握redis集群的各种检查命令

这个命令的输出信息量很大,每一行代表一个节点,包含了节点ID、IP地址和端口、角色(master/slave)、连接状态、负责的哈希槽范围等等,虽然看起来有点乱,但它是排查问题的基础,你可以快速查看:

  • 有没有节点被标记为 fail? 状态。
  • 每个主节点(master)下面是否都有对应的从节点(slave)。
  • 各个节点之间的连接关系是否正确。

更清晰的“家庭成员”关系图:CLUSTER SLOTS

如果说 CLUSTER NODES 的输出是纯文本清单,那 CLUSTER SLOTS 的输出就是一张结构化的关系图,这个命令会以更清晰的方式列出所有哈希槽的分配情况。

它会告诉你,从哪个槽到哪个槽是由哪个主节点负责的,并且会列出这个主节点下的所有从节点,当你需要快速确认数据分布,或者检查主从映射关系时,这个命令比 CLUSTER NODES 更直观,根据Redis官方文档,这个命令特别适用于需要理解数据分片结构的场景。

探测节点间的“心跳”:CLUSTER PING

Redis集群环境检查那些新指令你知道吗,教你快速掌握redis集群的各种检查命令

集群节点之间通过心跳包(gossip协议)来维持联系,从A节点看B节点是离线的,但可能只是网络出现了瞬时问题。CLUSTER PING 命令可以让你手动测试从当前节点到另一个节点的连通性。

用法是 CLUSTER PING <目标节点ID>,如果返回 PONG,说明当前节点到目标节点的网络连接是通畅的,这个小工具在怀疑网络分区或节点间通信故障时非常有用。

检查配置的“一致性”:CLUSTER KEYSLOT 和 CLUSTER COUNTKEYSINSLOT

这是一对组合拳,用于更精细地检查数据分布。

  • CLUSTER KEYSLOT your_key:这个命令会告诉你指定的键 your_key 应该被存储在哪个哈希槽里,这能帮你验证哈希槽的计算是否正确。
  • CLUSTER COUNTKEYSINSlot slot_number:这个命令可以(在某种程度上)查询某个特定的哈希槽内大约有多少个键,注意,这个命令需要连接到该槽位实际所在的主节点上执行才有效。

你可以先通过第一个命令找到键对应的槽,然后连接到正确的主节点,再用第二个命令查看该槽的键数量,从而验证数据迁移或清理操作是否成功。

Redis集群环境检查那些新指令你知道吗,教你快速掌握redis集群的各种检查命令

实战技巧:如何检查一个键到底在哪?

这是一个非常常见的需求,上面提到了 CLUSTER KEYSLOT,但它只告诉你槽位号,不告诉你节点地址,一个更直接的方法是使用客户端的重定向功能。

如果你连接到了一个错误的节点(该节点不负责你要找的键),Redis会返回一个 -MOVED 错误,并且这个错误信息里会明确告诉你这个键应该被访问的正确节点的IP和端口,虽然这是一个错误信息,但它却是定位键位置最准确的方法,成熟的Redis客户端库会自动处理这个重定向。

一个需要注意的点:Readonly模式下的检查

在从节点上,默认情况下你只能读取该从节点的主节点所负责的数据,如果你想在从节点上执行一些需要感知整个集群状态的检查命令(CLUSTER NODES),需要先在该从节点上执行 READONLY 命令,开启只读模式,这样,从节点才能处理与集群状态相关的查询。

这些命令组合起来,就构成了一套检查Redis集群的“工具箱”,平时多用用,遇到问题时不慌张,一步步排查,就能快速定位到问题所在,多看看Redis官方文档,里面藏着很多宝贝。