基于哈希槽的docker三主三从redis集群配置

目录

一、三主三从redis集群配置

1、关闭防火墙+启动docker后台服务

2、新建6个docker容器redis实例

3、进入容器redis-node-1为6台机器构建集群关系

3.1进入容器

3.2构建主从关系

4、查看集群状态

4.1链接进入6381作为切入点

二、主从容错切换迁移按例

1、数据读写存储(防止路由失效加-c参数)

2、查看集群信息

3、主6381和从机切换,先停止主机6381

4、还原之前的3主3从

三、主从扩容按例,四主四从

1、新建6387、6388两个节点,然后观察是否有8个节点。

2、进入6387容器实例内部,将新增的6387节点(空槽号)作为master节点加入原集群

3、重新分派槽号:

4、为主节点6387分配从节点6388

四、主从缩容案例(6387和6388下线)

1、先清除从节点6388,清出来的槽号重新分配,再删除6387,恢复三主三从。

2、删除6387

3、最后检查集群情况


一、三主三从redis集群配置

1、关闭防火墙+启动docker后台服务

systemctl stop firewalld
systemctl start docker

2、新建6个docker容器redis实例

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

注解:

docker run 创建并运行docker容器实例 

--name redis-node-6   容器名字

--net host                        使用宿主机的IP和端口,默认

--privileged=true                获取宿主机root用户权限

-v /data/redis/share/redis-node-6:/data         容器卷,宿主机地址:docker内部地址

redis:6.0.8redis                镜像和版本号

--cluster-enabled yes                开启redis集群

--appendonly yes                开启持久化

--port 6386                        redis端口号

3、进入容器redis-node-1为6台机器构建集群关系

3.1进入容器

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

3.2构建主从关系

注意自己的真实ip地址
redis-cli --cluster create 192.168.80.171:6381 192.168.80.171:6382 192.168.80.171:6383 192.168.80.171:6384 192.168.80.171:6385 192.168.80.171:6386 --cluster-replicas 1--cluster-replicas 1表示为每一个master创建一个slave节点

4、查看集群状态

4.1链接进入6381作为切入点

redis-cli -p 6381
cluster info
cluster nodes

二、主从容错切换迁移按例

1、数据读写存储(防止路由失效加-c参数)

redis-cli -p 6381 -c

不加-c的时候

加-c的时候

2、查看集群信息

redis-cli --cluster check 192.168.80.171:6381

3、主6381和从机切换,先停止主机6381

docker stop redis-node-1

6381作为1号主机分配的从机以实际情况为准,具体是几号机器就是几号

再次查看集群信息

6381宕机了,6384上位成为了新的master。
备注:本次脑图笔记6381为主下面挂从6384。
每次案例下面挂的从机以实际情况为准,具体是几号机器就是几号

4、还原之前的3主3从

先启用6381

docker start redis-node-1

发现node1变成从了

再停止6384

docker stop redis-node-4

node1变成主了,node4宕机状态。

再启动6384

docker start redis-node-5

发现node1还是主,node4变成从了。

三、主从扩容按例,四主四从

1、新建6387、6388两个节点,然后观察是否有8个节点。

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

2、进入6387容器实例内部,将新增的6387节点(空槽号)作为master节点加入原集群

docker exec -it redis-node-7 bash
[root@centos7-node1 ~]# docker exec -it redis-node-7 bash
root@centos7-node1:/data# redis-cli --cluster add-node 192.168.80.171:6387 192.168.80.171:6381

将新增的6387作为master节点加入集群
redis-cli --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群

检查集群情况第一次

3、重新分派槽号:

redis-cli --cluster reshard 192.168.80.171:6381

检查集群情况第2次

为什么6387是3个新的区间,以前的还是连续?
重新分配成本太高,所以前3家各自匀出来一部分,从6381/6382/6383三个旧节点分别匀出1364个坑位给新节点6387

4、为主节点6387分配从节点6388

