Linux:docker搭建redis集群(3主3从扩容缩容 哈希槽分配)

操作系统:centos7

docker-ce版本:24.0.7


1.准备redis镜像

我这里使用redis 6.0.8 镜像进行操作,如果你也需要镜像,在网络正常情况下直接使用

docker pull redis:6.0.8

即可进行下载,如果你没配置国内加速器,他默认是找国外官网下载的,可能会导致下载各种失败,可以多试几次


2.生成6个容器

docker run -d --name redis-node-1 --net host --privileged=true -v /redis/redis-node-1:/data redis:6.0.8 --cluster-enabled yes  --appendonly yes --port 6381
docker run -d --name redis-node-2 --net host --privileged=true -v /redis/redis-node-2:/data redis:6.0.8 --cluster-enabled yes  --appendonly yes --port 6382
docker run -d --name redis-node-3 --net host --privileged=true -v /redis/redis-node-3:/data redis:6.0.8 --cluster-enabled yes  --appendonly yes --port 6383
docker run -d --name redis-node-4 --net host --privileged=true -v /redis/redis-node-4:/data redis:6.0.8 --cluster-enabled yes  --appendonly yes --port 6384
​docker run -d --name redis-node-5 --net host --privileged=true -v /redis/redis-node-5:/data redis:6.0.8 --cluster-enabled yes  --appendonly yes --port 6385
​docker run -d --name redis-node-6 --net host --privileged=true -v /redis/redis-node-6:/data redis:6.0.8 --cluster-enabled yes  --appendonly yes --port 6386

run -d   后台运行

--name   生成镜像的名称为*

--net host   网络连接的方式

--privileged=true    给予容器卷权限

-v /redis/redis-node-*:/data     容器卷

--cluster-enabled yes   开启集群模式

--appendonly yes        开启持久化

--port    使用的端口


3.生成集群 

docker exec -it redis-node-1 /bin/bash

随便进入一个容器

redis-cli --cluster create 192.168.6.7:6381 192.168.6.7:6382 192.168.6.7:6383 192.168.6.7:6384 192.168.6.7:6385 192.168.6.7:6386 --cluster-replicas 1

这里的ip  都是   服务器ip:端口号       把这些服务器ip全写上他自动就会分配主从 

并且可以看到对应的服务器主从信息
1  主 5  从
2  主 6  从
3  主 4  从


4.进入集群

随便一个容器内 都可以使用

redis-cli -p 6381 -c

-p是选择端口号

-c 优化路由


5.查看集群信息

在redis里面可以用

CLUSTER info

CLUSTER NODES

在这里通过看从服务器后面的编码可以判断主服务器的从是谁    谁是主服务器的从

在redis外

redis-cli --cluster check 192.168.6.7:6381

 也是可以非常详细的看到


 6.集群容错迁移

1  主 5  从
2  主 6  从
3  主 4  从

每个人的情况可能都会有所不同,这是正常的,在查看集群信息里,从服务器后面有串数值,对应的就是主服务器的数值

要求是主服务器挂了的时候从服务器必须要顶替上去

现在把node1关掉  看看5是否可以顶上

这是没关前的

关了之后可以看到原来5是从现在变成主了

当我们在开启node1  后 node1 会先变成从的,并不会在启动的一瞬间抢夺主  从而在间隙间造成数据丢失,相同你把node4关闭再重启他也会再给node1让位的


7.主从扩容

假如现在我们的3主3从顶不住了,我们又想加两个6387  和 6388 并且精准的控制6387为主 6388为从   这个样就达到了一个集群扩容的效果

但是3个主从就已经把hash槽都占满了呀,所以我们还要进行槽位分配

再新建2个容器

docker run -d --name redis-node-8 --net host --privileged=true -v /redis/redis-node-8:/data redis:6.0.8 --cluster-enabled yes  --appendonly yes --port 6388
docker run -d --name redis-node-7 --net host --privileged=true -v /redis/redis-node-7:/data redis:6.0.8 --cluster-enabled yes  --appendonly yes --port 6387

现在创建好两个容器后再去分配槽位

现在进到node1里面

docker exec -it redis-node-7 /bin/bash

先让他以空槽的形式进入到群集里

redis-cli --cluster add-node 192.168.6.7:6387 192.168.6.7:6381

