Docker配置Redis集群以及主从扩容与缩容
基础镜像拉取
docker run -p 6379:6379 -d redis:6.0.8
配置文件以及数据卷挂载
# 开启密码验证(可选)
requirepass 1234# 允许redis外地连接,需要注释掉绑定的IP
# bind 127.0.0.1# 关闭保护模式(可选)
protected-mode no# 注释掉daemonize yes,或者配置成 daemonize no。因为该配置和 docker run中的 -d 参数冲突,会导致容器一直启动失败
daemonize no# 开启redis数据持久化, (可选)
appendonly yes
进行数据卷挂载
docker run -d -p 6379:6379 --name redis --privileged=true \
-v /app/redis/redis.conf:/etc/redis/redis.conf \
-v /app/redis/data:/data \
redis:6.0.8 \
redis-server /etc/redis/redis.conf
三主三从配置
# 启动第1台节点
docker run -d --name redis-node-1 --net host --privileged=true -v /app/redis-cluster/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381# 启动第2台节点
docker run -d --name redis-node-2 --net host --privileged=true -v /app/redis-cluster/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382# 启动第3台节点
docker run -d --name redis-node-3 --net host --privileged=true -v /app/redis-cluster/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383# 启动第4台节点
docker run -d --name redis-node-4 --net host --privileged=true -v /app/redis-cluster/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384# 启动第5台节点
docker run -d --name redis-node-5 --net host --privileged=true -v /app/redis-cluster/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385# 启动第6台节点
docker run -d --name redis-node-6 --net host --privileged=true -v /app/redis-cluster/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
通过docker ps可以看到结点已经运行成功

我们通过ifconfig查看本机的ip地址,后续操作会用到
进入到node1中
docker exec -it redis-node-1 /bin/bash
配置主从关系:
redis-cli --cluster create ip:6381 ip:6382 ip:6383 ip:6384 ip:6385 ip:6386 --clu
ster-replicas 1
查看集群状态:cluster nodes

每次配置的主从关系都不一致,所以需要查看信息 ,本次的主从对应关系对应如下图所示:
Redis集群模式配置
进入容器节点1:
docker exec -it redis-node-1 /bin/bash
此时配置set k1 v1可能会报错,因为k1超过了哈希槽的位置 ,无法进行匹配

我们以集群模式进入节点1:
redis-cli -p 6381 -c
此时会将哈希槽进行重定向,哈希槽为12706,重定向到6383(即节点3,哈希槽[10923, 16383])
主从扩容
配置第七,第八台redis服务
docker run -d --name redis-node-7 --net host --privileged=true -v /app/redis-cluster/share/redis-node-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 /app/redis-cluster/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
进入第七台容器内部
docker exec -it redis-node-7 /bin/bash
将第七台容器加入集群
redis-cli --cluster add-node ip:6387 ip:6381
检查集群配置信息,此时加入集群成功,但哈希槽并没有重新分配
重新分配哈希槽:
redis-cli --cluster reshard ip:6381
我们现在有4台主机,所以16384/4=4096,每台机器分配到4096个槽位,然后会提示将哪些节点分配出去,此时输入all,并且输入yes

此时原先的哈希槽位发生了变化,有些槽位中已经存储了key,完全的重新洗牌重新分配的成本过高,所以redis选择从前3个节点中匀出来一部分给node7
为主节点6387分配从节点6388:
redis-cli --cluster add-node 192.168.xxx.xxx:6388 192.168.xxx.xxx:6387 --cluster-slave --cluster-master-id (6387的id)
主从缩容
现将从机6388移除
1. 进入容器节点1
docker exec -it redis-node-1 /bin/bash
2. 检查容器状态,获取6388的节点编号,并移除
redis-cli --cluster del-node ip:6388 6388节点编号
3. 对集群重新分配槽位
redis-cli --cluster reshard ip:6381
我们将node7的槽位全部分配出去,所以输入4096,将他分配给node1,所以再次输入node1的id,并且输入node7的id,回车后输入done