root@centos7-node1:/data# redis-cli --cluster add-node 192.168.80.171:6388 192.168.80.171:6387 --cluster-slave --cluster-master-id c5bdc38d4edf816ea7e8e53fff8ba54d455ec81c命令:redis-cli --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

检查集群情况第3次


四、主从缩容案例(6387和6388下线)

1、先清除从节点6388,清出来的槽号重新分配,再删除6387,恢复三主三从。

redis-cli --cluster del-node 192.168.80.171:6388 06bcca243eedfe3d20582dc8f06e795a5b384adb         redis-cli --cluster reshard 192.168.80.171:6381
#将6387的槽号清空,重新分配,本例将清出来的槽号都给6381

将6387的槽位全部分配给6381

检查集群情况第一次

输入4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端

2、删除6387

redis-cli --cluster del-node 192.168.80.171:6387 c5bdc38d4edf816ea7e8e53fff8ba54d455ec81c

3、最后检查集群情况

最后恢复成三主三从了

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

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

相关文章

Shell脚本基础 以及 变量和引用

目录 Shell脚本基础 Shell的基本元素 Shell脚本规范 Shell脚本编写方式 交互式执行 作为程序文件执行 Shell脚本执行方式 bash for_test.sh sh for_test.sh ./for_test.sh source for_test.sh Shell退出状态 变量和引用 什么是变量 变量的命名 变量的作用范围 …

数据库原理(含思维导图)

数据库原理笔记,html与md笔记已上传 1.绪论 发展历程 记住数据怎么保存,谁保存数据,共享性如何,独立性如何 人工管理阶段 数据不保存应用程序管理数据数据不共享数据不具有独立性 文件系统阶段 数据可以长期保存文件系统管…

设计模式(6):桥接模式

