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

news2024/11/25 20:41:09

操作系统: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从了

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[java基础揉碎]数组 值拷贝和引用拷贝的赋值方式

目录 数组的介绍 为什么有数组 数组的三种使用方式 动态初始化: 静态初始化: 数组使用注意事项和细节 值拷贝和引用拷贝的赋值方式 数组反转: 数组拷贝: 数组的介绍 数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。 即:数组…

【蓝桥杯冲冲冲】[CEOI2015 Day2] 世界冰球锦标赛

蓝桥杯备赛 | 洛谷做题打卡day32 文章目录 蓝桥杯备赛 | 洛谷做题打卡day32题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示样例解释 题解代码我的一些话 [CEOI2015 Day2] 世界冰球锦标赛 题目描述 译自 CEOI2015 Day2 T1「Ice Hockey World Championship」 今年的…

[高并发] - 1.高并发综述

1. 必备条件 高并发,高性能分布式ID 高并发过滤组件 Bloom FIlter 2. 数据库 (1)不要让mysql干不擅长的工作,例如全文搜索,而是采用对应的nosql来处理;对于擅长的存取数据则能很好胜任; &am…

牛腩新闻发布系统总结

目录 背景: 过程: 总结: 背景: 对于看牛腩视频都是每天坐立不安的事情,生怕看着看着遇到代码问题,那样自己又得需要费很大力气去解决,所以进展缓慢,之前也听过墨菲定律得书,如果不想出错的事情,那就一定…

英文单词-计算:Calculate与Compute的区别是什么

英文单词-计算:Calculate与Compute的区别是什么 compute 源自法语;calculate 源自拉丁语。在使用上,calculate 使用得更为广泛 calculate侧重人的分析,而compute侧重机器的运算。 calculator是“计算器”,而computer是“计算机”…

阿里云香港服务器租用优惠价格表,2024更新

阿里云香港服务器2核1G、30M带宽、40GB ESSD系统盘优惠价格24元/月,288元一年,每月流量1024GB,多配置可选,官方优惠活动入口 https://t.aliyun.com/U/bLynLC 阿里云服务器网aliyunfuwuqi.com分享阿里云香港服务器优惠活动、详细配…

在已有代码基础上创建Git仓库

在已有代码基础上创建Git仓库 背景方法处理问题 背景 先进行了代码编写,后续想放入仓库方便大家一起合作开发,此时需要在已有代码的基础上建立仓库。 方法 首先在Gitee或者GitHub上创建仓库,这里以Gitee为例。创建完后,我们可以…

Kubernetes(K8S)集群部署实战

目录 一、准备工作1.1、创建3台虚拟机1.1.1、下载虚拟机管理工具1.1.2、安装虚拟机管理工具1.1.3、下载虚Centos镜像1.1.4、创建台个虚拟机1.1.5、设置虚拟机网络环境 1.2、虚拟机基础配置(3台虚拟机进行相同处理)1.2.1、配置host1.2.2、关闭防火墙1.2.3…

五、OpenAi之函数调用(Function Calling)(二)

聊天补全模型调用函数 这个笔记包含怎样使用聊天补全API结合外部的函数调用来扩展GPT模型的能力 tools在聊天补全API中是一个可选的参数,可以定义指定的函数调用。目的是能使模型生成遵循指定规范的函数参数。请注意:API实际上不执行任何的函数调用。由…

高校疫情防控系统的全栈开发实战

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

大模型入门

大模型 一般指1亿以上参数的模型,目前万亿级参数以上的模型也有了。 参数大小 175B、60B、540B等,这些一般指参数的个数,B是Billion/十亿的意思,175B是1750亿参数,这是ChatGPT大约的参数规模。 显存占用 6B的大模…

多模态基础--- word Embedding

1 word Embedding 原始的单词编码方式: one-hot,维度太大,不同单词之间相互独立,没有远近关系区分。 wordclass,将同一类单词编码在一起,此时丢失了类别和类别间的相关信息,比如class1和class3…

[java基础揉碎]二维数组

目录 什么是二维数组: 二维数组在内存中的布局: 动态初始化: 静态初始化: 杨辉三角: 使用细节和注意事项: 什么是二维数组: 1.从定义形式上看 int[][] 2.可以这样理解,原来的一维数组的每个元素是一维数组,就构成二维数…

第5个-模糊加载

Day 5 - Blurry Loading 1. 演示效果 2. 分析思路 变化过程 数字从 0 不断增长到 100;中间的百分比数字逐渐消失,即透明度 opacity 从 1 到 0;背景图片从模糊变为清晰,滤镜 filter.blur()的参数设置为从 30px 到 0px。 小 tips…

Java 基于 SpringBoot+Vue 的校园交友网站,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

同学,请实现一个扫码登录

马上要到春节了,小伙伴们的公司是不是已经可以申请请假调休呢?虽然今年刚入职没有年假(好像国家不是这么规定的,但也不好跟公司硬杠),大小周的我已经攒了 7 天调休,也可以提前回家过年啦! 即使是年底&…

optee imx8mm

总仓库 git clone https://github.com/Xsyin/imx8mqevk.git -b container_region 替换imx8mqevk中的optee-client git clone https://github.com/nxp-imx/imx-optee-client.git -b lf-5.15.32_2.0.0 用 5.15.32 kernel 会有如下报错,需要将optee os升级到分支 lf-…

Istio复习总结:xDS协议、Istio Pilot源码、Istio落地问题总结

1、xDS协议 1)、xDS是什么 xDS是一类发现服务的总称,包含LDS、RDS、CDS、EDS以及SDS。Envoy通过xDS API可以动态获取Listener(监听器)、Route(路由)、Cluster(集群)、Endpoint&…

不同AI分析错误代码的差异:谁更胜一筹?谁才是最强者?结果出乎意料!

先祝大家新春快乐,我已经提前三天上班了~~为了年后新框架能上线运行,这几天没人打扰,能安静地冲一下代码,嘎嘎嘎。 准备 错误代码: ... foreach($arr_config[path] as $value_path) {if(file_exists($value_path)){r…

制作怎么自己搭建一个网站

制作怎么自己搭建一个网站 一.领取一个免费域名和SSL证书,和CDN 1.打开网站链接:https://www.rainyun.com/ycpcp_ 首先创建一个CDN,这里以我加速域名“cdntest.biliwind.com 1”为例 这里就要填写 cdntest.biliwind.com 1 ,而…