redis cluster集群架构详解(二十)- redis cluster实验:master水平扩容-支撑海量数据处理

5.12. redis cluster实验:master水平扩容-支撑海量数据处理

redis cluster通过master水平扩容来支撑更高的读写吞吐+海量数据。

​ redis cluster模式下,不建议做物理的读写分离,我们建议通过master的水平扩容,来横向扩展读写吞吐量,并支撑更多的海量数据。

​ 6G内存的redis,在fork类操作的时候很耗时,会导致请求延时的问题,如果扩容到5台master,能支撑总缓存数据量可达到30G,如果继续扩展到100台,能支撑缓存就达到600G,继续扩展,就能达到1T+,这样就能真正支撑海量数据的处理。

5.12.1. 加入新master

加入新master

​ 以上实验,我们都是使用同一台机器,上面分别启动了端口号为7001、7002、7003、7004、7005、7006的redis,并将这6个redis 创建redis 集群。

接下来还是在这台机器上,创建端口号为7007的redis。
  • 将原先的redis配置文件7006.conf文件拷贝一份,修改文件名为7007.conf,并将之前配置的slaveof注释掉(如果之前配置了slaveof,就注释掉)
  • 将 7007.conf 放到/etc/redis/redis-cluster-7007目录下。
  • 将7007.conf文件按照以下进行配置,端口port和绑定(bind)的IP修改为对应的端口和ip,详见配置请参考《redis集群安装》

手动启动此新的redis实例,在7007端口上

[root@cache01 redis]# redis-server ./redis-cluster-7007/7007.conf 

将新增master节点添加到redis cluster中

[root@cache01 redis]# redis-cli --cluster add-node 192.168.75.187:7007 192.168.75.187:7003

运行日志如下:

在这里插入图片描述

通过日志,我们看到,新的master节点已经添加进集群。

检测redis cluster集群:

[root@cache01 redis]# redis-cli --cluster check 192.168.75.187:7001

运行日志如下:

在这里插入图片描述

通过检测,发现了新的master节点 192.168.75.187:7007 ,但是此节点slot为0 。

连接到新的redis实例上,cluster nodes,确认自己是否加入了集群,作为了一个新的master。

在这里插入图片描述

5.12.2. reshard数据到新节点

reshard一些数据到新节点

resharding的意思就是把一部分hash slot从一些node上迁移到另外一些node上

redis-cli --cluster reshard 192.168.75.187:7001 --cluster-from all --cluster-to 62cb7cf009d812b0854ce6fe54ea863805f3028d --cluster-slots 1000

要把之前3个master上的slot,拿出1000个slot放到新节点192.168.75.187:7007上。

执行后再一次检查:

[root@cache01 redis]# redis-cli --cluster check 192.168.75.187:7001

在这里插入图片描述

7007上的slot槽:(332-0) + 1 +(5794-5461) + 1 + (11255-10923) + 1 = 1000;

slot已经从7002、7003、7004三个节点共迁移了1000个slot到7007上。

5.12.3.添加新的node作为slave

添加node作为slave

在此服务器上再添加一个节点7008,作为7007的一个slave,添加节点方法请见《redis集群安装》

执行以下命令:

[root@cache01 redis]# redis-cli --cluster add-node 192.168.75.187:7008 192.168.75.187:7001 --cluster-slave --cluster-master-id 62cb7cf009d812b0854ce6fe54ea863805f3028d

在这里插入图片描述

查看集群

在这里插入图片描述

7008已经成功的作为7007的slave添加。

5.12.4.删除node

删除node

先用resharding将数据都移除到其他节点,确保node为空之后,才能执行remove操作,我们删除7007为例。

(1)移除7007的slot到7003上

[root@cache01 redis]# redis-cli --cluster reshard 192.168.75.187:7001 --cluster-from 62cb7cf009d812b0854ce6fe54ea863805f3028d --cluster-to bf579d975d99f9be5f8e01c2aab6b7930fea8e52 --cluster-slots 1000

再次查看集群,发现7007的slot已经为0,如下:

在这里插入图片描述

(2)移除7007这个master节点。

[root@cache01 redis]# redis-cli --cluster del-node 192.168.75.187:7001 62cb7cf009d812b0854ce6fe54ea863805f3028d

执行效果如下:

在这里插入图片描述

当清空了一个master的hash slot时,redis cluster就会自动将其slave挂载到其他master上去,这个时候就只要删除掉master就可以了,如下:

在这里插入图片描述

发布了155 篇原创文章 · 获赞 23 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/makyan/article/details/104831720
今日推荐