1:查看集群信息:

cluster info

> cluster info

cluster_state:ok               #集群状态,ok:在线;fail:槽未分配或则无法联系到多数master节点

cluster_slots_assigned:16384   #已分配到集群节点的哈希槽数量(不是没有被绑定的数量)。

cluster_slots_ok:16384         #正确分配的槽位,哈希槽状态不是FAIL 和 PFAIL 的数量.

cluster_slots_pfail:0          #哈希槽状态是否处于疑似下线状态。

cluster_slots_fail:0           #哈希槽状态是否处于下线状态,集群节点将无法提供查询服务,除非cluster-require-full-coverage被设置为no

cluster_known_nodes:8          #集群中节点数量(包括主从),包括处于握手状态还没有成为集群正式成员的节点.

cluster_size:4                 #几个节点被指派了槽。至少包含一个哈希槽且能够提供服务的master节点数量.

cluster_current_epoch:29       #集群当前的纪元。这个值在节点故障转移过程时有用,它总是递增和唯一的。

cluster_my_epoch:25            #节点当前所处的配置纪元,这个是关联在本节点的版本值.

cluster_stats_messages_ping_sent:1320068   #发送的ping消息数量.

cluster_stats_messages_pong_sent:3777394   #发送的pong消息数量.

cluster_stats_messages_fail_sent:17        #发送的fail消息数量.

cluster_stats_messages_auth-ack_sent:3     #发送的ack消息数量.

cluster_stats_messages_update_sent:3       #发送的update消息数量.

cluster_stats_messages_sent:5097485        #发送消息的数量.

cluster_stats_messages_ping_received:3777394  #接收的ping消息数量.

cluster_stats_messages_pong_received:1318017  #接收的pong消息数量.

cluster_stats_messages_fail_received:8        #接收的fail消息数量.

cluster_stats_messages_auth-req_received:4    #接收的ack消息数量.

cluster_stats_messages_received:5095423       #接受消息的数量.

2:查看集群节点信息:

cluster nodes

> cluster nodes

205577fb4066418570448dd36fcf54442c5c905d 192.168.163.132:6386@16386 slave bca5cab0605a285c209179bc15043d7f117741fc 0 1581927002000 20 connected

c6c2e226290f42aab575d3aff93deabd8f00c650 192.168.163.132:6381@16381 slave e83a4b07559418cb696057b54091ab78ac3a08fe 0 1581927000000 28 connected

730fdba543e309eb7fc6499fd6a85aba776c2a1d 192.168.163.132:6382@16382 slave 2961efa8d94d5c4b99b6bf3090aaf902ead26205 0 1581927003000 25 connected

4090eed9ab448a81f2a34876c72cf3c092bca628 192.168.163.132:6380@16380 master - 0 1581927003000 29 connected 6827-10922

2961efa8d94d5c4b99b6bf3090aaf902ead26205 192.168.163.132:6379@16379 myself,master - 0 1581927002000 25 connected 1365-5460

dc24cf9561486e996bcbf94c9305b6913c5019c5 192.168.163.132:6384@16384 slave 4090eed9ab448a81f2a34876c72cf3c092bca628 0 1581927002000 29 connected

e83a4b07559418cb696057b54091ab78ac3a08fe 192.168.163.132:6383@16383 master - 0 1581927003000 28 connected 12288-16383

bca5cab0605a285c209179bc15043d7f117741fc 192.168.163.132:6385@16385 master - 0 1581927003721 20 connected 0-1364 5461-6826 10923-12287

说明:

1 节点ID(node_id):唯一

2 IP和端口:位于@左边的是客户端端口,用户客户端通讯;@右边的是节点的集群端口,用于集群中其他节点通讯。

3 角色和状态:记录当前节点的角色以及所处的状态;如myself,master:表示客户端目前连接的节点,以及他是一个主节点。

4 主节点ID:如果当前节点是从节点,他会显示其主节点ID,如果是主节点,则会显示-。

5 发送ping的消息时间。最后一次向其他节点发送ping的Unix时间戳,格式为毫秒。如果和其他节点正常,没有阻塞,则显示0。

6 收到pong的消息时间。

7 节点所处的配置纪元

8 连接状态

9 负责的槽位信息

3:查看集群的槽位信息

cluster slots

> cluster slots

1) 1) (integer) 6827

   2) (integer) 10922

   3) 1) "192.168.163.132"

      2) (integer) 6380

      3) "4090eed9ab448a81f2a34876c72cf3c092bca628"

   4) 1) "192.168.163.132"

      2) (integer) 6384

      3) "dc24cf9561486e996bcbf94c9305b6913c5019c5"

2) 1) (integer) 1365

   2) (integer) 5460

   3) 1) "192.168.163.132"

      2) (integer) 6379

      3) "2961efa8d94d5c4b99b6bf3090aaf902ead26205"

   4) 1) "192.168.163.132"

      2) (integer) 6382

      3) "730fdba543e309eb7fc6499fd6a85aba776c2a1d"

