◆ 文章目录
1. Cluster集群扩容概念
2. 在新节点部署redis cluster
3. 使用工具将redis-4加入集群
3.1. 安装ruby环境
3.2. 将redis-4加入集群
4.将槽位重新分配
4.1. 所有节点分出槽位给新节点
4.2. 迁移指定节点的槽位给新节点
4.3. 查看集群信息及状态
5.配置四主四从交叉复制
5.1. 配置四主四从交叉复制
5.2. 查看集群信息及状态
◆ 1. Cluster集群扩容概念
当redis数据量日渐增长,当内存不够用的时候,这时候就需要集群扩容了,cluster集群扩容可以增加内存也可以增加节点,因为redis数据都是存在内存中
redis cluster增加节点进行扩容步骤:
1.在新的服务器上部署redis cluster
2.使用工具将新部署的节点加到集群中
3.使用工具将集群槽位重新分配
4.将主从复制关系调整成交叉模式
扩容原理:原来的节点算好要拿出多少的槽位给新加的节点,新加的节点准备导入的槽位,准备的前提条件就是加入集群,一切准备就绪后,主节点将划分出来的槽位分配给新节点,然后将相关槽位的数据迁移到新的节点
4个节点的redis cluster,每个节点的槽位时16384/4,一个节点4096个槽位
扩容前后的架构图对比图
新增节点后,主从复制就变成了四主四从,只需要变动192.168.81.230的从库关系即可,192.168.81.230节点从库复制192.168.81.240节点的主库,192.168.81.240从库复制192.168.81.210的主库
环境准备
◆ 2. 在新节点部署redis cluster
◆ 3. 使用工具将redis-4加入集群
在原来集群的任意一台机器安装了ruby环境即可操作
3.1.安装ruby环境
3.2.将redis-4加入集群
需要将redis-4的6390和6391端口都加入到集群,可以使用工具进行添加
命令:./redis-trib.rb add-node 新节点:端口 现有集群:端口
代码语言:javascript复制[root@redis-1 ~]# cd /data/redis_cluster/redis-3.2.9/src/
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./
redis-trib.rb add-node 192.168.81.240:6390 192.168.81.210:6380
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./
redis-trib.rb add-node 192.168.81.240:6391 192.168.81.210:6380
查看集群信息,已经有8个节点
代码语言:javascript复制[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes
ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 192.168.81.220:6380
master - 0 1612424799243 2 connected 5461-10922
9b7641253ea66073d865accdd4460d2877f9ff5d 192.168.81.220:6381
master - 0 1612424801262 8 connected 10923-16383
b19722a1d3d482a2c6eaaec15e5e72018600389f 192.168.81.240:6391
master - 0 1612424797227 0 connected
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2 192.168.81.240:6390
master - 0 1612424796216 9 connected
bdd20b03b573b2def6a9ee5053a75867709fc908 192.168.81.210:6381
slave ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 0 1612424796721 4
connected
812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 192.168.81.230:6380
slave 9b7641253ea66073d865accdd4460d2877f9ff5d 0 1612424800253 8
connected
904a0109976cae38e5a3059fd70ce2727a0ed8fb 192.168.81.230:6381
slave b61b8d0421b94b9de7267dda6c6f401a42622047 0 1612424798232 6
connected
b61b8d0421b94b9de7267dda6c6f401a42622047 192.168.81.210:6380
myself,master - 0 0 1 connected 0-5460
◆ 4. 将槽位重新分配
当新节点加入集群后,需要重新分配槽位,否则整个集群是无法使用的
命令格式./redis-trib.rb reshard 集群任意一个主库的ip:端口
分配的时候可以选择all,直接将所有节点分出一部分槽位迁移给新节点
也可以指定某个节点迁移出一部分槽位给新节点
4.1.所有节点分出槽位给新节点
代码语言:javascript复制[root@redis-1 ~]# cd /data/redis_cluster/redis-3.2.9/src
[root@redis-1 /data/redis_cluster/redis-3.2.9/src]# ./redis-trib.rb
reshard 192.168.81.210:6380
How many slots do you want to move (from 1 to 16384)? 4096
//需要迁移的槽位数量,也就是要拿出多少个槽位给新节点,我们输入4096,
因为16384除4刚好是4096
What is the receiving node ID?
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2
//迁移给目标节点的ID号,也就是新节点的6390ID号,6390作为新节点的主库
Please enter all the source node IDs.
Type 'all' to use all the nodes as source nodes for the hash
slots.
Type 'done' once you entered all the source nodes IDs.
Source node #1:all
//迁移方式:all将所有主节点分出一部分槽位给新节点
Do you want to proceed with the proposed reshard plan (yes/no)?
yes //是否继续分配
设置要迁移的槽位数量,填写4096
填写要迁移到目标节点的ID号,也就是要迁移给谁,这里我们要迁移给新加的节点,我们要让新机器的6390节点成为主库,因此就填写6390节点的ID号
设置要从哪个节点上迁移槽位,可以一台一台的迁移,也可以填写all,all的意思是从所有节点上一共取出4096个槽位分给新机器,如果使用all迁移,会把所有主节点迁移出一部分槽位给新节点,执行完all直接就退出工具
我们使用all自动将所有主节点进行迁移,直接输入all即可自动迁移,一般都使用all
提示我们是否继续分配,我们选择yes
迁移完成自动退出程序
4.2. 迁移指定节点的槽位给新节点
前面步骤一致,只需要在source node选择指定节点即可
填写要迁移的主节点ID,填写完主机节点ID后,输入done,回车之后开始迁移数据
提示我们是否继续,我们输入yes
开始数据迁移
4.3. 查看集群信息及状态
当6390分配完槽位后,可以看下集群信息是否分配成功
可以看到6390上有3段槽位号,说明是从三个节点上分出来的,正好也验证了之前说的一句话,槽位顺序不一定要存在,只要槽位数量够就可以
再次使用reshard命令即可看到都是4096个槽位
查看集群状态
◆ 5. 配置四主四从交叉复制
目前是5个主节点3个从节点,显然是不合理的,我们要手动配置一些交叉复制实现四主四从
只需要操作192.168.81.230的6381端口和192.168.81.240的6391端口即可
192.168.81.230的6381端口作为192.168.81.240的6390端口的从库
192.168.81.240的6391作为192.168.81.210的6380端口的从库
再配置与新节点交叉复制的时候,建议先操作192.168.81.230,这样192.168.81.210的主库就没有需要传输rdb文件到从库了,也可以减轻主库的压力,如果先让192.168.81.240配置交叉,这样一来192.168.81.210的主库就有2份复制了,主库就需要一次传输2份rdb文件,压力也就大了
注意:先做192.168.81.230的交叉在做192.168.81.240的交叉
5.1. 配置四主四从交叉复制
代码语言:javascript复制1.将master主库的所有ID获取下来
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes
| grep 'master' | awk '{print $1,$2}'
ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 192.168.81.220:6380
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2 192.168.81.240:6390
812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 192.168.81.230:6380
b61b8d0421b94b9de7267dda6c6f401a42622047 192.168.81.210:6380
2.建议在记事本里准备好命令
redis-3同步redis-4
192.168.81.230:6381> CLUSTER REPLICATE
6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2
redis-4同步redis-3
192.168.81.240:6391> CLUSTER REPLICATE
b61b8d0421b94b9de7267dda6c6f401a42622047
5.2. 查看集群信息及状态
代码语言:javascript复制[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodes
[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster info
cluster_state:ok
cluster_slots_assigned:16384
cluster_slots_ok:16384
cluster_slots_pfail:0
cluster_slots_fail:0
cluster_known_nodes:8
cluster_size:4
cluster_current_epoch:11
cluster_my_epoch:1
cluster_stats_messages_sent:69698
cluster_stats_messages_received:69627
[root@redis-1 ~]#
已经是三主三从了,并且集群状态也是ok
来源:
https://blog.csdn.net/weixin_44953658/article/details/121329856
“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com