前言:本文是承接了笔者之前写的redis集群搭建模式的基础上进行的拓展,如果是零基础的同学,请从前文开始看起~
一、redis集群的水平扩张
水平扩张就是给原本的redis集群添加新的主从节点,让更多的redis节点来分担任务,下面是具体的操作步骤:
1、启动新增的节点
新增节点的启动和前文的启动方式别无二致,使用如下指令 /usr/local/opt/redis/bin/redis-server /usr/local/etc/cluster/redis-8007.conf
启动成功后如下图:8007、8008都是新启动的两个节点,且未加入集群中
2、将游离节点加入集群
redis中提供了一个特殊的指令来添加新的节点: /usr/local/opt/redis/bin/redis-cli -a 123456 --cluster add-node 127.0.0.1:8007 127.0.0.1:8001
- -a:当前节点所配置的密码
- --cluster add-node:添加节点所用到的特殊指令
- 第一个IP:这个IP是需要加入的节点IP和端口
- 第二个IP:这个IP可以是集群中任意存活节点的IP加端口
启动成功后如下图:
此时加入的节点默认是主节点,并且没有任何槽位,也就是说无法缓存数据,如下图:
3、给新加入的节点分配槽位
给新节点分配槽位,其实就是从原有的主节点中分出一部分槽位给新加入的节点,总的槽位数量仍旧不变—16384。指令如下: /usr/local/opt/redis/bin/redis-cli -a 123456 --cluster reshard 127.0.0.1:8007
指令启动后,会有几个询问环节:
1、询问需要转移多少个槽位(600) 2、询问接收槽位的节点ID(就是新增的节点ID) 3、询问分配节点的方式(all) 这里需要注意一下,有两种分配方式:
- all:表示从现有主节点中随机抽取指定数目的槽位,比如600个槽位,可能8001主节点取100,8002主节点取200,8003主节点取300,这个数量是不确定的;
- done:这种模式的输入方式有所不同,需要先输入节点ID,然后再输入done这个关键字。它表示从该节点中取出指定数目的槽位转移给2步骤设置的接收节点。一般都是删除节点的时候用到该种模式;
4、询问是否接受执行计划(yes)
完成上述几个步骤后节点就迁移完成了,如下图: 进行到此处其实就已经完成了集群的水平扩容,不过光秃秃的一个主节点还是有点突兀,所以后面又给加上了从节点
4、给新增的主节点添加从节点
1、将游离的节点加入集群,这个同步骤2; 2、进入当前节点,将改节点挂入主节点下方,输入如下指令: cluster replicate 节点ID
加入成功后如下图
二、redis集群的缩减
缩减与扩张是完全相反的一个动作,可以看作是扩张的逆向操作,具体的步骤如下:
1、从节点的删除
由于从节点并没有槽位信息的配置,所以可以用指令直接删除 /usr/local/opt/redis/bin/redis-cli -a 123456 --cluster del-node 127.0.0.1:8008 节点ID
- -a:当前节点所设置的访问密码
- --cluster del-node:删除节点所用的特殊指令
- ip:需要删除的节点IP加端口地址
- 节点ID:需要删除的节点ID
删除成功后如下图
2、主节点的删除
主节点的删除需要区分两个步骤:
1、转移要删主节点的全部槽位数据信息(如果未转移会提示无法删除),指令如下: /usr/local/opt/redis/bin/redis-cli -a 123456 --cluster reshard 127.0.0.1:8007 该指令的步骤同 一.3,只有部分环节不同
- 询问转移数量的环节:600(删除节点所持有的槽位数量)
- 询问接收槽位的环节:选择除删除主节点外的任意主节点ID
- 询问转移方式的环节:选择done(从所删除节点转移所有槽位)
迁移完成后的结果如下:
2、完成第一步后,使用删除指令从集群中移除主节点即可,指令同从节点的删除指令: /usr/local/opt/redis/bin/redis-cli -a 123456 --cluster del-node 127.0.0.1:8007 节点ID
删除后的结果图如下:
|