接上篇文章,以下介绍redis cluster的常用操作:set-timeout 节点间心跳超时时间、call 、import、reshard、rebalance、add-node、del-node。
5.8.7.set-timeout设置集群节点间心跳连接的超时时间
set-timeout用来设置集群节点间心跳连接的超时时间,单位是毫秒,不得小于100毫秒,因为100毫秒对于心跳时间来说太短了。该命令修改是节点配置参数cluster-node-timeout,默认是15000毫秒。通过该命令,可以给每个节点设置超时时间,设置的方式使用config set命令动态设置,然后执行config rewrite命令将配置持久化保存到硬盘。以下是示例:
[root@cache01 src]# redis-cli --cluster set-timeout 192.168.75.187:7001 30000
5.8.8.call在集群全部节点上执行命令
call命令可以用来在集群的全部节点执行相同的命令。call命令也是需要通过集群的一个节点地址,连上整个集群,然后在集群的每个节点执行该命令。
[root@cache01 src]# redis-cli --cluster call 192.168.75.187:7001 get name
运行效果如下:
5.8.9.import将外部redis数据导入集群
import命令可以把外部的redis节点数据导入集群。如下示例:
[root@cache01 src]# redis-cli --cluster import 192.168.75.187:7005 --cluster-from 192.168.75.187:7002
上面的命令是把 192.168.75.187:7002上的数据导入到 192.168.75.187:7005这个节点所在的集群
导入的流程如下:
1、通过load_cluster_info_from_node方法加载集群信息,check_cluster方法检查集群是否健康;
2、连接外部redis节点,如果外部节点开启了cluster_enabled,则提示错误;
3、通过scan命令遍历外部节点,一次获取1000条数据;
4、遍历这些key,计算出key对应的slot;
5、执行migrate命令,源节点是外部节点,目的节点是集群slot对应的节点,如果设置了–copy参数,则传递copy参数,如果设置了–replace,则传递replace参数;
6、不停执行scan命令,直到遍历完全部的key;
7、至此完成整个迁移流程。
这中间如果出现异常,程序就会停止。没使用--copy模式,则可以重新执行import命令,使用--copy的话,最好清空新的集群再导入一次。
import命令更适合离线的把外部redis数据导入,在线导入的话最好使用更专业的导入工具,以slave的方式连接redis节点去同步节点数据应该是更好的方式。
5.8.9. 注意事项:集群创建时 replicas 参数指定情况
使用 --replicas 1 参数时,如果节点数量少于六个,会报如下错误:
*** ERROR: Invalid configuration for cluster creation.
*** Redis Cluster requires at least 3 master nodes.
*** This is not possible with 5 nodes and 1 replicas per node.
*** At least 6 nodes are required.
使用 --replicas 1 参数时,如果节点数量 大于六个,且为单数时。
这样会造成某个master拥有两个salve
5.8.9.reshard在线迁移slot
reshard命令可以在线把集群的一些slot从集群原来slot负责节点迁移到新的节点,利用reshard可以完成集群的在线横向扩容和缩容。
reshard的参数很多,下面来一一解释一番:
reshard host:port
–cluster-from
–cluster-to
–cluster-slots
–cluster-yes
–cluster-timeout
–cluster-pipeline
–cluster-replace
命令 | 说明 |
---|---|
host:port | 这个是必传参数,用来从一个节点获取整个集群信息,相当于获取集群信息的入口。 |
–cluster-from | 需要从哪些源节点上迁移slot,可从多个源节点完成迁移,以逗号隔开,传递的是节点的node id,还可以直接传递–cluster-from all,这样源节点就是集群的所有节点,不传递该参数的话,则会在迁移过程中提示用户输入。 |
–cluster-to | slot需要迁移的目的节点的node id,目的节点只能填写一个,不传递该参数的话,则会在迁移过程中提示用户输入。 |
–cluster-slots | 需要迁移的slot数量,不传递该参数的话,则会在迁移过程中提示用户输入。 |
–cluster-yes | 设置该参数,可以在打印执行reshard计划的时候,提示用户输入yes确认后再执行reshard。 |
–timeout | 设置migrate命令的超时时间。 |
–cluster-pipeline | 定义cluster getkeysinslot命令一次取出的key数量,不传的话使用默认值为10。 |
–cluster-replace |
迁移的流程如下:
1、通过load_cluster_info_from_node方法装载集群信息。
2、执行check_cluster方法检查集群是否健康。只有健康的集群才能进行迁移。
3、获取需要迁移的slot数量,用户没传递–cluster-slots参数,则提示用户手动输入。
4、获取迁移的目的节点,用户没传递–cluster-to参数,则提示用户手动输入。此处会检查目的节点必须为master节点。
5、获取迁移的源节点,用户没传递–cluster-from参数,则提示用户手动输入。此处会检查源节点必须为master节点。–c