`

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

阅读更多

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

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

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

dd0f4dfc861a62cd60e3d25204c8b989.png

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

c28b3cb76879bd4f763257e220978828.png

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

实战步骤

 

插播一条

 

下面这个公众号是凯哥开发的,福利号:外卖、买菜、电商领Q的

67db93da54df097b6017fa8666079592.png

怎么领券?

f02b1847f3c94a44c2d6f0bca121443d.png

 

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

2b5c356d74e7737955550c0609b4a56c.png

通过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

19ef910d136d98b8b8136b110fd66a88.png

new node added correctly.

4:检查集群情况第1次

使用cluster chk命令。

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

redis-cli --cluster check 192.168.50.128:6381

ed82709e205be9fc5f933ac24f0fd078.png

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

5397b796087d6f4e09df18326a4848c4.png

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

870c70c8879b5e79138ffe1e3312a043.png

d8bcac9822800a3d0ad8d430c35e6a2e.png

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

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

输入4096后,又询问了:

145e8430166659da83dad3f6d43ff3b2.png

这4096准备分配给node id呢?

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

2da5cc73e78ae60c8abba3ded5541a8b.png

接着又询问了

c6a875582c5f51cd4eb632fe05233b11.png

我们输入all.

因为16384/master机器数量=4096

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

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

6:检查集群情况第2次

命令:

redis-cli --cluster check 192.168.50.128:6381

fd7bd5c0b47d23ac5ceee5e2f8261454.png

我们可以发现了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

dad0380ad886a3ee61e387bd9bfd9030.png

8:检查集群情况第3次

redis-cli --cluster check 192.168.50.128:6381

22f84a92fdc26a445e310b0b5ea7c58a.png

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

b62a240e5141357003f98f6dc96eb348.png

结束语

如操作有问题欢迎去 我的 个人博客(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学习教程系列汇总】笔记及遇到问题解决文章

 

分享到:
评论

相关推荐

    docker-compose一键搭建Redis集群

    1.先运行 createFile.py 输入宿主机IP地址,输入redis密码 2.按照控制台输出执行docker-compose up -d 启动命令 3.启动成功后执行加入集群命令即可

    docker-compose redis主从哨兵 redis多节点高可用 redis集群高可用

    3. **Redis集群高可用**:Redis集群通过分片(Sharding)和槽区(Slot)分配,将数据分散到多个节点上,这样即使部分节点故障,其他节点仍能提供服务。Docker Compose配置中,我们需要定义多个集群节点,每个节点都...

    docker 实现redis集群搭建

    * 高扩展性:Redis 集群可以水平扩展,以应对高并发和大规模数据存储。 * 高性能:Redis 集群可以提供高性能,提高数据读写速度。 六、结语 使用 Docker 实现 Redis 集群搭建可以提供高可用性、高扩展性和高性能的...

    redis集群 三主三从模式

    总的来说,"redis集群 三主三从模式"提供了一种健壮的分布式数据库解决方案,利用Docker和docker-compose简化了部署流程。熟悉并掌握这种配置方法,对于保障高可用性和数据安全性至关重要。在实际应用中,还应考虑...

    docker、docker-compose 安装redis集群 (一台虚拟机上安装的伪集群,学习使用)

    docker、docker-compose 一键安装redis集群 (一台虚拟机上安装的伪集群,学习使用,可以修改文件配置相关参数,非原创,亲测可用) 第一步 /usr/local/下依次建docker、redis目录“/usr/local/docker/redis” 第二步 ...

    vagrant 安装docker docker 安装mysql 、redis、kafka

    vagrant 安装docker docker 安装mysql 、redis、kafka、 自启动

    docker 镜像redis:7.0.15

    docker 镜像 redis:7.0.15

    bitnami-docker-redis:Bitnami Redis Docker映像

    bitnami-docker-redis:Bitnami Redis Docker映像

    docker compose部署redis集群

    docker compose部署redis集群,三主三从,并且外网可以访问,另外还可以从gitee上获取此文件,gitee上除了Redis之外还会陆续提供其他docker部署的文件,https://gitee.com/korov/Docker.git

    docker容器实战:原理、架构与应用pdf

    docker容器实战:原理、架构与应用pdf,高清版,docker入门的良好书籍,供大家参考。只做了压缩,没有压缩密码。

    docker redis离线镜像redis.tar

    docker上的redis离线镜像redis.tar, 用于在docker上离线安装redis

    redis-cluster:带有Docker的Sentinel的HA Redis集群

    Redis集群 带Docker Compose的Redis集群 使用Docker Compose设置带有哨兵的Redis集群。 该项目的灵感来自项目 先决条件 在测试环境中安装和 ... - master:redis-master sentinel: build: sentinel env

    一键shell脚本搭建docker redis 集群(cluster)

    为了新手小伙伴发愁集群创建难,特意写了一个shell脚本。自己技术也很菜,但是我坚信也会有跟我一样菜的小伙伴。。。。哈哈哈 不多说直接上脚本 希望有大神更加优化一下,优化后的版本可以分享下。哇 等着你大神,...

    docker redis 3.2 配置文件

    在这个场景中,我们有一个针对 Redis 3.2 版本的自定义配置文件 `redis.conf`,该文件是为在 Docker 环境下调试 Redis 实例而设计的。下面将详细解释配置文件中的关键设置和它们在 Docker 容器中的作用。 1. **端口...

    docker 运行redis-trib 带密码创建redis cluster集群配置

    docker 运行redis-trib 带密码创建redis cluster集群配置,没有密码的请自己去下载一个redis-trib.rb替换

    docker 部署Redis集群节点.pdf

    如果您需要部署一个Redis集群,Docker可以帮助您更轻松地完成此任务。以下是关于使用Docker部署Redis集群节点的一些资源: - [Redis Docker官方镜像文档](https://hub.docker.com/_/redis):官方文档,包含了Redis ...

    讲义-使用docker搭建redis集群.pdf

    本课程将指导学员如何使用Docker搭建Redis集群,以提高数据处理的效率和可靠性。 首先,课程介绍了前端系统提供mock服务的概念。Mock服务是指模拟的后端服务,它可以模拟数据返回给前端系统进行测试。课程中提到...

    redis离线docker镜像

    docker redis镜像 用于在docker中导入redis的镜像 执行docker load -i redis.tar 即可完成导入操作

    docker-redis-cluster:一个 Redis 集群 Docker 镜像

    docker-redis-cluster Redis 集群 Docker 映像。 此图像用于测试环境。 请勿将其用于生产。用法启动集群。 它将启动 6 个 Redis 服务器,监听7000~7005端口和一个主管以确保所有服务器都启动。 在所有服务器启动后,...

    redis.zip docker swarm redis集群所需Docker以及docker-compose

    docker-compose方式部署服务 需要解决的问题: 1、文件共享的问题 Machine主机跟docker虚拟主机之间通讯 挂载目录,只能被挂载一次,不能两台远程主机共享一个挂载目录 2、网络共享问题 端口开放 2377 集群管理端口...

Global site tag (gtag.js) - Google Analytics