启动6台redis容器实例
docker run -d --name redis-node-1 --net host --privileged -v /usr/local/zl/tools/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged -v /usr/local/zl/tools/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged -v /usr/local/zl/tools/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged -v /usr/local/zl/tools/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384
docker run -d --name redis-node-5 --net host --privileged -v /usr/local/zl/tools/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385
docker run -d --name redis-node-6 --net host --privileged -v /usr/local/zl/tools/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
执行docker ps查看启动的容器实例
![](https://img.haomeiwen.com/i25486202/7dfa4855664c2db1.png)
配置
进入一台reids容器,执行命令:docker exec -it redis-node-1 /bin/bash,然后执行创建redis集群的命令
![](https://img.haomeiwen.com/i25486202/0cee0ad1f5ac75bd.png)
测试
登录redis-node-1,执行docker exec -it redis-node-1 /bin/bash进入容器,执行登录命令redis-cli -p 6381 -c 记得加上-c,以集群方式连接,不加-c表示以单机形式连接,有时设置key会报错
![](https://img.haomeiwen.com/i25486202/275ccf33f96cf6c2.png)
扩容
启动两台redis容器作为扩容的一主一从
docker run -d --name redis-node-7 --net host --privileged -v /usr/local/zl/tools/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged -v /usr/local/zl/tools/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
添加节点进去集群
登录redis-node-1容器,执行命令redis-cli --cluster check 127.0.0.1:6381查看集群slot的分布情况,3主3从
![](https://img.haomeiwen.com/i25486202/a1803371cdc6f407.png)
执行命令docker exec -it redis-node-7 /bin/bash , 进入redis-node-7,执行命令redis-cli --cluster add-node 127.0.0.1:6387 127.0.0.1:6381
![](https://img.haomeiwen.com/i25486202/9a6d7e49ba64aa9b.png)
执行执行redis-cli --cluster check 127.0.0.1:6381查看集群的状态,发现master数量变为4,但是6387暂时还没有分配槽位
![](https://img.haomeiwen.com/i25486202/35a1542885ed62f9.png)
重新分配槽位
执行命令redis-cli --cluster reshard 127.0.01:6381,执行后,会提示需要移动slot的个数,16384/4=4096,平均分的话一个节点4096个槽位,然后在输入移动到的节点的ID也就是node-7的节点ID:e72e099426014951e94dff62aa680f6a51ab6a31,来源节点输入:all
![](https://img.haomeiwen.com/i25486202/9638de072ee5e30b.png)
再次执行命令:redis-cli --cluster check 127.0.0.1:6381检查集群slots的分配情况
![](https://img.haomeiwen.com/i25486202/5ac9056300684fbc.png)
给6387添加从节点
执行命令redis-cli --cluster add-node 127.0.01:6388 127.0.0.1:6387 --cluster-slave --cluster-master-id e72e099426014951e94dff62aa680f6a51ab6a31
e72e099426014951e94dff62aa680f6a51ab6a31为6387主节点的ID
再次检查集群状态
执行命令redis-cli --cluster check 127.0.0.1:6381,发现变成了4主4从
![](https://img.haomeiwen.com/i25486202/5077e227101b32f7.png)
缩容
方案:先删除6388,分配6387上的slot到其他节点,删除6387节点
查看6387以及6388节点
执行命令redis-cli --cluster check 127.0.0.1:6381,6387节点ID:e72e099426014951e94dff62aa680f6a51ab6a31 6388节点ID: 19bc4cf11ce605c747dff70b83ee4c2547a838df
![](https://img.haomeiwen.com/i25486202/c4c7d5a98fcdb860.png)
删除6388
redis-cli --cluster del-node 127.0.0.1:6388 19bc4cf11ce605c747dff70b83ee4c2547a838df
查看集群还剩下4主3从
![](https://img.haomeiwen.com/i25486202/74ac09e1903e739b.png)
重新分配槽号
redis-cli --cluster reshard 127.0.0.1:6381
需要分配4096个槽位,这里使用6381这个节点来接收所有的槽位,节点ID为e9ade431c79ef38649c160f8f3ee301c4c7e5883
source node:来源表示6387节点ID的槽点,e72e099426014951e94dff62aa680f6a51ab6a31
![](https://img.haomeiwen.com/i25486202/9cc33b5ce1fab44a.png)
重新检查集群
reids-cli --cluster check 127.0.01:6381
发现4个M 3个S,但是发现6387上的slot变为了0
![](https://img.haomeiwen.com/i25486202/4f0f8d41f644bd77.png)
删除6387节点
redis-cli --cluster del-node 127.0.0.1:6381 e72e099426014951e94dff62aa680f6a51ab6a31
删除后变为了3主3从
![](https://img.haomeiwen.com/i25486202/df7ae1d2af597a8e.png)
网友评论