添加新的节点的基本过程就是添加一个空的节点然后移动一些数据给它。
有两种情况:
1、创建新的节点7007和7008
并开启服务
cd /usr/local/rediscluster/
mkdir 7007 7008
cp 7001/redis.conf 7007/
cp 7001/redis.conf 7008/
cd 7007
vim redis.conf
redis-server redis.conf
cd ../7008
vim redis.conf
redis-server redis.conf
ps ax | grep 700*
2、将新节点7007添加到集群,并查看
redis-cli --cluster add-node 127.0.0.1:7007 127.0.0.1:7001
redis-cli -c -p 7007
127.0.0.1:7007> cluster nodes
3、为新节点7007添加从节点7008
redis-cli --cluster add-node 127.0.0.1:7008 127.0.0.1:7007--cluster-slave --cluster-master-id a3140761a8745b9cc814f5b6a0347466befbff8a
- 注意:新节点现在已经连接上了集群, 成为集群的一份子, 并且可以对客户端的命令请求进行转向了, 但是和其他主节点相比, 新节点还有两点区别:
新节点没有包含任何数据, 因为它没有包含任何哈希槽.
尽管新节点没有包含任何哈希槽, 但它仍然是一个主节点, 所以在集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中。
二、集群重新分片新节点已经加入集群中,但是槽值为0,集群需要重新分片。使用 redis-trib 程序, 将集群中的某些哈希桶移动到新节点里面, 新节点就会成为真正的主节点
1、手动分配哈希槽
redis-cli --cluster reshard 127.0.0.1:7007
选完哈希槽个数后,又会问我们需要覆盖的节点id是什么,这个id就是我们新创建的节点id。然后让我们输入源节点,如果这里我们输入all的话,他会随机的从所有的节点中抽取300个作为新节点的哈希槽。
查看7007分配的哈希槽,可以看到7007分配到了指定的哈希槽
redis-cli --cluster info 127.0.0.1:7001
注意:因为哈希槽的数量是固定的,所以新的节点指定所分配到的哈希槽是其它主节点提供的,但是手动分配的哈希槽可能在使用时会出现问题,因此不建议使用该方式进行分配2、自动平均分配哈希槽
redis-cli --cluster rebalance --cluster-threshold 1 --cluster-use-empty-masters 127.0.0.1:7001
查看7007节点否平均分配到哈希槽
redis-cli --cluster check 127.0.0.1:7001
且数据仍同步:
redis-cli -c -p 7007
127.0.0.1:7007> get name
127.0.0.1:7007> info
三、移除节点
1、移除从Slave节点
redis-cli --cluster del-node 127.0.0.1:7008 a37d25e2d3a96b9e6d31c4d81e7f1ff9a34cd945
2、除Master节点
删除master节点之前首先要使用reshard
移除master的全部slot
,然后再删除当前节点(目前只能把被删除master的slot迁移到一个节点上)
此时7007节点哈希槽已经全部转移到7001节点上
3、删除7007节点
redis-cli --cluster del-node 127.0.0.1:7007 a3140761a8745b9cc814f5b6a0347466befbff8a
查看7007节点是否删除:
主节点7007删除成功