redis集群扩容和缩容_Redis集群增加节点和删除节点

本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之间进行移动,通过实际操作来整理一下集群的伸缩。

上篇文章中搭建好的集群为三主三从,端口号为7000、7001、7002、7003、7004、7005。

查看集群启动情况:ps -ef | grep redis

cc9d8ca01c0257643985bb4a5971fc85.png

查看集群的slots分配情况以及节点之间的主从关系:

首先登陆节点7000:redis-cli -p 7000 -h 192.168.182.132 -c   //注意不要丢了-c

cluster nodes 查看集群节点信息

caac68a5570de75cff6b1edb562628bf.png

在本例中我们先增加两个节点:主节点7006和从节点7007,并给7006分配4096个slots,设置7007为7006的从节点,然后再将这两个节点从集群中删除,一定要先删除主节点,再删除从节点,要不然故障转移会生效。

一、集群的扩容

1.准备新的节点

在集群目录redis_cluster目录下增加redis7006和redis7007目录

mkdir  redis7006

mkdir redis7007

增加完成后的目录

de513706b3b16467c1f26aa8b4856851.png

复制端口7000的redis.conf配置文件到redis7006和redis7007目录下,并修改配置文件中的端口为对应目录的端口号。

例如redis7006下的redis.conf文件的内容为:

port 7006bind192.168.182.132 //本机IPdaemonize yes //设置为后台运行

pidfile /var/run/redis-7006.pid

cluster-enabled yes //开启集群

cluster-config-file node-7006.conf

cluster-node-timeout15000appendonly yes

准备完成后,启动两个新的redis节点:

redis-server redis7006/redis.conf

redis-server redis7007/redis.conf

ps -ef | grep redis //查看新的redis节点是否启动成功

8aac4c23d865299a8efb8d705383d1a1.png

启动以后登录7006查看节点情况:

redis-cli -p 7006 -h 192.168.182.132-c

cluster nodes

cc728d09946681409d786350a6cd10e7.png

2.添加主节点

(1)向集群中添加节点7006,注意一定要保证节点里面没有添加过任何数据,不然添加会报错。

cd /usr/local/redis/redis/src

./redis-trib.rb add-node192.168.182.132:7006 192.168.182.132:7000//第一次节点为新增的节点 第二个节点为集群中的节点

添加成功:

2dda52112f4acc959acc8351e4a7aaf0.png

可以看到使用addnode命令来添加节点,第一个参数是新节点的地址,第二个参数是任意一个已经存在的节点的IP和端口. 我们可以看到新的节点已经添加到集群中:

a234e2bbca3c7314265ebc7c29667421.png

新节点7006现在已经连接上了集群, 成为集群的一份子, 并且可以对客户端的命令请求进行转向了, 但是和其他主节点相比, 新节点还有两点区别:

新节点没有包含任何数据, 因为它没有包含任何哈希槽.

尽管新节点没有包含任何哈希槽, 但它仍然是一个主节点, 所以在集群需要将某个从节点升级为新的主节点时, 这个新节点不会被选中。

接下来, 只要使用 redis-trib 程序, 将集群中的某些哈希桶移动到新节点里面, 新节点就会成为真正的主节点了。

(2)为主节点7006分配虚拟槽

cd /usr/local/redis/redis/src

./redis-trib.rb reshard192.168.182.132:7001 //可以为任意的节点 在此登录的7001只是作为客户端去访问的

4ba72e888f638d7fabfc9bc91a92ee4c.png执行后:

因为我们增加7006为主节点后,一共存在四个主节点,为了平均分配我们需要给7006分配16384除以4等于4096个节点,所以我们输入4096,按enter继续:

04fd48b76dadb660842b49bb92f8256a.png

输入7006的节点ID,按enter继续:

1c715b441924da974c221f93f0745c87.png

从哪些主节点抽取槽到新节点中:all为所有主节点,done:指定节点,在这里我们输入all,按enter继续:

6de9dccf45c10fea8ecc2af488dadb67.png

输入yes后按enter开始给7006分配虚拟槽,分配完成后:

e507849e6cb842dc8fea2221b831a32b.png

登录集群查看一下集群的状态:

redis-cli -p 7000 -h 192.168.182.132-c

cluster nodes

17c923cfad70d7ab6ccf9a120f6e1435.png

至此主节点已经添加完毕了,我们的集群由三主三从变成了四主三从。

3.添加从节点7007

(1)使用add-node添加新节点

cd /usr/local/redis/redis/src

./redis-trib.rb add-node192.168.182.132:7007 192.168.182.132:7000//第一次节点为新增的节点 第二个节点为集群中的节点

加入集群成功,登录到集群中查看一下集群状态:

a8c92fe89988ea818b99e566ebbac491.png

7007还是一个Master节点,而且没有拥有自己的slot槽。那么我们接下来要让它变成从节点。

(2)将7007变为7006的 从节点

使用CLUSTER REPLICATE 命令改变一个从节点的主节点。

redis-cli -p 7007 -h 192.168.182.132cluster replicate 52d169e7011ccdf10f99c1d83f92409dcc37ab55 //后面的字符串为节点7006的节点ID

设置成功后查看一下:

b901838463818a9bdf0df82e6a9ddf14.png

集群的从节点7007添加成功。

二、集群的缩容

只要使用 del-node 命令即可:

./redis-trib del-node 127.0.0.1:7000第一个参数是任意一个节点的地址,第二个节点是你想要移除的节点地址。

使用同样的方法移除主节点,不过在移除主节点前,需要确保这个主节点是空的. 如果不是空的,需要将这个节点的数据重新分片到其他主节点上.

替代移除主节点的方法是手动执行故障恢复,被移除的主节点会作为一个从节点存在,不过这种情况下不会减少集群节点的数量,也需要重新分片数据.

1.删除从节点

删除节点用del-node命令。此命令需要制定删除节点的ip和端口,以及节点的id。

cd /usr/local/redis/redis/src

./redis-trib.rb del-node 192.168.182.132:7007 7007节点ID

删除成功后:

d4b4fe42d73d6400ce3125f5d2ebcb1f.png

删除后我们再次查看集群的节点信息,如下所示,7007从节点已经被移除掉。

f5d2a8ab844ee3994f453cf82419e6c3.png

2.删除主节点

(1)将主节点7006的slots分配到其他主节点上

cd /usr/local/redis/redis/src

./redis-trib.rb reshard192.168.182.132:7006

93e54b45d3ecb7044074efa03599723b.png

选择完这几项以后,回车继续:

1d94d0df63a720bcacab84284756d346.png

输入yes,表示接受这个计划,然后回车,完成7006节点的槽的移除。

登录集群查看当前集群情况:

f75f6990ef1d7d937f7357a79f8aafc4.png

节点7006上没有任何槽。

(2)使用del-node命令来删除7006主节点。

cd /usr/local/redis/redis/src

./redis-trib.rb del-node192.168.182.132:7006 52d169e7011ccdf10f99c1d83f92409dcc37ab55

删除成功:

18ddf48985be8e17c5196840aa0649fa.png

最后登录查看集群又恢复到了三主三从的结构了,只是从刚开始的均匀分配变成了7000端口的主节点多了4096个slots。

文章来源: www.cnblogs.com,作者:,版权归原作者所有,如需转载,请联系作者。

原文链接:https://www.cnblogs.com/hopeofthevillage/p/11535683.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值