3) 1) (integer) 12288

   2) (integer) 16383

   3) 1) "192.168.163.132"

      2) (integer) 6383

      3) "e83a4b07559418cb696057b54091ab78ac3a08fe"

   4) 1) "192.168.163.132"

      2) (integer) 6381

      3) "c6c2e226290f42aab575d3aff93deabd8f00c650"

4) 1) (integer) 0

   2) (integer) 1364

   3) 1) "192.168.163.132"

      2) (integer) 6385

      3) "bca5cab0605a285c209179bc15043d7f117741fc"

   4) 1) "192.168.163.132"

      2) (integer) 6386

      3) "205577fb4066418570448dd36fcf54442c5c905d"

5) 1) (integer) 5461

   2) (integer) 6826

   3) 1) "192.168.163.132"

      2) (integer) 6385

      3) "bca5cab0605a285c209179bc15043d7f117741fc"

   4) 1) "192.168.163.132"

      2) (integer) 6386

      3) "205577fb4066418570448dd36fcf54442c5c905d"

6) 1) (integer) 10923

   2) (integer) 12287

   3) 1) "192.168.163.132"

      2) (integer) 6385

      3) "bca5cab0605a285c209179bc15043d7f117741fc"

   4) 1) "192.168.163.132"

      2) (integer) 6386

      3) "205577fb4066418570448dd36fcf54442c5c905d"

说明:

1 起始槽

2 结束槽

3 主节点信息

4 从节点信息

4:查看某个key的槽位

cluster keyslot

> cluster keyslot 9223372036398075807

(integer) 14923

说明

查看 9223372036398075807 key 所在那个槽位

5:查看槽位下的key数量

cluster countkeysinslot

> cluster countkeysinslot 14923

(integer) 5

说明

查看14923槽位的key数量

6:查看指定槽位、指定数量的key

cluster getkeysinslot

> cluster getkeysinslot 14923 3

1) "9223372035094375807"

2) "9223372035620575807"

3) "9223372035706475807"

说明

查看槽位14923的3个key

7:查看指定主的从节点

cluster replicas/slaves

> cluster replicas/slaves 2961efa8d94d5c4b99b6bf3090aaf902ead26205

1) "730fdba543e309eb7fc6499fd6a85aba776c2a1d 192.168.163.132:6382@16382 slave 2961efa8d94d5c4b99b6bf3090aaf902ead26205 0 1581932627000 25 connected"

说明

查看node-id为2961efa8d94d5c4b99b6bf3090aaf902ead26205的从信息

8:从接收命令的 Redis 群集节点的已知节点集合中删除通过节点 ID 指定的节点。既从接收命令的节点的节点表中删除指定的节点。

CLUSTER FORGET

192.168.163.132:6379> cluster forget e83a4b07559418cb696057b54091ab78ac3a08fe

OK

说明:

该命令不能简单地从收到该命令的节点的内部节点表中删除该节点,而是通过实现禁止列表,持续1分钟。期间在处理来自其他节点的心跳包中收到的Gossip协议时,

会跳过禁止列表中的所有节点ID。这样就有一个60秒的窗口来通知群集中的所有节点要删除一个节点。因为当给定节点是群集的一部分时,参与群集的所有其他

节点都知道它,为了将节点从群集中彻底删除,必须将 CLUSTER FORGET 命令发送到所有其余节点(主和从)。

9:手动故障转移(主从切换)

cluster failover

> cluster failover

OK

说明:

该命令只能在从上执行,进行主从切换

10:重置节点

cluster reset HARD

> cluster reset

OK

说明:

必须在没有key的主节点执行,从节点有没有key都可以执行。soft是清空其他节点的信息,但不修改自己的id,hard还会修改自己的id,不传该参数则使用soft方式。

如果用soft方式在从上执行,则会清理掉从上的所有key,以及集群信息,变成一个主。(Tip:如果想让该节点加入到集群,可以在其他节点中的一个节点执行forget,

让其他节点通过gossip来实现发现该节点,此时该节点变为无槽位分配的主节点。)

11:添加、分配槽位

cluster addslots

> cluster addslots 0

OK

说明

在指定节点分配槽位,需要把16384个槽位分配完毕才能使用集群

12:删除指定的槽位

cluster delslots

> cluster delslots 1000 2000

OK

说明

删除1000、2000的槽位,注意如果槽上有数据,删除槽的话,数据不可访问,但不丢失,可以重新添加槽进行访问。

13:添加、发现节点

cluster meet

> cluster meet 192.168.163.132 6380

OK

说明

添加指定节点(IP Port)到集群

14:保存集群的配置文件

cluster saveconfig

> cluster saveconfig

OK

说明

手动执行命令保存保存集群的配置文件

15:设置节点纪元,只有在节点加入集群前才能设置,修改cluster_my_epoch、cluster_current_epoch 值

cluster set-config-epoch

> cluster set-config-epoch 11

OK

说明

Redis集群配置epoch冲突算法会解决启动时新的节点配置成相同配置epoch的问题,但是这个处理过程很慢。为了保证不管发生任何情况,都不会有两个节点拥有相同的配置epoch。