一.桥接模式核心要点 处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关系。 \color{red}{处理多层继承结构,处理多维度变化的场景,将各个维度设计成独立…

最好的超声波清洗机排行榜有哪些?好评爆表超声波清洗机盘点

在如今这个视觉为王的时代,一副清晰的眼镜不仅是视力矫正的工具,更是提升形象的重要配饰。然而,眼镜的日常清洁往往让人头疼,传统的清洗方法既费时又难以彻底去除镜片上的污渍和细菌。这时,一台高效的超声波清洗机便成…

类与对象中C++

加油!!! 文章目录 前言 一、类的6个默认成员函数 ​编辑 二、构造函数 1.概念 三、析构函数 1.概念 2.特性 四、拷贝构造函数 1.概念 2.特征 拷贝构造函数典型调用场景 五、赋值运算符重载 1.运算符重载 2.赋值运算符重载 赋值运算符重载格式…

module ‘numpy‘ has no attribute ‘int‘

在 NumPy 中,如果遇到了错误提示 "module numpy has no attribute int",这通常意味着正在尝试以错误的方式使用 NumPy 的整数类型。从 NumPy 1.20 版本开始,numpy.int 已经不再是一个有效的属性,因为 NumPy 不再推荐使用…

软考 - 系统架构设计师 - 构件组装技术

概念 构件组装是将库中的构件经修改后相互连接,或者将它们和当前开发项目中的软件元素进行连接,最终构成新的目标构件。 构件组装技术是基于构件的软件开发的核心技术,也是构件技术研究的重点和难点。构件组装的目的是利用现有的构件组装成新…

西门子触摸屏SMART 700 IE V3数据记录的记录周期

问题的提出 需要解决的问题:目前我使用的工况是记录2s内速度变化情况,大概需要记录100个点,时间间隔或者说周期还是挺小的。 PLC端 S7-200的编程过程中,这个用填表程序add_to_table指令完成了,但是记录过程最多只能…

Chrome base 库详解:工具类和常用类库

Chrome浏览器使用了一个强大的库名为base,它包括了许多工具类和常用类库,以支持Chrome的底层功能和性能优化。在本文中,我们将详细阐述base库中的每个子项,并提供示例代码来展示其用法。 base 库的基本结构 Chrome的base库是一个…

ActiveMQ Artemis 系列| High Availability 主备模式(消息复制) 版本2.33.0

一、ActiveMQ Artemis 介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理,它完全符合 Java Message Service (JMS) 2.0 规范,并支持多种通信协议,包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Foundation 开发和维护,旨在提供可靠…

数字乡村发展之路:探索农村智慧化新模式

一、引言 随着信息技术的迅猛发展和普及,数字化已经成为推动乡村发展的重要引擎。数字乡村建设旨在通过信息化、智能化手段,提升农村地区的生产生活水平,推动农村经济社会的转型升级。本文旨在探讨数字乡村的发展之路,分析农村智…

BabyAGI源码解读(2)-核心agents部分

话不多说,我们直接进入babyAGI的核心部分,也就是task agent部分。 1. 创建任务agent 这一段代码的任务是创建一个任务,这个函数有四个参数 objective 目标result 结果,dict类型task_list 任务清单task_descritption 任务描述 …

【MySql】利用DataX同步mysql数据,多数据源数据同步方案

你说你知道他们的世界 悲歌三首买一切 买昆仑落脚 蓬莱放思想 买人们的争执酿酒汤 买公主坟的乌鸦 事发之木和东窗之麻 买胭脂河里船行渔歌 黄金世界中万物法则 你我都一样 将被遗忘 郭源潮 你的病也和我的一样 风月难扯 离合不骚 层楼终究误少年 自由早晚乱余生 你我山前没相见…

iOS开发进阶之列表加载图片

iOS开发进阶之列表加载图片 列表加载图片通常使用UITableView或UICollectionView,由于列表中内容数量不确定并且对于图片质量要求也不确定,所以对于图片加载的优化是很有必要的。 首先借鉴前文,我们逐步进行操作,以下是加载1000…

基于springboot实现数据库的加解密

项目地址 https://github.com/Chenchicheng/spring-ibatis-encryption 功能说明 支持使用注解的方式目标类进行加解密支持同一个类多个字段分别使用不同的加密方式支持自定义加密方法 本地调试 pull代码到本地,更换application.yml中的数据库用户名和密码&…

nginx用法以及核心知识详解-可以当作使用nginx的操作手册

前言 nginx的使用真的是非常简单,下载下来解压运行就可以,配置都是再conf文件夹的里的nginx.conf文件里配置,所以对于nginx的上手使用,nginx.conf文件里字段的含义是需要掌握的,然后就是一些nginx的常见问题 nginx核心…

.NET CORE 分布式事务(三) DTM实现Saga及高并发下的解决方案

目录(结尾附加项目代码资源地址) 引言: 1. SAGA事务模式 2. 拆分为子事务 3. 失败回滚 4. 如何做补偿 4.1 失败的分支是否需要补偿 5. 异常 6. 异常与子事务屏障 6.1 NPC的挑战 6.2 现有方案的问题 6.3 子事务屏障 6.4 原理 7. 更多高级场景 7.1 部分…

永磁同步电机初始转子位置检测

/// https://zhuanlan.zhihu.com/p/409887456 ///

vue3+threejs新手从零开发卡牌游戏(二十二):添加己方游戏流程(先后手、抽牌、主要阶段、战斗阶段、结束阶段)

首先在utils/common.ts里定义一些流程相关的变量: const flow ref([ // 游戏流程{name: "抽卡阶段"},{name: "主要阶段"},{name: "战斗阶段"},{name: "结束阶段"}])const flowIndex ref(0) // 当前流程const currentPla…

[C++初阶] 爱上C++ : 与C++的第一次约会

🔥个人主页:guoguoqiang 🔥专栏:我与C的爱恋 本篇内容带大家浅浅的了解一下C中的命名空间。 在c中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称…