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

Redis里怎么快速找到主节点,查看主从结构的方法分享

要快速找到Redis集群中的主节点并看清主从结构,我们可以从简单到复杂,使用几种不同的方法,这些方法主要依赖于Redis自带的一些关键命令和外部工具,下面我将详细分享这些方法,并尽量用直白的语言说明。

最直接的方法:使用 info replication 命令

这是最常用、最核心的方法,无论你的Redis是单机实例还是哨兵模式或集群模式,这个命令都能提供最直接的信息,你只需要连接到任何一个你认为可能是主节点或从节点的Redis实例上,然后执行 info replication 命令。

当你执行这个命令后,会返回一大段信息,我们只需要关注开头的几行和中间的几行关键信息就行。

  • 如何判断当前连接的节点是不是主节点? 你看返回结果中有一行叫做 role:,如果它显示 role:master,那么恭喜你,你现在连接的就是一个主节点,如果它显示 role:slave,那么你现在连接的是一个从节点。

  • 如果当前节点是从节点,怎么找到它的主节点? role 显示是 slave,你继续往下看,会找到两行非常重要的信息:

    • master_host::这行会告诉你它的主节点的IP地址。
    • master_port::这行会告诉你它的主节点的端口号。 有了这两个信息,你就可以用Redis客户端(比如redis-cli)去连接这个地址和端口,然后再执行一次 info replication,确认它的 rolemaster,这样就找到主节点了。
  • 如何查看主节点下面挂了哪些从节点? 如果你连接的是一个主节点(role:master),那么在 info replication 的结果中,你会看到一个叫做 connected_slaves: 的字段,它告诉你当前有多少个从节点连接着这个主节点,再往下看,你会看到以 slave 开头的多行信息,slave0: ip=192.168.1.102,port=6379,state=online,offset=12345,lag=0,每一行 slaveX 就代表一个从节点,里面包含了这个从节点的IP和端口,这样,你就能清晰地看到这个主节点下的所有从节点,也就是看到了这个主从复制的结构。

这个方法是最基础的,也是最可靠的,如果你面对的是一个由很多主从组构成的Redis集群,一个一个去连接检查效率就太低了,这时候就需要下面的方法。

针对Redis Cluster集群的方法:使用 cluster nodes 命令

如果你的Redis环境是官方的Redis Cluster模式,那么查找主节点和查看整个集群拓扑结构最强大的命令就是 cluster nodes,你需要连接到集群中的任意一个节点(无论是主还是从)上执行这个命令。

这个命令返回的信息看起来有点复杂,是一行一行的,每行对应一个节点,我们只需要看懂几个关键部分就行,每一行通常是这样格式的:<节点ID> <IP:端口@集群总线端口> <角色标志> <主节点ID> ...

  • 如何快速找出所有主节点? 你看每一行的第三部分,也就是角色标志,如果这里面包含 master,那么这一行所描述的节点就是主节点,你可以用 grep 命令来过滤,比如在Linux系统上,连接集群节点后执行 cluster nodes | grep master,这样屏幕上就只显示所有主节点的信息了。

  • 如何看清主从关系? 这是 cluster nodes 命令最厉害的地方,你观察每一行的第四部分,也就是主节点ID

    • 如果某个节点是主节点,它自己是自己的主,所以它的主节点ID部分是一串很长的哈希值,后面跟着,表示它没有上级。
    • 如果某个节点是从节点,它的主节点ID就是它所归属的那个主节点的ID。 你可以通过这个ID的对应关系,清晰地看到哪个从节点(slave)对应哪个主节点(master),在实际操作中,你可以把 cluster nodes 的完整结果拷贝出来,然后根据ID进行排序和关联,就能画出一幅完整的集群拓扑图。

借助外部工具:Redis Sentinel(哨兵)

如果你的Redis使用了哨兵模式来做高可用,那么询问哨兵是最“正确”的方式,哨兵的作用就是监控主从节点,并在主节点宕机时自动进行故障转移,哨兵永远知道当前哪个是主节点。

你需要连接到哨兵实例(注意,不是Redis实例本身,是独立的哨兵进程,默认端口是26379),使用哨兵专用的命令。

  • 查询某个主从组的主节点: 使用命令 sentinel get-master-addr-by-name <主节点名称>,这个命令会直接返回当前被哨兵认定的、健康的主节点的IP和端口,这里的主节点名称是在哨兵配置文件中配置的,你需要提前知道,这个方法非常直接,一问便知。

  • 查看监控的详情: 使用命令 sentinel masters 可以列出哨兵监控的所有主节点,使用 sentinel slaves <主节点名称> 可以列出指定主节点下的所有从节点的详细信息。

总结一下

  • 单个主从复制:直接用 info replication,看 rolemaster_host/connected_slaves
  • Redis Cluster集群:用 cluster nodes,看角色标志和主节点ID的映射关系。
  • 哨兵模式:用 sentinel get-master-addr-by-name 问哨兵要主节点地址。

还有一些图形化的管理工具,比如RedisInsight(由Redis官方开发)、一些第三方的Web管理界面,它们底层也是调用上述命令,但会把结果用更友好的图形界面展示出来,让你一目了然地看到整个架构,这对于管理大型集群尤其方便,但无论工具多么花哨,理解上面这些命令行方法才是根本,因为在很多服务器排查场景下,你可能只有命令行终端可以使用。

希望这些具体的方法能帮助你快速定位Redis的主节点和理清主从结构。

Redis里怎么快速找到主节点,查看主从结构的方法分享