因此,当一个新群集创建的时候,使用命令CONFIG SET-CONFIG-EPOCH为每个一个节点分派渐进的配置epoch,然后再加入群集

16:列出某个节点的故障报告数量

cluster count-failure-reports

> cluster count-failure-reports d401769f9a7b981b16fb27b5b8beecd9ee05f5c1

(integer) 0

17:移除节点所有槽位

cluster flushslots

> cluster flushslots

OK

说明

移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。前提是该节点没有数据,必须为空节点。

18:添加从节点,需要在从节点上执行

cluster replicate

> cluster replicate 97cd26d8506d3b5cd743581bc9dbc8ebf54e1b18

OK

说明

给指定的主节点添加从

19:迁移槽位

cluster setslot

CLUSTER setslot <slot> node <node_id> 将槽指派给指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派。 

CLUSTER setslot <slot> migrating <node_id> 将本节点的槽迁移到指定的节点中。 

CLUSTER setslot <slot> importing <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。 

CLUSTER setslot <slot> stable 取消对槽 slot 的导入(import)或者迁移(migrate)。

迁移示例:

迁移示例

① 查看各个节点&槽位分布信息

192.168.163.132:6379> cluster nodes

d401769f9a7b981b16fb27b5b8beecd9ee05f5c1 192.168.163.132:6381@16381 master - 0 1582013073869 0 connected 10923-16383

2d76972e12d954f2d08305f89790515ebef8e32c 192.168.163.132:6380@16380 master - 0 1582013072000 1 connected 1000 2000 5462-10922

97cd26d8506d3b5cd743581bc9dbc8ebf54e1b18 192.168.163.132:6379@16379 myself,master - 0 1582013072000 3 connected 0-999 1001-1999 2001-5461

1b6abbd86b5db73c0ec94fce479054553dc2cfb4 192.168.163.132:6382@16382 slave 97cd26d8506d3b5cd743581bc9dbc8ebf54e1b18 0 1582013072862 11 connected

② 查看需要迁移槽位的key

192.168.163.132:6379> cluster keyslot b

(integer) 3300

192.168.163.132:6379> cluster getkeysinslot 3300 10

1) "b"

说明:迁移3300槽到其他主节点,在迁移槽之前,需要把该槽位的keys全部迁移。

③ 到目标节点执行导入操作

192.168.163.132:6380> cluster setslot 3300 importing 97cd26d8506d3b5cd743581bc9dbc8ebf54e1b18

OK

192.168.163.132:6380> cluster nodes

...

2d76972e12d954f2d08305f89790515ebef8e32c 192.168.163.132:6380@16380 myself,master - 0 1582013668000 1 connected 1000 2000 5462-10922 [3300-<-97cd26d8506d3b5cd743581bc9dbc8ebf54e1b18]

...

④ 到源节点进行迁移操作

192.168.163.132:6379> cluster setslot 3300 migrating 2d76972e12d954f2d08305f89790515ebef8e32c

OK

192.168.163.132:6379> cluster nodes

...

97cd26d8506d3b5cd743581bc9dbc8ebf54e1b18 192.168.163.132:6379@16379 myself,master - 0 1582013709000 3 connected 0-999 1001-1999 2001-5461 [3300->-2d76972e12d954f2d08305f89790515ebef8e32c]

...

说明:此时处于迁移状态节点的槽都正常访问

⑤ 在源节点迁移槽位中的key到目标节点:MIGRATE host port key destination-db timeout [COPY] [REPLACE]

192.168.163.132:6379> migrate 192.168.163.132 6380 b 0 5000 replace auth cc

OK

说明:如果该槽位下有多个keys,重复执行⑤的操作,知道该槽位的keys被迁移完毕。

注意:此时处于迁移状态的key不可用(不能读和写),如果是大key,则应用可能出现超时,该slot下的其他key不受影响。即该slot上的key被迁移,只在迁移状态的key受影响,其他key正常(在目标节点执行restore指令到原节点删除key之间,原节点的主线程会处于阻塞状态,直到key被成功删除)。

⑥ 最后设置槽位到指定节点,命令将会广播给集群其他节点,也可以在多个节点设置

192.168.163.132:6379> CLUSTER SETSLOT 3300 node 2d76972e12d954f2d08305f89790515ebef8e32c

OK

192.168.163.132:6380> CLUSTER SETSLOT 3300 node 2d76972e12d954f2d08305f89790515ebef8e32c

OK

192.168.163.132:6381> CLUSTER SETSLOT 3300 node 2d76972e12d954f2d08305f89790515ebef8e32c

OK

⑦ 验证是否迁移成功:

192.168.163.132:6379> cluster nodes

...

2d76972e12d954f2d08305f89790515ebef8e32c 192.168.163.132:6380@16380 master - 0 1582014517000 12 connected 1000 2000 3300 5462-10922

...

⑧ 验证数据是否迁移:

192.168.163.132:6379> get b

-> Redirected to slot [3300] located at 192.168.163.132:6380

"bbbb"

Logo

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

更多推荐