当前位置: 首页 > news >正文

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 进行文件查找时&#xff0c;默认进行递归查找&#xff0c;会查找隐藏目录下的文件 1.1 用法 # find 查找路径 查找条件... -type // 文件类型 f 普通文件 b 设备 d …...

DOS编程入门:探索基础、深入技巧与实战应用

DOS编程入门&#xff1a;探索基础、深入技巧与实战应用 DOS编程&#xff0c;作为计算机编程的基石之一&#xff0c;对于初学者来说&#xff0c;既是一种挑战&#xff0c;也是一次深入了解计算机底层运作的绝佳机会。本文将从四个方面、五个方面、六个方面和七个方面&#xff0…...

创建线程的技术难点

在软件开发中&#xff0c;创建线程并正确地管理它们是一个复杂而关键的任务&#xff0c;涉及的技术难点主要有&#xff1a; 线程同步&#xff1a;当多个线程需要访问共享资源时&#xff0c;必须确保它们以某种方式同步&#xff0c;以避免数据不一致或其他并发问题。例如&#…...

Android ViewPager和ViewPager2的区别

一、实现方式 ViewPager内部是通过继承ViewGroup来实现的&#xff0c;ViewPager2内部是通过RecyclerView来实现的&#xff08;效率更高&#xff09; 二、支持方向 ViewPager只能横向滑动&#xff0c;ViewPager2可以横向以及竖向滑动 三、采用的适配器 ViewPager有两个适配…...

Oracle数据库面试题-3

41. 请解释Oracle数据库中的内存顾问&#xff08;Memory Advisor&#xff09;的作用。 Oracle 数据库中的内存顾问&#xff08;Memory Advisor&#xff09; Oracle 数据库中的内存顾问是一个功能&#xff0c;它可以分析数据库的内存使用情况&#xff0c;并提供优化建议&#…...

21.过拟合和欠拟合示例

1. 背景介绍 在机器学习和深度学习中&#xff0c;过拟合和欠拟合是两个非常重要的概念。过拟合指的是模型在训练数据上表现很好&#xff0c;但在新的测试数据上效果变差的情况。欠拟合则是指模型无法很好地拟合训练数据的情况。这两种情况都会导致模型无法很好地泛化&#xff…...

使用import语句导入模块

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 创建模块后&#xff0c;就可以在其他程序中使用该模块了。要使用模块需要先以模块的形式加载模块中的代码&#xff0c;这可以使用import语句实现。im…...

一台FreeBSD笔记本突然鼠标乱动=>pf防火墙设置@FreeBSD

缘起 一台FreeBSD的笔记本&#xff0c;突然鼠标乱动 思考了下&#xff0c;可能原因有三&#xff1a; 1 无线鼠标干扰 正巧没带鼠标&#xff0c;但是插着无线鼠标usb&#xff0c;不知道是不是别人的鼠标跟这个usb串台了。 2 触摸板机械故障 也许是天热触摸板开始有故障了&…...

身份证OCR识别功能介绍

身份证OCR识别功能是一种基于光学字符识别&#xff08;OCR&#xff09;技术的解决方案&#xff0c;专门用于从身份证图像中快速、准确地提取和识别信息。以下是关于身份证OCR识别功能的详细介绍&#xff1a; 功能概述 身份证OCR识别功能通过高分辨率的摄像头或扫描仪获取身份证…...

一文看懂:MES定义和功能是什么,以及在数字化工厂的应用

MES应该是继ERP之后制造企业信息化最热门的管理软件&#xff0c;它适应产品个性化与敏捷化制造需求&#xff0c;满足生产过程精益管理而产生和发展起来的信息系统。 作为企业实现数字化与智能化的核心支撑技术与重要组成部分&#xff0c;MES在帮助制造企业走向数字化、智能化等…...

对 SQL 说“不”~

开发人员注意&#xff01; 您在当前的应用程序架构中是否面临这些问题&#xff1f; 对 SQL 数据库的高吞吐量。SQL 数据库中的瓶颈。 内存数据存储将是解决问题的方案。Redis 是市场上最受欢迎的内存数据存储和缓存选项。Redis 拥有广泛的生态系统&#xff0c;因为主要科技巨…...

【爱空间_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …...

web前端三大主流框架

一、介绍 目前&#xff0c;前端开发领域的三大主流框架是&#xff1a; React&#xff1a;React是由Facebook开发并维护的开源JavaScript库&#xff0c;用于构建用户界面。它提供了一种声明式的组件化开发方式&#xff0c;能够高效地创建交互性的用户界面。React具有高性能、可…...

git获取的项目无法运行

一、Unsupported engine 问题&#xff1a;在使用命令npm install下载依赖项的时候就遇到了这个问题&#xff0c;有帖子说多试几次&#xff0c;其实这是提示node版本问题&#xff0c;版本的更新出现兼容性问题&#xff0c;多试几次也没用。 解决方案&#xff1a; 更新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++中的逻辑运算(一)——表达式逻辑运算

注意&#xff0c;今天要谈的逻辑运算是C语言编程中的“与或非”逻辑运算&#xff0c;不是数学集合中的“交并补”逻辑运算。而编程中的逻辑运算又包括表达式逻辑运算和位逻辑运算&#xff0c;本章介绍表达式逻辑运算&#xff0c;下一章介绍位逻辑运算。 目录 一、几个基本的概…...

qcom 平台系统签名流程

security boot 平台的东东&#xff0c;oem 可定制的功能有限&#xff0c;只能参考平台文档&#xff0c;可以在高通的网站上搜索&#xff1a;Secure Boot Enablement&#xff0c;然后找对应平台的文档xxx-Secure Boot Enablement User Guide, step by step 操作即可 开机校验流…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战

在现代战争中&#xff0c;电磁频谱已成为继陆、海、空、天之后的 “第五维战场”&#xff0c;雷达作为电磁频谱领域的关键装备&#xff0c;其干扰与抗干扰能力的较量&#xff0c;直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器&#xff0c;凭借数字射…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”

2025年#高考 将在近日拉开帷幕&#xff0c;#AI 监考一度冲上热搜。当AI深度融入高考&#xff0c;#时间同步 不再是辅助功能&#xff0c;而是决定AI监考系统成败的“生命线”。 AI亮相2025高考&#xff0c;40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕&#xff0c;江西、…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...