Docker搭建redis-cluster集群
1. 前期准备
1.1 拉redis镜像
docker search redis
docker pull redis
1. 2 创建网卡
docker network create myredis --subnet 172.28.0.0/16#查看创建的网卡
docker network inspect myredis

docker network rm myredis #删除网卡命令 多个中间 空格隔开
docker network --help #显示可带参数等
1.3 Redis配置脚本
for port in $(seq 6379 6384); \
do \
mkdir -p ~/redis/node-${port}/conf
touch ~/redis/node-${port}/conf/redis.conf
cat << EOF > ~/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.28.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
命令解释:
port:节点端口;requirepass:设置密码,访问时需要验证protected-mode:保护模式,默认值 yes,即开启。开启保护模式以后,需配置 bind ip 或者设置访- 问密码;关闭保护模式,外部网络可以直接访问;daemonize:是否以守护线程的方式启动(后台启动),默认 no;appendonly:是否开启 AOF 持久化模式,默认 no;cluster-enabled:是否开启集群模式,默认 no;cluster-config-file:集群节点信息文件;cluster-node-timeout:集群节点连接超时时间;cluster-announce-ip:集群节点 IP
注意: 如果你想要你的redis集群可以供外网访问,这里直接填 服务器的IP 地址即可,如若为了安全,只是在服务器内部进行访问,这里还需要做一些修改。cluster-announce-port:集群节点映射端口,用于客户端连接到节点;cluster-announce-bus-port:集群节点总线端口,用于节点之间进行通信。
EOF(End of File)用法
<<EOF #开始
… #输入内容
EOF #结束
举例说明:
cat << EOF > 1.txt #向文件1.txt输入覆盖内容(也可以:cat > 1.txt <<EOF)
123
456
678
EOF
执行完毕后的目录结构:

2. 创建redis集群
2.1 批量式启动redis容器
for port in $(seq 6379 6384); \
do \docker run -it -d -p ${port}:${port} -p 1${port}:1${port} \--privileged=true -v /home/redis/node-${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \--privileged=true -v /home/redis/node-${port}/data:/data \--restart always --name redis-${port} --net myredis \--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf
done# 查看是否启动成功
docker ps -a
去掉参数部分:
docker run -d redis redis-server /usr/local/etc/redis/redis.conf
#redis-server [options] [config file]:加载指定的配置文件
命令解释:
- -d:后台运行,容器启动完成后打印容器
- –privileged:是否让docker 应用容器 获取宿主机root权限(特殊权限-)
- –sysctl参数来设置系统参数,通过这些参数来调整系统性能
- -restart always:在容器退出时总是重启容器
- –net myredis :使用我们创建的虚拟网卡
- –name redis-${port}: 将容器命名为 redis-${port}
2.2 创建 redis cluster集群
进入容器
> docker exec -it redis-6379 /bin/sh
进入容器后,在容器中创建集群
> redis-cli --cluster create 172.28.0.11:6379 172.28.0.12:6380 172.28.0.13:6381 172.28.0.14:6382 172.28.0.15:6383 --cluster-replicas 1
- redis-cli: Redis 命令行工具。
- –cluster create: 创建 Redis 集群。
- {ip}:{port}: 指定 Redis 节点地址和端口。
–cluster-replicas 1: 指定每个 Redis 节点的副本数量。
2.3 验证redis集群
# 启动redis服务器
> redis-server#连接到redis服务器
> redis-cli -h <host> -p <port># 启动redis集群客户端(-c表示集群)host也可不添加
/data# redis-cli -p[host]-c# 查看集群信息
172.28.0.1:6379> cluster info# 集群创建好之后,11,12,13为主节点,其余为从节点
172.28.0.1:6379> cluster nodes

验证 Redis 集群:
#缓存数据
172.28.0.1:6379> set name Stephen-> Redirected to slot [5798] located at 172.28.0.12:6379
OK
#获取数据
172.28.0.1:6379> get name-> Redirected to slot [5798] located at 172.28.0.16:6379
"stephen"
停止容器:
docker stop redis-6379
当主节点断开之后,会自动将从节点切换为主节点,比如这里将16切换为了主节点
2.4 批量停止容器
for port in $(seq 6379 6384); do docker stop redis-${port}done
2.5 批量删除容器
for port in $(seq 6379 6384); do docker rm redis-${port}done
3. 集群扩容
集群结构:

启动一个新的redis容器,并将其添加到myredis网络中:
docker run -d --name redis-6385 -p 6385:6385 --net myredis redis redis-server /usr/local/etc/redis/redis.conf
添加新节点到集群:
#1. 添加从节点 add-node --slave [新加入节点] [集群中任意节点]
redis-cli cluster add-node 172.28.0.1:6385 172.28.0.1:6379# 2.为确定的master节点添加主节点 add-node --slave --master-id master节点id [新加入节点] [集群任意节点]
redis-cli cluster add-node 172.28.0.1:6386 172.28.0.1:6379 --cluster-slave
--cluster-master-id3c3a0c74aae0b56170ccb03a76b60cfe7dc1912e
参数说明:
add-node: 后面的分别跟着新加入的slave和slave对应的master
cluster-slave:表示加入的是slave节点
–cluster-master-id:表示slave对应的master的node ID
redis-cli命令需要再redis容器中执行
哈希槽分配:
新的节点该节点还未分配 slots(哈希槽),所以暂时无法存储数据
redis-cli --cluster reshard 172.28.0.1:6379 --cluster-from fbc63acf974997e37a35b5ca1c71cc002ae1bb40,
fa92c840b4a77463fb27b2b8183f144321a73f86 --cluster-to 41eb57d0685f71aabef57908aef54189b22573b9
--cluster-slots 2000
参数说明:
–cluster-from:表示slot目前所在的节点的node ID,多个ID用逗号分隔
–cluster-to:表示需要新分配节点的node ID
–cluster-slots:分配的slot数量
4. 集群缩容
移除从节点:
# el-node:删除节点,后面跟着slave节点的 ip:port 和node ID
redis-cli --cluster del-node 172.28.0.1:6386 7d6948bb8b6a5ff49f26aef2ebdb400bc3dc7062
迁移主节点哈希槽:
删除主节点6395,就没那么容易了。必须先将节点7上的哈希槽移动到其他主节点上,才可以删除它。需要迁出主节点的哈希槽。
我们需要将7007节点的哈希槽迁移到7001,7002,7003节点上,仍然用上面用过的redis-cli --cluster reshard ...语法,迁移计划:500个slots给6379,700个slots给6380,剩余800个给6381 命令如下:
# 将172.28.0.1:6385节点所在集群中41eb57d0685f71aabef57908aef54189b22573b9 节点的500个哈希槽迁移给 # fbc63acf974997e37a35b5ca1c71cc002ae1bb40节点,不回显需要迁移的slot,直接迁移。
# 第一次迁移500到8379
redis-cli --cluster reshard 172.28.0.1:6385 --cluster-from 41eb57d0685f71aabef57908aef54189b22573b9 --cluster-to fbc63acf974997e37a35b5ca1c71cc002ae1bb40 --cluster-slots 500 --cluster-yes# 第二次迁移700到6380
redis-cli --cluster reshard 172.28.0.1:6385 --cluster-from 41eb57d0685f71aabef57908aef54189b22573b9 --cluster-to fa92c840b4a77463fb27b2b8183f144321a73f86 --cluster-slots 700 --cluster-yes# 第三次迁移800到6391
redis-cli --cluster reshard 172.28.0.1:6385 --cluster-from 41eb57d0685f71aabef57908aef54189b22573b9 --cluster-to 05e9c301a25041ca780f369974764636513e8767 --cluster-slots 800 --cluster-yes
删除主节点:
redis-cli --cluster del-node 172.28.0.1:6385:7007 41eb57d0685f71aabef57908aef54189b22573b9
4. 参考文章:
Docker 搭建 Redis Cluster集群 每一步都带有操作图、命令!!!
Docker搭建Redis Cluster集群及扩容和收容 _
相关文章:
Docker搭建redis-cluster集群
1. 前期准备 1.1 拉redis镜像 docker search redis docker pull redis1. 2 创建网卡 docker network create myredis --subnet 172.28.0.0/16#查看创建的网卡 docker network inspect myredisdocker network rm myredis #删除网卡命令 多个中间 空格隔开 docker network --h…...
实验室类管理平台LIMS系统的ui设计实例
实验室类管理平台LIMS系统的ui设计实例...
<PLC><西门子><工控>西门子博图V18中使用SCL语言编写一个CRC16-modbus校验程序
前言 本系列是关于PLC相关的博文,包括PLC编程、PLC与上位机通讯、PLC与下位驱动、仪器仪表等通讯、PLC指令解析等相关内容。 PLC品牌包括但不限于西门子、三菱等国外品牌,汇川、信捷等国内品牌。 除了PLC为主要内容外,PLC相关元器件如触摸屏(HMI)、交换机等工控产品,如…...
Linux - 文件管理高级 find、grep
0.管道 | 将前面命令的标准输出传递给管道作为后面的标准输入 1.文件查找 find find 进行文件查找时,默认进行递归查找,会查找隐藏目录下的文件 1.1 用法 # find 查找路径 查找条件... -type // 文件类型 f 普通文件 b 设备 d …...
DOS编程入门:探索基础、深入技巧与实战应用
DOS编程入门:探索基础、深入技巧与实战应用 DOS编程,作为计算机编程的基石之一,对于初学者来说,既是一种挑战,也是一次深入了解计算机底层运作的绝佳机会。本文将从四个方面、五个方面、六个方面和七个方面࿰…...
创建线程的技术难点
在软件开发中,创建线程并正确地管理它们是一个复杂而关键的任务,涉及的技术难点主要有: 线程同步:当多个线程需要访问共享资源时,必须确保它们以某种方式同步,以避免数据不一致或其他并发问题。例如&#…...
Android ViewPager和ViewPager2的区别
一、实现方式 ViewPager内部是通过继承ViewGroup来实现的,ViewPager2内部是通过RecyclerView来实现的(效率更高) 二、支持方向 ViewPager只能横向滑动,ViewPager2可以横向以及竖向滑动 三、采用的适配器 ViewPager有两个适配…...
Oracle数据库面试题-3
41. 请解释Oracle数据库中的内存顾问(Memory Advisor)的作用。 Oracle 数据库中的内存顾问(Memory Advisor) Oracle 数据库中的内存顾问是一个功能,它可以分析数据库的内存使用情况,并提供优化建议&#…...
21.过拟合和欠拟合示例
1. 背景介绍 在机器学习和深度学习中,过拟合和欠拟合是两个非常重要的概念。过拟合指的是模型在训练数据上表现很好,但在新的测试数据上效果变差的情况。欠拟合则是指模型无法很好地拟合训练数据的情况。这两种情况都会导致模型无法很好地泛化ÿ…...
使用import语句导入模块
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 创建模块后,就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码,这可以使用import语句实现。im…...
一台FreeBSD笔记本突然鼠标乱动=>pf防火墙设置@FreeBSD
缘起 一台FreeBSD的笔记本,突然鼠标乱动 思考了下,可能原因有三: 1 无线鼠标干扰 正巧没带鼠标,但是插着无线鼠标usb,不知道是不是别人的鼠标跟这个usb串台了。 2 触摸板机械故障 也许是天热触摸板开始有故障了&…...
身份证OCR识别功能介绍
身份证OCR识别功能是一种基于光学字符识别(OCR)技术的解决方案,专门用于从身份证图像中快速、准确地提取和识别信息。以下是关于身份证OCR识别功能的详细介绍: 功能概述 身份证OCR识别功能通过高分辨率的摄像头或扫描仪获取身份证…...
一文看懂:MES定义和功能是什么,以及在数字化工厂的应用
MES应该是继ERP之后制造企业信息化最热门的管理软件,它适应产品个性化与敏捷化制造需求,满足生产过程精益管理而产生和发展起来的信息系统。 作为企业实现数字化与智能化的核心支撑技术与重要组成部分,MES在帮助制造企业走向数字化、智能化等…...
对 SQL 说“不”~
开发人员注意! 您在当前的应用程序架构中是否面临这些问题? 对 SQL 数据库的高吞吐量。SQL 数据库中的瓶颈。 内存数据存储将是解决问题的方案。Redis 是市场上最受欢迎的内存数据存储和缓存选项。Redis 拥有广泛的生态系统,因为主要科技巨…...
【爱空间_登录安全分析报告】
前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …...
web前端三大主流框架
一、介绍 目前,前端开发领域的三大主流框架是: React:React是由Facebook开发并维护的开源JavaScript库,用于构建用户界面。它提供了一种声明式的组件化开发方式,能够高效地创建交互性的用户界面。React具有高性能、可…...
git获取的项目无法运行
一、Unsupported engine 问题:在使用命令npm install下载依赖项的时候就遇到了这个问题,有帖子说多试几次,其实这是提示node版本问题,版本的更新出现兼容性问题,多试几次也没用。 解决方案: 更新node.js的…...
java 原生http服务器 测试JS前端ajax访问实现跨域
后端 package Httpv3;import com.sun.net.httpserver.Headers; import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer;import java.io.IOException; import java.io.OutputStream; import java…...
捋一捋C++中的逻辑运算(一)——表达式逻辑运算
注意,今天要谈的逻辑运算是C语言编程中的“与或非”逻辑运算,不是数学集合中的“交并补”逻辑运算。而编程中的逻辑运算又包括表达式逻辑运算和位逻辑运算,本章介绍表达式逻辑运算,下一章介绍位逻辑运算。 目录 一、几个基本的概…...
qcom 平台系统签名流程
security boot 平台的东东,oem 可定制的功能有限,只能参考平台文档,可以在高通的网站上搜索:Secure Boot Enablement,然后找对应平台的文档xxx-Secure Boot Enablement User Guide, step by step 操作即可 开机校验流…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
