1. 创建redis集群
注:更多redis集群创建,请参阅
Redis Cluster集群部署搭建
2. 检查集群状态
~~~~~~~~~~~~~~~~~~~~~~~~~~~添加节点~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3. 添加新节点redis-trib.rb add-node 新增节点名 原集群节点名
4. 查看当前集群状态,9000是一个空的Master
5. 为9000分配slot, redis的solt是固定的,就16384个,只能从其他节点获取slot,然后分配到9000
6. 可以看到,9000已经分配到的slot是0-98 5461-5561 10923-11021
~~~~~~~~~~~~~~~~~~~~~~~~~~~将9000变为slave~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7. 希望将9000变成7000的slave,但是由于有slot,执行失败,需要先转移slot
8. 删除节点也是不可以的,总之,只要上面有slot。redis是不会让你删除的,而且需要人工介入,rebalance这些slot之后才行
9.重新分配9000的slot到7000上
10. 查询,可以看到9000已经没有slot了
11. 再次执行命令,将9000变成7000的slave,成功
12. 查看状态,9000已经成为7000的slave
13. 删除节点9000,成功删除
14. 连接9000,发现已经shutdown,无法连接
15. 查看集群状态,9000已经不见了
~~~~~~~~~~~~~~~~~~~~~~~~~~~再次启动9000,发现不同~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16. 再次启动9000,发现一个有意思的事情。上面检查7000,集群已经没有9000了
17. 但是查看9000,确仍然能看到整个集群的信息。
说明,在删除节点的过程,只是在原有集群中删除9000的信息。但是9000自身的信息并没有被删除,依然保留全部的信息,只是9000实例被关闭而已。
18. 而9000的全部信息,是记录在自身目录的nodes.conf中
19. 到7001等其他节点中查看,nodes.conf已经没有9000的信息
~~~~~~~~~~~~~~~~~~~~~~~~~~~再次添加9000,以及9001~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
20. 将9000和9001再次加入集群,开始下面的折腾。
注意:需要将9000和9001下的redis.conf外的文件清除,重启。然后才能再次加入集群。不然会遇到错误:
21. 加入集群
22. 现在是两个空的Master节点
23. 重分配100个slot到9000上,其实redis很聪明的,我连接的是9001,但是在分配的时候,它会问你,receiving node是谁,Source node 是谁。
24. 查看分配情况,redis还是很聪明灵活的。
25. 将9001添加为9000的slave节点 redis-cli -p <slave IP:port> cluster nodes <Master ID 号>
经过各种折腾,redis添加,删除,重分配slot等操作,都测试完了。
中间有很多命令输出部门,视乎有点重复。但是为了更好的阅读理解,观察每一步操作的变化。后面查阅也更容易一些。 毕竟,年纪大了,记性不好。好多自己写过的blog,回头翻阅的时候,发现某些步骤,不是很好理解了。虽然我的blog,都是基于自己测试的结果,但是依然会忘记。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对七叶笔记的支持。