这个你可以理解为6387就跟随6381的帮派了

 可以看到现在新进来的6387还没槽位

现在开始分配槽位

redis-cli rehash 192.168.6.7:6381

4096是平均分配多少个槽位

all

等到分配完成即可

可以看到成功分配了,前三家分给了第四个主服务器了一些槽位

现在新主服务器就成功添加了

再给6387添加一个从的6388 

让6388成为6387的从服务器

redis-cli --cluster add-node 192.168.6.7:6388 192.168.6.7:6387 --cluster-slave --cluster-master-id eed172eddb305a5a6ee6c346020dd843b068b429

 这的是6388就成为6387的从服务器了,后面的hash值为6387主服务器的值

成功挂到6387下变成他的从服务器


8.主从缩容

现在反向操作  有扩就有缩,只需要删掉6388 和 6387

先删从

清出来的槽号再还回去 

再删主

这个是当前的4主4从

现在先删从的让后重新分配槽号  ,再删主的

redis-cli --cluster del-node 192.168.6.7:6388 2d7e1b164db74ab85a428e11b4335ed0e43d2f89

 后面这里值为6388的值

可以看到从服务器就被删掉了

redis-cli --cluster reshard 192.168.6.7:6381

只是通过这个6381去操作整个集群,实际上你可以任选一台都行

 

现在6387 槽位就被分配到6375了,我这里只是为了方便,实际上你可以一点一点的分这个槽位

分配完之后就可以去删除这个节点了

redis-cli --cluster del-node 192.168.6.7:6387 eed172eddb305a5a6ee6c346020dd843b068b429

这样就可以正常删除了

这样就变回3主3从了

这样就成功的配置全过程了 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/392201.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Doris ——SQL原理解析

目录 前言 一、Doris简介 二、SQL解析简介 2.1 词法分析 2.2 语法分析 2.3 逻辑计划 2.4 物理计划 三、Doris SQL解析的总体架构 四、Parse阶段 五、Analyze阶段 六、SinglePlan阶段(生成单机逻辑Plan阶段) 七、DistributedPlan计划&#xf…

蓝桥杯备赛_python_BFS搜索算法_刷题学习笔记

1 bfs广度优先搜索 1.1 是什么 1.2怎么实现 2案例学习 2.1.走迷宫 2.2.P1443 马的遍历 2.3. 九宫重排(看答案学的,实在写不来) 2.4.青蛙跳杯子(学完九宫重排再做bingo) 2.5. 长草 3.总结 1 bfs广度优先搜索 【P…

数据记笔记:USGS 查看上世纪卫星图

1 先到USGS EarthExplorer 界面,在address 处选择需要的城市/也可以在底下polygon处手动标出需要研究的区域 2,点击show,就会出找到的对应的区域,点击这个区域,polygon处就会有响应了。然后选择date range 3 点击下方的…

P1439 背包九讲(1):简单的0-1背包

