有道无术,术尚可求,有术无道,止于术。
本系列Redis 版本 7.2.5
源码地址:https://gitee.com/pearl-organization/study-redis-demo
文章目录
- 1. 动态扩容
- 1.1 安装、启动
- 1.2 加入新节点
- 1.3 分配哈希槽
- 1.4 加入从节点
- 2. 缩容
- 2.1 删除从节点
- 2.2 迁移哈希槽
- 3.3 删除主节点
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
查看节点信息,可以看到主节点也被移除了: