docker-compose 编排方式安装redis cluster集群 【redis 集群的扩容】(二)

本文详细介绍Redis集群扩容步骤,包括新节点准备、节点加入、槽与数据迁移及主从配置。通过具体实例展示如何使用redis-trib.rb工具进行槽迁移,确保数据均匀分布,提升集群性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

扩容操作
扩容是分布式存储最常见的需求,Redis 集群扩容操作可分为如下步骤:
1)准备新节点。
2)将节点加入集群。
3)迁移槽和数据。
4)配置迁入节点主从关系

1.在宿主机上执行docker命令创建容器
查看网卡:
在这里插入图片描述
创建redis-master4:

[root@localhost docker-compose-redis-trib]# docker run -itd --name redis-master4 -v $PWD/config:/config --net dockercomposeredistrib_redis-master -e PORT=6397 -p 6397:6397 -p 16379:16379 --ip 172.50.0.5 rediscluster

创建redis-slave4:

[root@localhost docker-compose-redis-trib]# docker run -itd --name redis-slave4 -v $PWD/config:/config --net dockercomposeredistrib_redis-slave -e PORT=6398 -p 6398:6398 -p 16398:16398 --ip 172.30.0.5 rediscluster

容器:
在这里插入图片描述

2.执行将节点加入集群:

demo: 
通过redis-trib.rb add-node  127.0.0.1:6397  127.0.0.1:6391 实现节点添加
							要加入的节点  	集群中的节点

启动redis-master4,redis-slave4节点:

#启动redis-master4节点
[root@localhost docker-compose-redis-trib]#  docker exec -it redis-master4 bash
[root@755c6dd3bd4b /]# redis.sh &
[1] 60

#启动redis-slave4节点
[root@localhost docker-compose-redis-trib]# docker exec -it redis-slave4 bash
[root@67413d44fcff /]# redis.sh &
[1] 25

执行节点加入集群

#将6397加入集群
[root@localhost docker-compose-redis-trib]# docker exec -it redis-master4 bash
[root@755c6dd3bd4b /]#  redis-trib.rb add-node 192.168.11.43:6397 192.168.11.43:63
bash: /usr/bin/redis-trib.rb: Permission denied
[root@755c6dd3bd4b /]#  chmod +x /usr/bin/redis-trib.rb 
[root@755c6dd3bd4b /]#  redis-trib.rb add-node 192.168.11.43:6397 192.168.11.43:6391

在这里插入图片描述

#将6398加入节点
[root@755c6dd3bd4b /]#  redis-trib.rb add-node 192.168.11.43:6398 192.168.11.43:6391

在这里插入图片描述

查看节点是否加入集群:
在这里插入图片描述

3.迁移槽和数据(集群共有16384个槽)
加入集群后需要为新节点迁移槽和相关数据,槽在迁移过程中集群可以正常提供读写服务,迁移过程是集群扩容最核心的环节,下面详细讲解。

槽是 Redis 集群管理数据的基本单位,首先需要为新节点制定槽的迁移计划,确定原有节点的哪些槽需要迁移到新节点。
迁移计划需要确保每个节点负责相似数量的槽,从而保证各节点的数据均匀,比如之前是三个节点,现在是四个节点,把节点槽分布在四个节点上。

数据迁移过程是逐个槽进行的
流程说明:
1)对目标节点发送导入命令,让目标节点准备导入槽的数据。
2)对源节点发送导出命令,让源节点准备迁出槽的数据。
3)源节点循环执行迁移命令,将槽跟数据迁移到目标节点。

目标节点:需要迁入槽的节点
源节点:迁出槽的节点

方式1:

1>输入迁移操作的集群
[root@755c6dd3bd4b /]#  redis-trib.rb reshard 192.168.11.43:6391


2>需要分配多少个槽(16384/4=4096)
How many slots do you want to move (from 1 to 16384)? 4096

3>输入某个节点的节点 ID 作为目标节点,目标节点只能指定一个:[目标节点指的是需要添加槽的节点]
What is the receiving node ID? e166acc99589ace1cbcdc8893cdf865bd26d07d0(此处是6397的节点id)


