在redis-5中redis-trib.rb的功能被集成到了redis-cli中,大大简化了redis的集群部署,加快了进群部署的速度,也方便后期维护与扩容。
以下简要介绍一下redis-cli在集群中的操作:
环境:Ubuntu 18.04.2 LTS
redis版本:redis-5.0.5
集群架构:3master+3slave(后期添加1master+1slave)
创建集群:
1、新建所需目录,创建配置文件,启动6个redis实例进程(配置参数尽量保持一致)。在这里原始集群端口号为6379-6384,监听在127.0.0.1上。添加节点监听为127.0.0.1:6385(master),127.0.0.1:6386(slave)
2、创建集群:
命令 :redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
--cluster-replicas 表示有一个主有几个slave
3、扩容:
(1)查看每个集群节点的node ID和身份
进入任意集群master节点:redis-cli -p 6379
查看节点ID:cluster nodes
注意:以上我是在测试环境中,没有使用身份验证,在生产环境中,必须添加requirepass参数。
(2)添加master节点
redis-cli --cluster add-node 127.0.0.1:6385 127.0.0.1:6379
这里是将节点加入了集群中,但是并没有分配slot,所以这个节点并没有真正的开始分担集群工作。
(3)分配slot
redis-cli --cluster reshard 127.0.0.1:6379 --cluster-from 2846540d8284538096f111a8ce7cf01c50199237,e0a9c3e60eeb951a154d003b9b28bbdc0be67d5b,692dec0ccd6bdf68ef5d97f145ecfa6d6bca6132 --cluster-to 46f0b68b3f605b3369d3843a89a2b4a164ed21e8 --cluster-slots 1024
--cluster-from:表示slot目前所在的节点的node ID,多个ID用逗号分隔
--cluster-to:表示需要新分配节点的node ID(貌似每次只能分配一个)
--cluster-slots:分配的slot数量
(4)添加slave节点
redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6385 --cluster-slave --cluster-master-id 46f0b68b3f605b3369d3843a89a2b4a164ed21e8
add-node: 后面的分别跟着新加入的slave和slave对应的master
cluster-slave:表示加入的是slave节点
--cluster-master-id:表示slave对应的master的node ID
4、收缩集群
下线节点127.0.0.1:6385(master)/127.0.0.1:6386(slave)
(1)首先删除master对应的slave
redis-cli --cluster del-node 127.0.0.1:6386 530cf27337c1141ed12268f55ba06c15ca8494fc
del-node后面跟着slave节点的 ip:port 和node ID
(2)清空master的slot
redis-cli --cluster reshard 127.0.0.1:6385 --cluster-from 46f0b68b3f605b3369d3843a89a2b4a164ed21e8 --cluster-to 2846540d8284538096f111a8ce7cf01c50199237 --cluster-slots 1024 --cluster-yes
reshard子命令前面已经介绍过了,这里需要注意的一点是,由于我们的集群一共有四个主节点,而每次reshard只能写一个目的节点,因此以上命令需要执行三次(--cluster-to对应不同的目的节点)。
--cluster-yes:不回显需要迁移的slot,直接迁移。
(3)下线(删除)节点
redis-cli --cluster del-node 127.0.0.1:6385 46f0b68b3f605b3369d3843a89a2b4a164ed21e8
至此就是redis cluster 简单的操作过程