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

Redis 怎么快速查主从信息,搞清楚复制关系那些事儿

要快速搞清楚Redis的主从信息,也就是弄明白哪台是主库(Master),哪台是从库(Slave),以及它们之间的复制关系是否正常,我们可以通过一些简单的命令和步骤来实现,这就像查看一个团队的领导是谁,团队成员有哪些,以及他们之间的沟通是否顺畅。

核心命令:INFO REPLICATION

最直接、最常用的方法就是使用Redis自带的INFO命令,并指定REPLICATION部分,这个命令会返回一个非常详细的信息列表,直接告诉我们当前Redis实例在复制关系中所扮演的角色和状态。

无论你连接的是哪台Redis服务器,在它的命令行界面(通常使用redis-cli工具连接后)直接输入命令:

INFO REPLICATION

然后按下回车,屏幕上就会显示出关键信息,我们来解读一下输出结果里最重要的几个字段,这就像看一份身份报告:

  1. role:masterrole:slave 这是最根本的信息,一眼就能看出这台服务器是“主”还是“从”,如果显示role:master,那它就是主库;如果显示role:slave,那它就是从库。

  2. 如果当前是主库(master),你还会看到以下重要信息:

    • connected_slaves: 这个数字表示当前有多少个从库正在连接着这个主库,如果是0,说明目前没有从库在复制它。
    • 接下来会列出每个已连接从库的详细信息,通常像这样:
      slave0:ip=192.168.1.102,port=6379,state=online,offset=12345678,lag=0
      • ipport:告诉你这个从库的网络地址在哪里。
      • state:显示复制状态,最理想的是online,表示复制连接正常,如果是其他状态如sync(正在同步数据)或offline(离线),就说明有问题。
      • offset:这是复制偏移量,是判断数据一致性的关键,下面会详细说。
      • lag:表示复制延迟,单位是秒。lag=0或一个很小的数字是健康的,如果这个数字持续很大,说明从库的数据比主库落后很多。
  3. 如果当前是从库(slave),你则会看到它对应的主库信息:

    Redis 怎么快速查主从信息,搞清楚复制关系那些事儿

    • master_host: 主库的IP地址。
    • master_port: 主库的端口号。
    • master_link_status: 与主库的连接状态。up表示连接正常,down表示连接断开。
    • slave_repl_offset: 从库当前的复制偏移量。
    • master_last_io_seconds_ago: 距离上次与主库通信过去了多少秒,这个值很小(比如1或2)说明通信频繁,连接健康。

实践步骤:快速理清整个拓扑

现在我们知道怎么看单台机器的身份了,那怎么快速摸清整个复制关系的网络呢?可以按这个步骤来:

  1. 找到入口点:随便找一台你知道的、在集群中的Redis服务器连接上去。
  2. 查询其身份:执行INFO REPLICATION命令。
  3. 顺藤摸瓜
    • 如果它显示自己是role:slave,那么记下它的master_hostmaster_port去连接它报告的那个主库,因为通常主库才有全局视角。
    • 如果它显示自己是role:master,太好了,你就找到了根节点,这时,查看它的connected_slaves列表,就能知道它下面挂了哪些从库。
  4. 遍历验证:连接到主库后,记下所有从库的地址,然后逐个连接这些从库,在每个从库上再次执行INFO REPLICATION,确认它们报告的master_hostmaster_port是否都指向你刚刚连接的主库,这一步是为了防止配置错误,比如有的从库可能指向了错误的主库。
  5. 检查健康度:在查看每一台服务器时,都留意一下关键状态指标:
    • 主库看:connected_slaves数量是否符合预期?每个从库的state是否是onlinelag是否过大?
    • 从库看:master_link_status是否是upmaster_last_io_seconds_ago是否很小?

通过这个“找主库 -> 看从库列表 -> 验证从库指向”的过程,你就能快速且准确地绘制出整个Redis主从复制的拓扑图了。

辅助命令:CONFIG GET 和 ROLE

除了INFO REPLICATION,还有两个命令有时也能提供帮助:

Redis 怎么快速查主从信息,搞清楚复制关系那些事儿

  • CONFIG GET slaveof:这个命令会直接显示出这台服务器被配置为复制哪台主库(如果它是从库的话),在某些旧版本或特定配置下,这个信息很直接,但注意,如果服务器是运行时通过SLAVEOF命令设置为从库的,而非通过配置文件,那么这个配置项可能为空。
  • ROLE:这是一个更简洁的命令,它返回一个数组,快速说明角色、主库地址(如果是slave)以及复制偏移量,它的输出没有INFO命令那么详细,但胜在快速简洁,适合自动化脚本抓取关键信息。

关键指标:复制偏移量(offset)

之前提到的offset是判断数据一致性的核心,主库和每个连接的从库都会维护自己的复制偏移量,主库每传播一个字节的数据,它的偏移量就会增加,从库每接收到一个字节的数据,它的偏移量也会增加。

在一个健康的复制关系中,主库的master_repl_offset和从库的slave_repl_offset应该是相等的,或者差距很小且保持稳定增长,你可以通过分别在主从库上执行INFO REPLICATION来对比这两个值,如果从库的偏移量长期远小于主库的偏移量,并且延迟(lag)很大,就意味着发生了严重的复制延迟,从库上的数据是过时的。

总结一下

要快速搞清楚Redis的主从关系,最核心的就是登录到每一台Redis实例上,执行INFO REPLICATION命令,先从任意一台入手,找到真正的主库,然后主库会告诉你所有从库的名单,你再逐个去核对,密切关注rolestatelink_statusoffset这几个关键指标,就能不仅弄清结构,还能判断运行状态是否健康,整个过程就像点名和核对通讯录一样,方法直接有效。

(注:以上方法基于Redis官方文档中关于INFO命令和复制的说明,以及常见的数据库运维实践。)