Docker高级篇:实战Redis集群!从3主3从变为4主4从
通过前面两篇,我们学会了三主三从的Redis集群搭建及主从容错切换迁移,随着业务增加,可能会有主从扩容的,所以,本文我们来实战主从扩容
PS本系列:《Docker学习系列》教程已经发布的内容,凯哥会在文末加上。
在之前3主3从的架构,随着业务的增加,流量扛不住了。需要由3主3从变为4主4从。架构变化图如下:
回顾下之前3主3从槽位分配如下:
那么现在变成了4主4从了。多出来的这一对主从,槽位怎么分配ne?
实战步骤
插播一条
下面这个公众号是凯哥开发的,福利号:外卖、买菜、电商领Q的
怎么领券?
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 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
new node added correctly.
4:检查集群情况第1次
使用cluster chk命令。
进入之前任意三个master容器后执行命令:
redis-cli --cluster check 192.168.50.128:6381
我们可以看到,6387已经作为master加入集群了。其对应的从节点是0个。
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
我们可以看到,询问我们打算怎么重新分配?
我们来算下:16384/4=4096.所以,我们就写4096
输入4096后,又询问了:
这4096准备分配给node id呢?
请注意,这里只能分配给新加入的节点的id.也就是本次案例中6387对应的node节点
接着又询问了
我们输入all.
因为16384/master机器数量=4096
输入yes后,所有槽位就会重新分配了。
重新分配需要等待一段时间。耐心等待。
6:检查集群情况第2次
命令:
redis-cli --cluster check 192.168.50.128:6381
我们可以发现了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
8:检查集群情况第3次
redis-cli --cluster check 192.168.50.128:6381
所以最终4主4从的架构及槽号如下图:
结束语
如操作有问题欢迎去 我的 个人博客(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学习系列教程」10-Docker容器数据卷案例
docker高级篇1-dockeran安装mysql主从复制
docker高级篇第二章-分布式存储之实战案例:3主3从redis集群扩容配置
docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例
Docker高级篇:实战Redis集群!从3主3从变为4主4从的更多相关文章
- Docker化高可用redis集群
最近遇到部分系统因为redis服务挂掉,导致部分服务不可用.所以希望搭建一个redis集群镜像,把原先散落各处的redis服务器统一管理起来,并且保障高可用和故障自动迁移. 一:redis集群分类 大 ...
- 使用docker 创建6节点redis 集群 RedisCluster redis集群
1.RedisCluster 特点(3主节点redis 集群 及6节点集群) 1.无中心节点,客户端与redis 节点直连,不需要中间代理,(有选举机制 master个数需要奇数个) 2.数据可以被 ...
- 【Redis篇】Redis集群安装与初始
一.前述 本文将单台节点不同端口模拟集群方式. 二.具体搭建 前提是安装好redis具体可参考http://www.cnblogs.com/LHWorldBlog/p/8463269.html 1 ...
- 用Docker构建分布式Redis集群
[编者的话]本文介绍了如何使用Docker搭建Redis集群,很多读者都在问Docker能带来哪些实质性的好处,我想本文就是一个很好的例子.不使用Docker你也可以搭建Redis集群,那使用Dock ...
- 基于Docker的redis集群搭建
Redis集群官方介绍:http://www.redis.cn/topics/cluster-tutorial.html 基于Docker搭建Redis集群 环境:6个节点,三主三从 制作Redis镜 ...
- [个人翻译]Redis 集群教程(上)
官方原文地址:https://redis.io/topics/cluster-tutorial 水平有限,如果您在阅读过程中发现有翻译的不合理的地方,请留言,我会尽快修改,谢谢. 这是 ...
- Redis集群主从复制(一主两从)搭建配置教程【Windows环境】
如何学会在合适的场景使用合适的技术方案,这值得思考. 由于本地环境的使用,所以搭建一个本地的Redis集群,本篇讲解Redis主从复制集群的搭建,使用的平台是Windows,搭建的思路和Linux上基 ...
- Redis集群增加节点和删除节点
本文主要是承接上一篇文章Redis集群的离线安装成功以后,我们如何进行给集群增加新的主从节点(集群扩容)以及如何从集群中删除节点(集群缩容),也就是集群的伸缩,集群伸缩的原理是控制虚拟槽和数据在节点之 ...
- redis集群搭建与管理
集群简介: Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施(installation). Redis 集群不支持那些需要同时处理多个键的 Redis 命令, 因为执行这些命令 ...
- redis集群之主从复制集群的原理和部署
最近在复盘redis的知识,所以本文开始希望介绍下redis的集群架构.原理以及部署:本文主要介绍redis的主从复制集群,包括其架构模型,原理,高可用等: 一.主从集群的介绍 redis的主从复 ...
随机推荐
- vscode 使用 python 进行 UG 二次开发 实现代码提示功能
vscode 使用 python 进行 UG 二次开发的 实现代码提示功能 用 VSCODE 进行 UG 二次开发的时候, 想要用代码提示的时候,可以用 pydev 插件, 但是,pydev 只有一个 ...
- MES 与 PLC 的几种交互方式
在 MES 开发领域,想要从 PLC 获取数据就必须要和 PLC 有信号交互.高效准确的获取 PLC 数据一直是优秀 MES 系统开发的目标之一.初涉相关系统开发的工程师往往不能很好的理解 PLC 和 ...
- elementplus弹窗可拖拽draggable,点击空白处不消失close-on-click-modal,modal是否去掉遮罩层
<el-dialog :modal="false" v-model="dialogVisible" title="" width=&q ...
- [oeasy]python0083_[趣味拓展]字体样式_正常_加亮_变暗_控制序列
字体样式 回忆上次内容 上次了解了 一个新的转义模式 \033 逃逸控制字符 esc esc 让输出 退出 标准输出流 进行 控制信息的设置 可以 清屏 也可以 设置光标输出的位置 还能做 ...
- TIER 1: Crocodile
TIER 1: Crocodile nmap 在前几次练习中,我们已经熟悉 nmap 扫描,我们在本次靶机中使用继续使用 nmap 进行扫描. 扩充我们的知识库:-sC 选项启用了 Nmap 的默认脚 ...
- 单细胞测序最好的教程(九): 细胞类型自动注释|发表在Science的注释算法
作者按 本章节主要讲解了基于大模型的自动注释方法,包括CellTypist(发表在Science)和MetaTiME(发表在Nature communication),一个通用,一个泛癌专用.本教程首 ...
- .NET TCP、UDP、Socket、WebSocket
做.NET应用开发肯定会用到网络通信,而进程间通信是客户端开发使用频率较高的场景. 进程间通信方式主要有命名管道.消息队列.共享内存.Socket通信,个人使用最多的是Sokcet相关. 而Socke ...
- Spring 常用的三种拦截器详解
前言 在开发过程中,我们常常使用到拦截器来处理一些逻辑.最常用的三种拦截器分别是 AOP. Interceptor . Filter,但其实很多人并不知道什么时候用AOP,什么时候用Intercept ...
- Scratch作品-巴黎2024奥运会
<Scratch作品-巴黎2024奥运会>是一款以巴黎2024年奥运会为主题的互动作品,专为儿童和青少年设计.通过Scratch编程语言,这个作品生动地再现了奥运会的精彩瞬间,结合了动 ...
- scratch编程作品-龙年发大财
作品介绍: 龙年欢歌而来,带着满满的希望与勃勃生机.愿小虎鲸Scratch资源站激发您编程之路的无限灵感,让每一天都充满探索与创造的喜悦.在这吉祥如意的年份里,愿您的每一份耕耘都换来丰收的喜悦,每一个 ...