P1439 背包九讲1:简单的0-1背包 一、原题呈现1、题目描述2、输入描述3、输出描述4、样例输入5、样例输出 二、思路分析这是一个最基础的01背包问题。 三、整体代码 一、原题呈现 1、题目描述 有一个箱子容量为 V(正整数,0<&…

Java SE:集合

1. 单列集合顶层接口Collection 集合:将一个个数据结构写好封装成类,方便开发者调用 单列集合底下有两大接口:List和Set List底下有3个集合类:ArrayList(数组)、LinkedList(链表)…

【NI-DAQm入门】构建应用程序案例1

1.系统框图 2.应用框图 3. 代码结构 3.1 技巧1 使用模拟采样时钟作为编码器的时钟源•(而不是使用隐式) 同步模拟输入和编码 3.2 技巧2 为模拟输入和计数器输入采集样本 写入相同采样点至文件 对齐数据文件 3.3 技巧3 数字读写技巧

FLUENT Meshing Watertight Geometry工作流入门 - 7 共享拓扑

本视频中学到的内容: “共享拓扑”任务的工作细节如何使用“更新边界”和“更新区域”任务来更新边界和区域的属性 视频链接: FLUENT Meshing入门教程-7应用共享拓扑_哔哩哔哩_bilibili 【Import Geometry】 启动Ansys Fluent进入网格模式。在工作流类…

Swing程序设计(10)列表框,文本框,文本域,密码框

文章目录 前言一、列表框二、文本框(域) 1.文本框2.文本域三、密码框总结 前言 该篇文章简单介绍了Java中Swing组件里的列表框、文本框、密码框。 一、列表框 列表框(JList)相比下拉框,自身只是在窗体上占据固定的大小…

第三百四十九回

文章目录 1. 概念介绍2. 原理与方法2.1 知识对比2.2 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"加密包crypto"相关的内容,本章回中将介绍characters包.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在项目中会遇到获取字…

Paper - CombFold: predicting structures of large protein assemblies 论文简读

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/136143199 CombFold: predicting structures of large protein assemblies using a combinatorial assembly algorithm and AlphaFold2 CombFold…

从物联网到数字孪生:智慧社区的演变

随着科技的飞速发展和数字化转型的深入推进,智慧社区已成为提升城市治理水平和居民生活质量的重要方向。在这一演变过程中,物联网和数字孪生技术起到了至关重要的作用。本文将深入探讨从物联网到数字孪生的演变过程,分析这一转变对智慧社区建…

EasyRecovery软件免费版与付费版有哪些功能区别?

免费版的EasyRecovery软件在功能和恢复能力上确实存在一些限制。 首先,在数据恢复方面,免费版通常只能恢复最多1GB的数据。这意味着,如果你需要恢复的数据量超过1GB,你将需要升级到付费版才能完全恢复。 其次,免费版…

LeetCode---384周赛

题目列表 3033. 修改矩阵 3034. 匹配模式数组的子数组数目 I 3035. 回文字符串的最大数量 3036. 匹配模式数组的子数组数目 II 一、修改矩阵 简单模拟即可&#xff0c;代码如下 class Solution { public:vector<vector<int>> modifiedMatrix(vector<vecto…

专业140+总分400+华中科技大学824信号与系统考研经验华科华中大电子信息与通信工程,真题,大纲,参考书。

今年考研落下帷幕&#xff0c;看到有人落寞&#xff0c;有人金榜题名&#xff0c;心里体会五谷杂陈&#xff0c;自己很幸运通过努力上岸华科&#xff0c;初试专业课824信号与系统140&#xff0c;数一130&#xff0c;总分400&#xff0c;对于这个成绩稍微有点超出自己预期&#…

ViT: transformer在图像领域的应用

文章目录 1. 概要2. 方法3. 实验3.1 Compare with SOTA3.2 PRE-TRAINING DATA REQUIREMENTS3.3 SCALING STUDY3.4 自监督学习 4. 总结参考 论文&#xff1a; An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 代码&#xff1a;https://github.com…

删除windows自带输入法

ctrl shift F 搜狗简繁体切换

【大厂AI课学习笔记】【2.1 人工智能项目开发规划与目标】(4)数据准备的流程

今天学习的是数据准备的流程。 我们已经知道&#xff0c;数据准备占了AI项目超过一半甚至79%的时间。 那么数据准备&#xff0c;都做些什么&#xff0c;有哪些流程。 1.数据采集 观测数据人工收集调查问卷线上数据库 2.数据清洗 有缺失的数据有重复的数据有内容错误的数据…

CSS的注释:以“ /* ”开头,以“ */ ”结尾

CSS的注释:以“ /* ”开头&#xff0c;以“*/”结尾 CSS的注释: 以“ /* ”开头&#xff0c;以“ */ ”结尾 在CSS中&#xff0c;注释是一种非常重要的工具&#xff0c;它们可以帮助开发者记录代码的功能、用法或其他重要信息。这些信息对于理解代码、维护代码以及与他人合作都…

SpringBoot实现OneDrive文件上传

SpringBoot实现OneDrive文件上传 源码 OneDriveUpload: SpringBoot实现OneDrive文件上传 获取accessToken步骤 参考文档&#xff1a;针对 OneDrive API 的 Microsoft 帐户授权 - OneDrive dev center | Microsoft Learn 1.访问Azure创建应用Microsoft Azure&#xff0c;使…

Sora 文生视频提示词实例集 2

Prompt: Historical footage of California during the gold rush. 加利福尼亚淘金热期间的历史影像。 Prompt: A close up view of a glass sphere that has a zen garden within it. There is a small dwarf in the sphere who is raking the zen garden and creating patter…