3

Docker高级篇:实战Redis集群!从3主3从变为4主4从

 1 year ago
source link: https://blog.51cto.com/kaigejava/5957883
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

通过前面两篇,我们学会了三主三从的Redis集群搭建及主从容错切换迁移,随着业务增加,可能会有主从扩容的,所以,本文我们来实战主从扩容

PS本系列:《Docker学习系列》教程已经发布的内容,凯哥会在文末加上。

在之前3主3从的架构,随着业务的增加,流量扛不住了。需要由3主3从变为4主4从。架构变化图如下:

Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker

回顾下之前3主3从槽位分配如下:

Docker高级篇:实战Redis集群!从3主3从变为4主4从_redis_02

那么现在变成了4主4从了。多出来的这一对主从,槽位怎么分配ne?

1:新建6387、6388两个节点+新建后启动+查看是否8个节点

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-nod-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387
docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-nod-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_03

通过docker ps 可以查看8个redis都成功

2:进入6387容器实例内部

docker exec -it redis-node-7 /bin/bash

3:将新增的6387节点(空槽号)作为master节点加入原集群中

将新机器加入集群的命令公式:

redis-cli -cluster add-node ip:6387 ip:6381

命令说明:

add-node:加入节点

ip:自己宿主机的实际ip

6387:将要作为master的新增节点端口

6381:就是原来集群节点的领路人。相当于是6387拜了6381的码头了。从而找到了组织加入了集群

比如我们需要将6387这台redis作为master加入集群中。

根据命令公式,替换成我们自己的宿主机ip:192.168.50.128

所以本次将6387加入集群的命令为:

redis-cli --cluster add-node 192.168.50.128:6387 192.168.50.128:6381
Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_04

new node added correctly.

4:检查集群情况第1次

使用cluster chk命令。

进入之前任意三个master容器后执行命令:

redis-cli --cluster check 192.168.50.128:6381
Docker高级篇:实战Redis集群!从3主3从变为4主4从_Docker_05

我们可以看到,6387已经作为master加入集群了。其对应的从节点是0个。

Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_06

5:重新分配槽号

新命令,公式:

redis-cli --cluster reshard ip:端口

参数说明:

--cluster reshard :重新hash分配槽位

ip:宿主机的ip(对应本次实战凯哥宿主机的ip:192.168.50.128)

端口:集群的领路人的端口(对应本次实战凯哥宿主机的ip:6381)

实战命令:

redis-cli --cluster reshard 192.168.50.128:6381
Docker高级篇:实战Redis集群!从3主3从变为4主4从_Docker_07

Docker高级篇:实战Redis集群!从3主3从变为4主4从_redis_08

我们可以看到,询问我们打算怎么重新分配?

我们来算下:16384/4=4096.所以,我们就写4096

输入4096后,又询问了:

Docker高级篇:实战Redis集群!从3主3从变为4主4从_redis_09

这4096准备分配给node id呢?

请注意,这里只能分配给新加入的节点的id.也就是本次案例中6387对应的node节点

Docker高级篇:实战Redis集群!从3主3从变为4主4从_redis_10

接着又询问了

Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_11

我们输入all.

因为16384/master机器数量=4096

输入yes后,所有槽位就会重新分配了。

重新分配需要等待一段时间。耐心等待。

6:检查集群情况第2次

redis-cli --cluster check 192.168.50.128:6381
Docker高级篇:实战Redis集群!从3主3从变为4主4从_Docker_12

我们可以发现了6387的槽位不是连续的。而是由三段槽位组成的。

所以,我们可以知道,新加入的master节点,是从原来所有节点都给出一些槽位,最终使得新master节点达到预设的槽位的。

为什么要这么设计呢?

为什么6387是3个新区间呢?原来三个主节点还是连续的?

因为重新分配的成本太高了。所以前3个主节点各自匀出一部分,从6381/6382/6383三个旧节点分别匀出1364个槽位给了新加入master节点6387了。

7:为主节点6387分配从节点6388

redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点id

命令参数说明:

ip:宿主机的ip。对应本次案例就是:192.168.50.128

新slave端口:对应本次案例就是6388

新master端口:对应本次案例就是6387

新主机节点id:可以通过cluster check 命令查看

所以本次案例的命令为:

redis-cli --cluster add-node 192.168.50.128:6388 192.168.50.128:6387 --cluster-slave --cluster-master-id 2b0751e59cdf0ae0f74be7ab74981ab41e37e372
Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_13

8:检查集群情况第3次

redis-cli --cluster check 192.168.50.128:6381
Docker高级篇:实战Redis集群!从3主3从变为4主4从_redis_14

所以最终4主4从的架构及槽号如下图:

Docker高级篇:实战Redis集群!从3主3从变为4主4从_docker_15

如操作有问题欢迎去 我的 ​ ​个人博客(www.kaigejava.com)​​​留言或者  ​ ​ 微信公众号(凯哥Java)​​留言交流哦。

本系列教程直通车

直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:

 ​【图文教程】Windows11下安装Docker Desktop​

 ​【填坑】在windows系统下安装Docker Desktop后迁移镜像位置​

 ​【Docker学习系列】Docker学习1-docker安装​

 ​【Docker学习系列】Docker学习2-docker设置镜像加速器​

 ​【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?​

 ​【Docker学习系列】Docker学习2-常用命令之启动命令和镜像命令​

 ​【Docker学习系列】Docker学习系列3:常用命令之容器命令​

 ​【Docker学习系列】Docker学习4-常用命令之重要的容器命令​

 ​【Docker教程系列】Docker学习5-Docker镜像理解​

 ​【Docker教程系列】Docker学习6-Docker镜像commit操作案例​

 ​【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云​

 ​【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?​

 ​「Docker学习系列教程」9-Docker容器数据卷介绍​

 ​「Docker学习系列教程」10-Docker容器数据卷案例​

 ​Docker学习11-Docker常规方式安装软件​

 ​「Docker学习系列教程」基础篇小总结及高级篇预告​

 ​docker高级篇1-dockeran安装mysql主从复制​

 ​docker高级篇2-分布式存储之三种算法​

 ​docker高级篇第二章-分布式存储之实战案例:3主3从redis集群扩容配置​

 ​docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例​

 ​【Docker学习教程系列汇总】笔记及遇到问题解决文章​


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK