自学内容网 自学内容网

Redis 7.x 系列【26】集群模式动态扩容、动态缩容

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

1. 动态扩容

Redis 集群支持动态增加节点实现扩容,提高集群容量和数据处理能力,接下来演示将之前三主三从扩容为四主四从。

1.1 安装、启动

新加节点网络访问地址如下 (一台服务器):

  • 主节点四:192.168.56.101:7000
  • 从节点四:192.168.56.101:7001

安装、修改配置、启动,这几个步骤和集群部署一样,这里就不赘述了。

1.2 加入新节点

查看节点信息(一台服务器):

[root@localhost bin]# redis-cli -a cluster123456 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
b5bde236f14f21f530a7095aaef3a98109009324 192.168.56.101:6383@16383 slave e909dc338f4c2fc7687cf4426d3b95956a90a8a8 0 1721384436435 2 connected
724c7b874dc0c37a462cd5ab59325203344f8008 192.168.56.101:6379@16379 myself,slave ce27fa445e987f75bddeeb68fc6fe440678ad1bb 0 1721384432000 7 connected
ce27fa445e987f75bddeeb68fc6fe440678ad1bb 192.168.56.101:6382@16382 master - 0 1721384434000 7 connected 0-5460
e909dc338f4c2fc7687cf4426d3b95956a90a8a8 192.168.56.101:6380@16380 master - 0 1721384435431 2 connected 5461-10922
0f1d8d6459ac4252636cb4b8e1764de9e277411c 192.168.56.101:6390@16390 slave 9f9c30c3f73106e256fdec27264fc8129e1287fd 0 1721384435000 3 connected
9f9c30c3f73106e256fdec27264fc8129e1287fd 192.168.56.101:6381@16381 master - 0 1721384435000 3 connected 10923-16383

此时,集群节点并不包含新节点信息,需要使用 add-node 将新的主节点加入:

[root@localhost bin]# redis-cli -a cluster123456 --cluster add-node 192.168.56.101:7000 192.168.56.101:6380

命令说明:

  • cluster123456 :集群节点认证密码
  • 192.168.56.101:7000:新加入的主节点
  • 192.168.56.101:6380:负责扩容处理的节点(原先集群中的任意主节点)

打印日志日下:

在这里插入图片描述
重新查看集群信息,可以看到新节点:
在这里插入图片描述

1.3 分配哈希槽

新节点此时没有分配哈希槽,需要使用 reshard 命令重新分配集群中的哈希槽:

[root@localhost bin]# redis-cli -a cluster123456  --cluster reshard 192.168.56.101:6380

首先会提示分配多少哈希槽,这里有四个主节点 16384/4=4096 ,所有输入 4096

[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096

接着输入新节点的 ID ,将分配的哈希槽给新节点(cluster nodes命令查看):

What is the receiving node ID? a95a0a529f62ff1793bf2c2cfc92ec51c96e1268

接着提示从哪些节点移出这 4096 个哈希槽,这些输入 all 表示从所有节点平摊移出:

Please enter all the source node IDs.
to use all the nodes as source nodes for the hash slots.
Type'done'
entered allthe source nodes IDs.
Source node #1:all

最后会打印一些迁移日志:

在这里插入图片描述
重新查看节点信息,可以看到新节点被分配了哈希槽:
在这里插入图片描述新节点的哈希槽,并不是连续的,分为了三个区间,直接截取了其他节点的部分哈希槽,如果是全部重新分配,需要全部迁移,这样成本高且效率很低。

1.4 加入从节点

接着使用 add-node 命令将新的从节点,加入到集群中:

[root@localhost bin]# redis-cli -a cluster123456 --cluster add-node 192.168.56.101:7001 192.168.56.101:7000 --cluster-slave --cluster-master-id a95a0a529f62ff1793bf2c2cfc92ec51c96e1268

命令说明:

  • cluster123456 :集群节点认证密码
  • 192.168.56.101:7001:新加入的从节点
  • 192.168.56.101:7000:新从节点对应的主节点
  • a95a0a529f62ff1793bf2c2cfc92ec51c96e1268:主节点 ID

打印日志如下:
在这里插入图片描述

重新查询节点信息,可以看到新的主从节点都加入成功:

在这里插入图片描述

2. 缩容

Redis 集群支持动态删除节点实现缩容,从集群中移除节点,将分配给该节点的哈希槽移动到其他现有节点上。接下来演示将上面的四主四从恢复为三主三从。

2.1 删除从节点

查看将被移除节点的信息:

[root@localhost bin]# redis-cli -a cluster123456 cluster nodes
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
a95a0a529f62ff1793bf2c2cfc92ec51c96e1268 192.168.56.101:7000@17000 master - 0 1721394340000 8 connected 0-1364 5461-6826 10923-12287
78d33242164ad02901903b195f54aaa1b0e14420 192.168.56.101:7001@17001 slave a95a0a529f62ff1793bf2c2cfc92ec51c96e1268 0 1721394340538 8 connected

首先需要删除从节点,使用 del-node 命令,输入从节点的地址、ID

[root@localhost bin]# redis-cli -a cluster123456 --cluster del-node 192.168.56.101:7001 78d33242164ad02901903b195f54aaa1b0e14420

打印日志如下:
在这里插入图片描述

查看节点信息,可以看到从节点已经被移除:

在这里插入图片描述

2.2 迁移哈希槽

删除主节点之前,需要将当前节点中的哈希槽迁移出去,这里直接将被删除节点中的 4096 个哈希槽,全部移入到 6380 节点中,使用 reshard 命令重新分配集群中的哈希槽:

[root@localhost bin]# redis-cli -a cluster123456  --cluster reshard 192.168.56.101:6380

输入4096

[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096

接着输入 6380 节点的 ID 接收哈希槽 (cluster nodes命令查看):

What is the receiving node ID? e909dc338f4c2fc7687cf4426d3b95956a90a8a8

接着提示,从哪些节点移出这 4096 个哈希槽,这里输入删除节点的 ID,输入 done ,表示该节点将被删除:

Please enter all the source node IDs.
to use all the nodes as source nodes for the hash slots.
Type'done'
entered allthe source nodes IDs.
Source node #1: e909dc338f4c2fc7687cf4426d3b95956a90a8a8
Source node #2: done

在这里插入图片描述

3.3 删除主节点

使用 del-node 命令删除主节点:

redis-cli -a cluster123456 --cluster del-node 192.168.56.101:7000 a95a0a529f62ff1793bf2c2cfc92ec51c96e1268

查看节点信息,可以看到主节点也被移除了:
在这里插入图片描述


原文地址:https://blog.csdn.net/qq_43437874/article/details/140554650

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!