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端口上
[aaa@qq.com redis]# redis-server ./redis-cluster-7007/7007.conf
将新增master节点添加到redis cluster中
[aaa@qq.com redis]# redis-cli --cluster add-node 192.168.75.187:7007 192.168.75.187:7003
运行日志如下:
通过日志,我们看到,新的master节点已经添加进集群。
检测redis cluster集群:
[aaa@qq.com 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上。
执行后再一次检查:
[aaa@qq.com 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集群安装》
执行以下命令:
[aaa@qq.com 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上
[aaa@qq.com 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节点。
[aaa@qq.com redis]# redis-cli --cluster del-node 192.168.75.187:7001 62cb7cf009d812b0854ce6fe54ea863805f3028d
执行效果如下:
当清空了一个master的hash slot时,redis cluster就会自动将其slave挂载到其他master上去,这个时候就只要删除掉master就可以了,如下: