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

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

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

相关文章

6.18云服务器大促盘点,错过一次,再等一年!

随着云计算技术的飞速发展,云服务器已成为企业和个人构建和扩展在线业务的首选平台。特别是在大型促销活动如618年中大促期间,云服务提供商纷纷推出极具吸引力的优惠,以降低用户上云的门槛。以下是对当前市场上几个主流云服务提供商的优惠活动…

德克萨斯大学奥斯汀分校自然语言处理硕士课程汉化版(第六周) - 预训练模型

预训练模型 1. 预训练模型介绍 1.1. ELMo1.2. GPT1.3. BERT 2. Seq2Seq 2.1. T52.2. BART 3. Tokenization 1. 预训练模型介绍 在预训练语言模型出现之前,统计语言模型(如N-gram模型)是主流方法。这些模型利用统计方法来预测文本中的下一个…

设计模式-外观(门面)模式(结构型)

外观模式 外观模式又称门面模式(结构型模式),它是一个可以屏蔽系统复杂性的设计模式。俗话说没有什么问题是加一层“介质”解决不了的,如果有那就在加一层。在开发过程中肯定封装过Utils类,我认为这就是一种门面模式&…

亘古真知

目录 一,概述 二,个人面板 三,科技面板 四,手牌 五,回合 1,行动 (1)打造 (2)学习 (3)归档 (4)挖掘 …

Java——数组排序和查找

一、排序介绍 1、排序的概念 排序是将多个数据按照指定的顺序进行排列的过程。 2、排序的种类 排序可以分为两大类:内部排序和外部排序。 3、内部排序和外部排序 1)内部排序 内部排序是指数据在内存中进行排序,适用于数据量较小的情况…

【SQLAlChemy】如何连接数据库?

使用SQLAlChemy连接数据库 导入包 首先,导入创建数据库引擎的包。 from sqlalchemy import create_engine编写数据库配置 SQLALCHEMY_DATABASE_URL "mysql://root:123456789127.0.0.1:3306/tortoise"字段解释: mysql::这是数…

持续警惕火灾风险:学校可燃气体报警器的定期校准检验

可燃气体报警器在学校中的安装、检验和校准对于保护师生生命安全至关重要。 接下来,佰德将探讨可燃气体报警器在学校中的必要性,以及相关实际案例和数据,为您呈现一个安全的学习环境。 一、学校安全不能掉以轻心 学校是培养未来的摇篮&…

【CS.SE】端午节特辑:Docker容器化技术详解与实战

端午节, 先祝愿大家端午安康,阖家幸福, 哈哈!这篇讲下Docker这一现代软件开发中不可或缺的技术。软件工程涉及软件开发的整个生命周期,包括需求分析、设计、构建、测试、部署和维护。Docker作为一种容器化技术,直接关联到软件部署…

云服务器CPU和内存直接被zzh恶意挖矿程序打满,如何解决?

回顾 最近在服务器上面部署网站,刚开始使用还是没问题的,当时一段时间之后发现CPU和内存总是被打满,本地没有跑大的应用,主要有mysql、nginx、redis,一度还以为是nginx 的问题,但是后来排除了。之后使用ht…

Android 11 低电量自动关机失效

Android 11 低电量自动关机 概述 安卓系统设计了低电关机功能,旨在当手机电池电量过低时自动关机,以保护手机硬件和数据安全。该功能由以下几个部分组成: 电池电量监测: 安卓系统通过 BatteryService 组件持续监测电池电量。BatteryService…

小主机折腾记24

好久不更新,最近折腾的事如下 1.10块钱自提买了个半高机箱,15086140,把之前拆机的H61m-A/M32AA/DP_MB与200w航嘉电源装了进去,额外买了半高pcie转接了个m2位,江波龙64g安装了win10专业版,最后卖了176块钱&a…

实战分析:记录一下线上OOM排查(原创)

记录背景 公司仓库系统经常反馈出现系统使用不了503的情况,自动挂掉。 启动脚本添加命令 以为是程序发生OOM导致内存溢出,添加命令,发生内存溢出输出文件 -XX:HeapDumpOnOutOfMemoryError -XX:ErrorFile./errorfile.log -XX:HeapDumpPath.…

Windows无法安装到这个硬盘空间。选定的分区上启用了BitLocker驱动器加密。请在控制面板中暂停(也称为禁用)BitLocker,然后重新开始安装。

我们安装操作系统的时候,到了选择安装分区的地方,我们选中的分区提示“无法在驱动器的分区上安装Windows”,然后我们点击显示详细信息,提示如图下所示 分析原因,可能是之前的分区未进行格式化。但是这个时候我们无法格…

【Python预处理系列】深入理解过采样技术及其Python实现

目录 一、过采样简介 二、过采样的实现方法 三、过采样和欠采样是数据增强吗 四、Python实现SMOTE过采样 (一) 生成不平衡数据集 (二) 将数据集转换为DataFrame,便于展示 (三) 应用SMOTE算法进行过采样 &…

【Centos7】CentOS 7下的PyTorch安装策略:高效实践指南

【Centos7】CentOS 7下的PyTorch安装策略:高效实践指南 大家好 我是寸铁👊 总结了一篇【Centos7】CentOS 7下的PyTorch安装策略:高效实践指南✨ 喜欢的小伙伴可以点点关注 💝 前言 由于需要跑深度学习,要用到pytorch&a…

重塑楼宇管理:智慧管控可视化开启高效新篇章

借助图扑智慧楼宇管控可视化技术,实现实时监控与智能化管理,快速响应潜在问题,确保楼宇安全、节能和高效运行。

Git之解决重复输入用户名和密码(三十九)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

快速入门Linux及使用VSCode远程连接Linux服务器

在当前的技术环境中,Linux操作系统因其强大的功能和灵活性而广受欢迎。无论你是开发人员、系统管理员还是技术爱好者,学习Linux都是提升技术技能的重要一步。本文将介绍如何快速入门Linux,并使用Visual Studio Code(VSCode&#x…

时光正好保剑锋的抱治百病与成年人的世界

《时光正好》:保剑锋的“抱治百病”与成年人的世界在繁忙的都市里,每个角落上演着各自的人生戏码。而在这些戏码中,由保剑锋主演的《时光正好》无疑成为了近期引人注目的焦点。这部电视剧以其真实而深刻的剧情,让我们看到了成年人…

SpringBoot+Vue实现前后端分离基本的环境搭建

目录 一、Vue项目的搭建 (1)基于vite创建vue项目 (2)引入elementplus (3)启动后端服务,并测试 二、SpringBoot项目的搭建 (1)通过idea创建SpringBoot项目 &#x…