4>输入需要分配出槽的节点ID(/var/lib/redis查看配置文件或用于唯一标识集群内一个节点ID)
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:751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 (6391节点)
Source node #2:e21cf577d264a5e2be0bef074dd2f41a86825f78 (6392节点)
Source node #3:cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 (6393节点)

5>输入yes
Do you want to proceed with the proposed reshard plan (yes/no)?  yes

在这里插入图片描述
查看集群情况:

[root@755c6dd3bd4b /]# redis-cli -p 6397
127.0.0.1:6397> cluster nodes
751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 172.50.0.1:6391@16391 master - 0 1576057148806 1 connected 1365-5460
cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 172.50.0.1:6393@16393 master - 0 1576057148000 3 connected 12288-16383
6bc2bf1dcdafc966635db3ca6126544891aa41d6 172.50.0.1:6398@16398 master - 0 1576057146000 7 connected
50408afe0aafca3c87293b5f264ffdadcf0ee982 172.50.0.1:6394@16394 slave 751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898 0 1576057149813 1 connected
e166acc99589ace1cbcdc8893cdf865bd26d07d0 172.50.0.5:6397@16397 myself,master - 0 1576057144000 8 connected 0-1364 5461-6826 10923-12287
c7d63f558a88155d2698cff06a8a9de69c8d7100 172.50.0.1:6395@16395 slave e21cf577d264a5e2be0bef074dd2f41a86825f78 0 1576057146000 2 connected
6e2b71c31d92e127bed497ee2afd8a426fabf3c8 172.50.0.1:6396@16396 slave cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 0 1576057147794 3 connected
e21cf577d264a5e2be0bef074dd2f41a86825f78 172.50.0.1:6392@16392 master - 0 1576057146000 2 connected 6827-10922

截图:
在这里插入图片描述
方式2:一步执行
redis-trib.rb reshard host:port --from --to --slots --yes --timeout --pipeline
参数说明:
·host:port:必传参数,集群内任意节点地址,用来获取整个集群信息。
·–from:制定源节点的 id,如果有多个源节点,使用逗号分隔,如果是all源节点变为集群内所有主节点,在迁移过程中提示用户输入。
·–to:需要迁移的目标节点的id,目标节点只能填写一个,在迁移过程中提示用户输入。
·–slots:需要迁移槽的总数量,在迁移过程中提示用户输入。
·–yes:当打印出 reshard 执行计划时,是否需要用户输入yes确认后再执行 reshard。
·–timeout:控制每次 migrate 操作的超时时间,默认为60000毫秒。
·–pipeline:控制每次批量迁移键的数量,默认为10。

[root@755c6dd3bd4b /]# redis-trib.rb reshard 192.168.11.43:6391 --from 751fb8bd165a5e3ad1f01ef8f1c31de2f6caf898,e21cf577d264a5e2be0bef074dd2f41a86825f78,cc2c0d640a51aff85dcc49e9d74a6d9201d42cb4 --to e166acc99589ace1cbcdc8893cdf865bd26d07d0 --yes
(该命令就会执行操的迁移)

4.迁移好槽之后需要分配从节点
扩容之初我们把6397、6398节点加入到集群,节点6397迁移了部分槽和数据作为主节点,
但相比其他主节点目前还没有从节点,因此该节点不具备故障转移的能力。

这时需要把节点6398作为6397的从节点,从而保证整个集群的高可用。使用 cluster replicate{masterNodeId}命令为主节点添加对应从节点

进入redis-slave4节点(将192.168.11.43:6398设置成从节点):

[root@localhost docker-compose-redis-trib]# docker exec -it redis-slave4 bash
[root@67413d44fcff /]# redis-cli -p 6398
127.0.0.1:6398> cluster replicate e166acc99589ace1cbcdc8893cdf865bd26d07d0 (6397的节点id)
OK

查看集群节点(此时6398变成从节点):
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值