Command

Cluster 相关命令

cluster nodes

cluster-nodes 命令 – Redis中国用户组(CRUG)

列出集群当前已知的所有节点,以及这些节点的相关信息,如下:

127.0.0.1:6000> cluster nodes

dc...4675e 10.10.17.203:6000@16000 myself,master -          0 1631093496000 29 connected 0-5460
ed...1b5d0 10.10.17.203:6003@16003 slave         dc...4675e 0 1631093499342 29 connected
ec...7bcbf 10.10.17.203:6001@16001 master        -          0 1631093498000 28 connected 5461-10922
b7...def2e 10.10.17.203:6004@16004 slave         ec...7bcbf 0 1631093498109 28 connected
cd...d467d 10.10.17.203:6002@16002 master        -          0 1631093499144 21 connected 10923-16383
e3...f1baa 10.10.17.203:6005@16005 slave         cd...d467d 0 1631093498320 21 connected

格式:

<id> <ip:port> <flags> <master> <ping-sent> <pong-recv> <config-epoch> <link-state> <slot> <slot> ... <slot>
  • ping-sent 最近一次发送 ping 的时间,这个时间是一个 unix 毫秒时间戳,0代表没有发送过
  • pong-recv: 最近一次收到 pong 的时间,使用 unix 时间戳表示
  • config-epoch: 节点的 epoch 值。每当节点发生失败切换时,都会创建一个新的,独特的,递增的 epoch。如果多个节点竞争同一个哈希槽时,epoch值更高的节点会抢夺到。
  • link-state: 值可以是 connecteddisconnected
  • flags: 逗号分割的标记位
    • myself: 当前连接的节点.
    • master: 节点是master
    • slave: 节点是slave
    • fail?: 节点处于PFAIL 状态。 当前节点无法联系,但逻辑上是可达的 (非 FAIL 状态).
    • fail: 节点处于FAIL 状态。大部分节点都无法与其取得联系将会将改节点由 PFAIL 状态升级至FAIL状态。
    • handshake: 还未取得信任的节点,当前正在与其进行握手
    • noaddr: 没有地址的节点
    • noflags: 连个标记都没有

cluster info

打印集群的信息

127.0.0.1:6000> cluster info

cluster_state:ok                         # ok 正常,fail:至少有一个哈希槽没有被绑定、该节点无法联系到多数 master 节点、...

cluster_slots_assigned:16384             # 已分配到集群节点的哈希槽数量
cluster_slots_ok:16384                   # 哈希槽状态不是 FAIL 和 PFAIL 的数量
cluster_slots_pfail:0                    # 哈希槽状态是 PFAIL 的数量
cluster_slots_fail:0                     # 哈希槽状态是 FAIL 的数量

cluster_known_nodes:6                    # 集群中节点总数量
cluster_size:3                           # 能够提供服务的 master 节点数量

cluster_current_epoch:29                 # 集群本地 Current Epoch 变量的值
cluster_my_epoch:29                      # 当前节点 Current Epoch 变量的值

cluster_stats_messages_sent:8654         # 通过 node-to-node 二进制总线发送的消息数量
cluster_stats_messages_ping_sent:4315    
cluster_stats_messages_pong_sent:4338
cluster_stats_messages_update_sent:1

cluster_stats_messages_received:8612     # 通过 node-to-node 二进制总线接收的消息数量
cluster_stats_messages_ping_received:4288
cluster_stats_messages_pong_received:4324

Info

  • cluster slots 返回哈希槽和 Redis 实例映射关系

    • 对客户端实现集群功能非常有用,使用这个命令可以获得哈希槽与节点(由 IP 和 端口 组成)的映射关系
    • 当客户端收到(用户的)调用命令时,可以根据(这个命令)返回的信息将命令发送到正确的 Redis 实例
  • cluster replicas <node-id> 列出指定主节点的副本节点

  • cluster slaves <node-id> 列出指定 master 节点所有 slave 节点

  • cluster count-failure-reports <node-id> 这个命令主要用来调试,返回指定节点的故障报告个数

  • cluster failover [force|takeover] 只能在群集 slave 节点执行,让 slave 节点进行一次人工故障切换

  • cluster reset [hard|soft] 用于在每个新的测试单元启动时初始化群集状态

Node

  • cluster meet <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子
  • cluster forget <node_id> 从集群中移除 node_id 指定的节点
  • cluster replicate <node_id> 将当前节点设置为 node_id 指定的节点的从节点
  • cluster saveconfig 将节点的配置文件保存到硬盘,保证系统重启之后状态信息还是正确的

Slot

  • cluster addslots <slot> [slot ...] 将一个或多个槽( slot)指派( assign)给当前节点
    • 创建新集群时,用于初始化分配可用的 hash slots
    • 修复有未分配 slots 的坏集群
  • cluster delslots <slot> [slot ...] 移除一个或多个槽对当前节点的指派
    • 调试非常有用,并且当创建新的集群时,可以手动的协调集群配置,主要为了 API 的完整性存在
    • 副作用:因为有未分配的哈希槽,节点可能会进入下线状态
  • cluster flushslots 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点
  • cluster setslot ...
    • cluster setslot <slot> node <node_id> 将槽 slot 指派给 node_id 指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派
    • cluster setslot <slot> migrating <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中
    • cluster setslot <slot> importing <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点
    • cluster setslot <slot> stable 取消对槽 slot 的导入( import)或者迁移( migrate)

Key

  • cluster keyslot <key> 计算键 key 应该被放置在哪个槽上
  • cluster countkeysinslot <slot> 返回槽 slot 目前包含的键值对数量
  • cluster getkeysinslot <slot> <count> 返回 slot 槽中的键,count 限制个数
    • 主要是用于 rehash 期间 slot 从一个节点移动到另外一个节点

Read More