在redis-cli终端执行cluster nodes命令如下:

> cluster nodes
fefc8a5afb007617102171cb1731daca38adeb3d 127.0.0.1:32521@42521 master - 0 1640833962176 10 connected 0-5460
dbc6571081e55390bdd8dfdc78d4c489cf16d8e2 127.0.0.1:32507@42507 myself,slave fefc8a5afb007617102171cb1731daca38adeb3d 0 1640833961000 10 connected
89ab3aac9d50fee47c2f53936066b3d38903c551 127.0.0.1:32506@42506 slave fefc8a5afb007617102171cb1731daca38adeb3d 0 1640833963179 16 connected
4eed23624e241463834bbd3d7d08905a42242fb5 127.0.0.1:32507@42507 slave 5624f550a15a1bc0d9a91e0018496b3691c81ab0 0 1640833963680 15 connected
5624f550a15a1bc0d9a91e0018496b3691c81ab0 127.0.0.2:32521@42521 master - 0 1640833962000 15 connected 5461-10922
ab7992e5d868b4ec9bf0a2ed32f10c76d6c455ff 127.0.0.1:32515@42515 master - 0 1640833960000 0 connected 10923-16383
e12e40cb760017825a7e5993f75de4c26bc149a1 127.0.0.2:32507@42507 slave ab7992e5d868b4ec9bf0a2ed32f10c76d6c455ff 0 1640833961000 13 connected

上述9项结果各项的含义如下:

  1. id:节点ID,是一个40字节的随机字符串,这个值在节点启动的时候创建,并且永远不会改变
  2. ip:port1@port2:port1指redis服务器与客户端通信的端口,port2则是集群内部节点间通信的端口
  3. flags:节点的角色标记,逗号分割的标记位,可能的值有: myself, master, slave, fail?, fail, handshake, noaddr, noflags. 这些标记为具体的意思是:
    myself: 当前连接的节点
    master: 节点是master
    slave: 节点是slave
    fail?: 节点处于PFAIL 状态。 当前节点无法联系,但逻辑上是可达的 (非 FAIL 状态)
    fail: 节点处于FAIL 状态. 大部分节点都无法与其取得联系将会将改节点由 PFAIL 状态升级至FAIL状态
    handshake: 还未取得信任的节点,当前正在与其进行握手
    noaddr: 没有地址的节点
    noflags: 没有标记(No flags at all)

  4. 主从关系位:如果节点是slave,并且已知master节点,则为master节点ID;否则为符号"-"
  5. ping-sent:最近一次发送ping的时间,这个时间是一个unix毫秒时间戳,0代表没有发送过
  6. pong-recv:最近一次收到pong的时间,使用unix时间戳表示
  7. config-epoch:节点的epoch值(如果该节点是从节点,则为其主节点的epoch值)。每当节点发生失败切换时,都会创建一个新的,独特的,递增的epoch。如果多个节点竞争同一个哈希槽时,epoch值更高的节点会抢夺到
  8. link-state:node-to-node集群总线使用的链接的状态,我们使用这个链接与集群中其他节点进行通信.值可以是 connected 和 disconnected
  9. slot:master节点第9位为哈希槽值或者一个哈希槽范围,代表当前节点可以提供服务的所有哈希槽值。如果只是一个值,那就是只有一个槽会被使用。如果是一个范围,这个值表示为起始槽-结束槽,节点将处理包括起始槽和结束槽在内的所有哈希槽。

1、config-epoch 和 2、current-epoch:

每个主节点自身维护一个配置纪元(clusterNode.configEpoch)标示当前主节点的版本,所有主节点的配置纪元都不相等,从节点会复制主节点的配置纪元,主要解决不同的节点的配置发生冲突的情况;

整个集群又维护一个全局的配置纪元(clusterState.current Epoch),用于记录集群内所有主节点配置纪元的最大版本:当集群的状态发生改变,某个节点为了执行一些动作需要寻求其他节点的同意时,就会增加自己的 currentEpoch 的值,比如slave节点故障转移。

执行cluster info命令可以查看配置纪元信息:

127.0.0.1:6379> cluster info
...
cluster_current_epoch:15 //  整个集群最大配置纪元
cluster_my_epoch:13 //  当前主节点配置纪元

配置纪元的应用场景有:
·新节点加入。
·槽节点映射冲突检测。
·从节点投票选举冲突检测。

每次集群发生重要事件时,如出现新的主节点(新加入的或者由从节点转换而来),或从节点竞争选举。都会递增集群全局的配置纪元并赋值给相关主节点,用于记录这一关键事件。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