此时槽位重新分配后,node7的槽位为0,我们可以将他删除,否则会报错
redis-cli --cluster del-node ip:6387 node7 id
相关文章:
Docker配置Redis集群以及主从扩容与缩容
基础镜像拉取 docker run -p 6379:6379 -d redis:6.0.8 配置文件以及数据卷挂载 # 开启密码验证(可选) requirepass 1234 # 允许redis外地连接,需要注释掉绑定的IP # bind 127.0.0.1 # 关闭保护模式(可选) protected-m…...
【计算机网络】 传输层
一、传输层提供的服务 1.1 传输层的功能 1.1.1 传输层的功能如下: 传输层提供应用进程之间的逻辑通信(即端到端的通信)。与网络层的区别是:网络层提供的是主机之间的逻辑通信。 1.1.2 复用和分用 传输层要还要对收到的报文进行…...
山东大学软件学院项目实训-创新实训-基于大模型的旅游平台(二十七)- 微服务(7)
11.1 : 同步调用的问题 11.2 异步通讯的优缺点 11.3 MQ MQ就是事件驱动架构中的Broker 安装MQ docker run \-e RABBITMQ_DEFAULT_USERxxxx \-e RABBITMQ_DEFAULT_PASSxxxxx \--name mq \--hostname mq1 \-p 15672:15672 \-p 5672:5672 \-d \rabbitmq:3-management 浏览器访问1…...
Java Web应用,IPv6问题解决
在Java Web程序中,如果使用Tomcat并遇到了IPv6相关的问题,可以通过以下几种方式来解决: 1. 配置Tomcat以使用IPv4 默认情况下,Java可能会优先使用IPv6。如果你希望Tomcat使用IPv4,最简单的方法是通过设置系统属性来强…...
MyBatis二级缓存开启条件
MyBatis缓存为俩层体系。分为一级缓存和二级缓存。 一级缓存: 一级缓存默认开启,一级缓存的作用域是SqlSession级别的,这意味着当你更换SqlSession之后就不能再利用原来的SqlSession的一级缓存了。不同的SqlSession之间的一级缓存是隔离的。…...
golang 不用sleep如何实现实现每隔指定时间执行一次for循环?
今天介绍的是在go语言里面不用time.Sleep, 使用for range 定时器管道 来实现按照我们指定的时间间隔来执行for循环, 即: for range ticker.C { } 这样就实现了for每隔指定时间执行一次,除非管道被关闭,否则for而且会一直柱塞当前线…...
【el-tooltips改造】Vue实现文本溢出才显示el-tooltip,否则不显示el-tooltips
实现原理: 使用disabled属性控制el-tooltip的content显示与隐藏; 目标: 1行省略、多行省略、可缩放页面内的文本省略都有效。 实现方式: 1、自定义全局指令,tooltipAutoShow.js代码如下(参考的el-table中的…...
【Python数据类型的奥秘】:构建程序基石,驾驭信息之海
文章目录 🚀Python数据类型🌈1. 基本概念⭐2. 转化👊3. 数值运算💥4. 数值运算扩展(math库常用函数) 🚀Python数据类型 🌈1. 基本概念 整数(int):整数是没有小数部分的数…...
vue使用html2canvas截图下载时,存在svg或者img或者特殊字体时截图不全的解决办法
使用html2canvas进行div截图时,存在svg和img的解决办法 写在前面:vue使用html2canvas截图时,存在svg或者img或者特殊字体时截图时空白,或者不全解决办法如下第一步,svg或者img先转base64(如果是特殊字体&am…...
机器学习----奥卡姆剃刀定律
奥卡姆剃刀定律(Occam’s Razor)是一条哲学原则,通常表述为“如无必要,勿增实体”(Entities should not be multiplied beyond necessity)或“在其他条件相同的情况下,最简单的解释往往是最好的…...
【设计模式】行为型设计模式之 模板方法模式
介绍 GOF 定义 模板方法模式 Template Method Design Pattern :模板方法模式在一个方法中定义一个算法骨架,并将某些步骤推迟到子类中去实现;模板方法在不改变算法整体结构的情况下,可以重新定义算法中的某些步骤。 代码举例 …...
智能合约中断言失败
断言失败: 断言(assert)在智能合约中用于确保内部逻辑的一致性和正确性,但如果使用不当,确实可能导致意外的合约终止或资金锁定。这是因为assert主要用于检测程序内部的错误,例如算法错误或逻辑错误&#…...
flink读取hive写入http接口
目录 0、创建hive数据 1、pom.xml 2、flink代码 3、sink 4、提交任务jar 5、flink-conf.yaml 6、数据接收 flink-1.17.2jdk1.8hive-3.1.3hadoop3.3.6passwordhttp0、创建hive数据 /cluster/hive/bin/beeline !connect jdbc:hive2://ip:10000 create database demo; d…...
【论文阅读】MODELING AND SOLVING THE TRAVELING SALESMAN PROBLEM WITH PRIORITY PRIZES
文章目录 论文基本信息摘要1.引言2. INTEGER QUADRATIC PROGRAM FOR TSPPP3. MIXED INTEGER LINEAR PROGRAMS FOR TSPPP4. TABU SEARCH ALGORITHM FOR TSPPP5. COMPUTATIONAL RESULTS6. CONCLUDING REMARKS补充 论文基本信息 《MODELING AND SOLVING THE TRAVELING SALESMAN P…...
【CS.SE】使用 docker pull confluentinc/cp-kafka 的全面指南
文章目录 1 引言2 准备工作2.1 安装 Docker2.1.1 在 Linux 上安装 Docker2.1.2 在 macOS 上安装 Docker2.1.3 在 Windows 上安装 Docker 2.2 验证 Docker 安装 3 拉取 confluentinc/cp-kafka Docker 镜像3.1 拉取镜像3.2 验证镜像 4 运行 Kafka 容器4.1 启动 ZooKeeper4.2 启动…...
STM32快速入门(ADC数模转换)
STM32快速入门(ADC数模转换) 前言 ADC数模转换存在的意义就是将一些温度传感器、各自数据传感器产生的模拟信号转换成方便识别和计算的数字信号。 导航 图24 通用定时器框图: 图片截取自STM32 F1XX中文参考手册。还是以框图为中心&#x…...
Linux环境在非root用户中搭建(java-tomcat-redis)
注: 本文在内网(离线)环境,堡垒机中搭建,服务器不同可能有所差异,仅供参考 本文安装JDK-20.0.1版本,apache-tomcat-10.1.10版本,redis-6.2.15版本 本文服务器IP假设:192.168.88.133 root用户创建子用户并…...
Unity 之 代码修改材质球贴图
Unity 之 代码修改材质球贴图 代码修改Shader:ShaderGraph:材质球包含属性 代码修改 meshRenderer.material.SetTexture("_Emission", texture);Shader: ShaderGraph: 材质球包含属性 materials[k].HasProperty("…...
spark-3.5.1+Hadoop 3.4.0+Hive4.0 分布式集群 安装配置
Hadoop安装参考: Hadoop 3.4.0HBase2.5.8ZooKeeper3.8.4Hive4.0Sqoop 分布式高可用集群部署安装 大数据系列二-CSDN博客 一 下载:Downloads | Apache Spark 1 下载Maven – Welcome to Apache Maven # maven安装及配置教程 wget https://dlcdn.apache.org/maven/maven-3/3.8…...
Matlab实现GWO-CNN-LSTM-Mutilhead-Att灰狼算法卷积长短期记忆神经网络融合多头注意力机制预测 SCI顶级优化
数据预处理:准备和清理数据,包括数据的加载、特征提取、归一化等。 GWO (灰狼算法) 的实现:根据灰狼算法的原理和公式,编写 MATLAB 代码来初始化灰狼群体、计算适应度函数、更新位置等。 CNN (卷积神经网络) 的构建:使…...
如何用Layerdivider快速实现智能图像分层:面向设计师和开发者的完整指南
如何用Layerdivider快速实现智能图像分层:面向设计师和开发者的完整指南 【免费下载链接】layerdivider A tool to divide a single illustration into a layered structure. 项目地址: https://gitcode.com/gh_mirrors/la/layerdivider Layerdivider是一款强…...
KEIL MDK5.12/5.13升级后编译报错?手把手教你解决core_cm3.h找不到的问题
KEIL MDK5.12/5.13升级后编译报错?手把手教你解决core_cm3.h找不到的问题 最近不少嵌入式开发者反馈,在将KEIL MDK升级到5.12或5.13版本后,原本运行良好的工程突然开始报错,提示"cannot open source input file core_cm3.h&q…...
半导体行业成本管理:从学习曲线到EDA工具链的实战策略
1. 行业成本与价格压力的永恒博弈在半导体这个行当里干了十几年,我越来越觉得,我们这行最核心的生存法则,不是什么高深莫测的量子物理,而是一个看似简单、实则残酷的算术题:一边是不断上涨的原材料、设备和设计成本&am…...
NEO-M9L-20A,支持四系统并发与3D汽车航位推算(ADR)的GNSS模块
简介今天我要向大家介绍的是 u-blox 的模块——NEO-M9L-20A。这是一款基于 u-blox M9 平台的汽车级(AEC-Q104)标准精度GNSS接收模块,专为需要高精度、高可靠性定位的汽车和工业追踪应用而生(如导航、车联网和无人机)。该模块集成了3D惯性测量…...
AI Agent + 指纹浏览器:从0搭建MCP Server实现批量账号自动化管理
我是张大鹏,做了十多年人工智能,带过不少项目。说实话,AI Agent 最难的不是生成内容,是"动手干活"——大模型再强,如果只能输出文字而不能操控真实环境,自动化就永远差最后一公里。最近在研究 In…...
终极ncmdump指南:如何快速破解网易云音乐NCM加密格式限制
终极ncmdump指南:如何快速破解网易云音乐NCM加密格式限制 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾为网易云音乐下载的NCM格式文件无法在其他播放器中播放而烦恼?ncmdump作为一款开源解密工具&…...
Java多线程:从入门到进阶
Java多线程:从入门到进阶 1. 引入:为什么需要多线程? 1.1 单线程的瓶颈 假设你要下载三个文件,单线程的做法是:一个个下载,总时间 文件1 文件2 文件3。 downloadFile1(); // 等待完成 downloadFile2();…...
CANN/asc-devkit Query API文档
Query 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann…...
第十四节:Project Glasswing 落地——构建本地 Agent 的双向审查防火墙
引言 承接上一章对大模型 Prompt 注入与越狱攻击的防御,本章将深入探讨 Project Glasswing 的安全治理理念,重点解决本地 Agent 在输入与输出两个环节的安全审查,构建企业级的双向审查防火墙。 核心理论 Project Glasswing 旨在打造一个“看门狗”机制,利用 AI 模型和规…...
罗技PUBG压枪宏技术深度解析:硬件级输入控制的演进与挑战
罗技PUBG压枪宏技术深度解析:硬件级输入控制的演进与挑战 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在FPS游戏竞技生态中&#…...
