文章目录

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 新节点:端口 现有集群:端口

[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个节点

[root@redis-1 ~]# redis-cli -h 192.168.81.210 -p 6380 cluster nodesce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 192.168.81.220:6380master - 0 1612424799243 2 connected 5461-109229b7641253ea66073d865accdd4460d2877f9ff5d 192.168.81.220:6381master - 0 1612424801262 8 connected 10923-16383b19722a1d3d482a2c6eaaec15e5e72018600389f 192.168.81.240:6391master - 0 1612424797227 0 connected6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2 192.168.81.240:6390master - 0 1612424796216 9 connectedbdd20b03b573b2def6a9ee5053a75867709fc908 192.168.81.210:6381slave ce75dacf45d3ad4f852b7fb4d359a295b8a2bcdd 0 1612424796721 4connected812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 192.168.81.230:6380slave 9b7641253ea66073d865accdd4460d2877f9ff5d 0 1612424800253 8connected904a0109976cae38e5a3059fd70ce2727a0ed8fb 192.168.81.230:6381slave b61b8d0421b94b9de7267dda6c6f401a42622047 0 1612424798232 6connectedb61b8d0421b94b9de7267dda6c6f401a42622047 192.168.81.210:6380myself,master - 0 0 1 connected 0-5460

4. 将槽位重新分配

当新节点加入集群后,需要重新分配槽位,否则整个集群是无法使用的

命令格式./redis-trib.rb reshard 集群任意一个主库的ip:端口

分配的时候可以选择all,直接将所有节点分出一部分槽位迁移给新节点

也可以指定某个节点迁移出一部分槽位给新节点

4.1.所有节点分出槽位给新节点

[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.rbreshard 192.168.81.210:6380How 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 hashslots.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. 配置四主四从交叉复制

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:63806b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2 192.168.81.240:6390812ae8ccf55d8994f1f9d30a20f6cff42fb24b4a 192.168.81.230:6380b61b8d0421b94b9de7267dda6c6f401a42622047 192.168.81.210:6380
2.建议在记事本里准备好命令redis-3同步redis-4192.168.81.230:6381> CLUSTER REPLICATE6b6ca5d58187ecbf0bff15d71a5789f4aa78cfa2
redis-4同步redis-3192.168.81.240:6391> CLUSTER REPLICATEb61b8d0421b94b9de7267dda6c6f401a42622047

5.2. 查看集群信息及状态

[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 infocluster_state:okcluster_slots_assigned:16384cluster_slots_ok:16384cluster_slots_pfail:0cluster_slots_fail:0cluster_known_nodes:8cluster_size:4cluster_current_epoch:11cluster_my_epoch:1cluster_stats_messages_sent:69698cluster_stats_messages_received:69627[root@redis-1 ~]#

已经是三主三从了,并且集群状态也是ok

抗住千万流量的大型分布式系统架构设计

如何画出一张优秀的架构图(老鸟必备)

架构杂谈

了解新兴架构模式:微应用架构

DDD兴起的原因以及与微服务的关系

免责声明:

本公众号部分分享的资料来自网络收集和整理,所有文字和图片版权归属于原作者所有,且仅代表作者个人观点,与本公众号无关,文章仅供读者学习交流使用,并请自行核实相关内容,如文章内容涉及侵权,请联系后台管理员删除。