redis Cluster 命令 redis-trib.rb 命令

如果 移除添加-节点,建议用 redis-trib.rb 命令,用 cluster 命令 有时会造成 集群建配置 不一致

CLUSTER info:打印集群的信息。
CLUSTER nodes:列出集群当前已知的所有节点(node)的相关信息。
CLUSTER meet  :将ip和port所指定的节点添加到集群当中。
CLUSTER addslots  [slot ...]:将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER delslots  [slot ...]:移除一个或多个槽对当前节点的指派。
CLUSTER slots:列出槽位、节点信息。
CLUSTER slaves :列出指定节点下面的从节点信息。
CLUSTER replicate :将当前节点设置为指定节点的从节点。
CLUSTER saveconfig:手动执行命令保存保存集群的配置文件,集群默认在配置修改的时候会自动保存配置文件。
CLUSTER keyslot :列出key被放置在哪个槽上。
CLUSTER flushslots:移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER countkeysinslot :返回槽目前包含的键值对数量。
CLUSTER getkeysinslot  :返回count个槽中的键。

CLUSTER setslot  node  将槽指派给指定的节点,如果槽已经指派给另一个节点,那么先让另一个节点删除该槽,然后再进行指派。  
CLUSTER setslot  migrating  将本节点的槽迁移到指定的节点中。  
CLUSTER setslot  importing  从 node_id 指定的节点中导入槽 slot 到本节点。  
CLUSTER setslot  stable 取消对槽 slot 的导入(import)或者迁移(migrate)。 

CLUSTER failover:手动进行故障转移。
CLUSTER forget :从集群中移除指定的节点,这样就无法完成握手,过期时为60s,60s后两节点又会继续完成握手。
CLUSTER reset [HARD|SOFT]:重置集群信息,soft是清空其他节点的信息,但不修改自己的id,hard还会修改自己的id,不传该参数则使用soft方式。

CLUSTER count-failure-reports :列出某个节点的故障报告的长度。
CLUSTER SET-CONFIG-EPOCH:设置节点epoch,只有在节点加入集群前才能设置。





redis-trib.rb用法(不带任何参数执行redis-trib.rb即显示用法):

$ ./redis-trib.rb

Usage: redis-trib   

 

  rebalance       host:port

                  --auto-weights

                  --timeout 

                  --pipeline 

                  --use-empty-masters

                  --weight 

                  --threshold 

                  --simulate

  add-node        new_host:new_port existing_host:existing_port

                  --slave

                  --master-id 

  reshard         host:port

                  --timeout 

                  --pipeline 

                  --yes

                  --slots 

                  --to 

                  --from 

  check           host:port

  set-timeout     host:port milliseconds

  call            host:port command arg arg .. arg

  fix             host:port

                  --timeout 

  info            host:port

  create          host1:port1 ... hostN:portN

                  --replicas 

  import          host:port

                  --replace

                  --copy

                  --from 

  help            (show this help)

  del-node        host:port node_id

 

For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.

可以看到redis-trib.rb具有以下功能:
1、create:创建集群
2、check:检查集群
3、info:查看集群信息
4、fix:修复集群
5、reshard:在线迁移slot
6、rebalance:平衡集群节点slot数量
7、add-node:将新节点加入集群
8、del-node:从集群中删除节点
9、set-timeout:设置集群节点间心跳连接的超时时间
10、call:在集群全部节点上执行命令
11、import:将外部redis数据导入集群
下面从redis-trib.rb使用和源码的角度详细介绍redis-trib.rb的每个功能。

redis-trib.rb主要有两个类:ClusterNode和RedisTrib。ClusterNode保存了每个节点的信息,RedisTrib则是redis-trib.rb各个功能的实现。

ClusterNode对象

先分析ClusterNode源码。ClusterNode有下面几个成员变量(ruby的类成员变量是以@开头的):

@r:执行redis命令的客户端对象。
@info:保存了该节点的详细信息,包括cluster nodes命令中自己这行的信息和cluster info的信息。
@dirty:节点信息是否需要更新,如果为true,我们需要把内存的节点更新信息到节点上。
@friends:保存了集群其他节点的info信息。其信息为通过cluster nodes命令获得的其他节点信息。
ClusterNode有下面一些成员方法:

initialize:ClusterNode的构造方法,需要传入节点的地址信息。
friends:返回@friends对象。
slots:返回该节点负责的slots信息。
has_flag?:判断节点info信息的的flags中是否有给定的flag。
to_s:类似java的toString方法,返回节点的地址信息。
connect:连接redis节点。
assert_cluster:判断节点开启了集群配置。
assert_empty:确定节点目前没有跟任何其他节点握手,同时自己的db数据为空。
load_info:通过cluster info和cluster nodes导入节点信息。
add_slots:给节点增加slot,该操作只是在内存中修改,并把dirty设置成true,等待flush_node_config将内存中的数据同步在节点执行。
set_as_replica:slave设置复制的master地址。dirty设置成true。
flush_node_config:将内存的数据修改同步在集群节点中执行。
info_string:简单的info信息。
get_config_signature:用来验证集群节点见的cluster nodes信息是否一致。该方法返回节点的签名信息。
info:返回@info对象,包含详细的info信息。
is_dirty?:判断@dirty。
r:返回执行redis命令的客户端对象。
有了ClusterNode对象,在处理集群操作的时候,就获得了集群的信息,可以进行集群相关操作。在此先简单介绍下redis-trib.rb脚本的使用,以create为例:

create host1:port1 ... hostN:portN
       --replicas
host1:port1 ... hostN:portN表示子参数,这个必须在可选参数之后,--replicas 是可选参数,带的表示后面必须填写一个参数,像--slave这样,后面就不带参数,掌握了这个基本规则,就能从help命令中获得redis-trib.rb的使用方法。

其他命令大都需要传递host:port,这是redis-trib.rb为了连接集群,需要选择集群中的一个节点,然后通过该节点获得整个集群的信息。


你可能感兴趣的:(redis Cluster 命令 redis-trib.rb 命令)