[0405].第05节:搭建Redis主从架构
Redis学习大纲
一、3主3从的集群配置:
1.1.集群规划
- 1.分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下:
- 2.每组是一主一从,一共3组,来模拟分片集群,这里我们会在同一台虚拟机中开启2个redis实例,实现一主一从,信息如下:
IP | PORT | 角色 |
---|---|---|
192.168.111.175 | 6381 | master |
192.168.111.175 | 6382 | slave |
192.168.111.172 | 6383 | master |
192.168.11.172 | 6384 | slave |
192.168.111.174 | 6385 | master |
192.168.111.174 | 6386 | slave |
1.2.新建6个实例
- 1.在3台服务器上新建目录:mkdir -p /myredis/cluster
- 2.在192.168.111.172服务器上,
在/myredis/cluster目录
下,新建配置文件,命名为redisCluster6381.conf 和 命名为redisCluster6382.conf
- 4.在192.168.111.174服务器上,
在/myredis/cluster目录
下,新建配置文件,命名为redisCluster6383.conf 和 命名为redisCluster6384.conf - 5.在192.168.111.175服务器上,
在/myredis/cluster目录
下,新建配置文件,命名为redisCluster6385.conf 和 命名为redisCluster6386.conf
1.3.启动6台实例:
- 1.在192.168.111.175服务器上启动81和82实例:
- 2.在192.168.111.172服务器上启动83和84实例:
- 3.192.168.111.174服务器上启动85和86实例:
1.4.创建集群环境:
- 1.虽然服务启动了,但是目前每个服务之间都是独立的,没有任何关联。
- 2.我们需要执行命令来创建集群,
在Redis5.0之前创建集群比较麻烦
,5.0之后集群管理命令都集成到了redis-cli中 - 3.命令格式如下:
redis-cli --cluster
或者./redis-trib.rb
:代表集群操作命令create
:代表是创建集群--replicas 1
或者--cluster-replicas 1
:指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1)
得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master
redis-cli --cluster create --cluster-replicas 1 192.168.111.175:6381 192.168.111.175:6382 192.168.111.172:6383 192.168.111.172:6384 192.168.111.174:6384 192.168.172.174:6385
-
4.上面的命令运行后的样子:
-
5.这里输入yes,则集群开始创建:
1.5.集群测试:
a.查看集群状态:
- 1.方式1:以6381为切入点,查看集群的状态,命令是
info replication
- 方式2:以6381为切入点,查看集群的状态,命令是
cluster nodes
二、3主3从的Redis集群读写:
2.1.对6381新增两个key来分析:
- 1.尝试连接6381节点,存储key时,发现有的key可以存储,有的不可以:
2.2.为何报错:
- 一定要注意槽位的范围区间,需要路由到位
2.3.如何解决:
- 1.集群操作时,需要给
redis-cli
加上-c
参数才可以:
三、主从容错切换迁移案例:
四、主从扩容案例:
二、集群伸缩:
4.1.获取redis集群操作环境下的命令
- 1.
redis-cli --cluster
提供了很多操作集群的命令,可以通过下面方式查看:
- 2.比如,添加节点的命令:
4.2.集群伸长:
a.需求分析:
- 1.需求:向集群中
添加一个新的master节点,并向其中存储 num = 10
- 2.这里需要两个新的功能:
- 添加一个节点到集群中
- 将部分插槽分配到新插槽
- 3.添加过程:
- 启动一个新的redis实例,端口为7004
- 添加7004到之前的集群,并作为一个master节点
- 给7004节点分配插槽,使得num这个key可以存储到7004实例
b.创建新的redis实例
- 1.创建一个文件夹:
mkdir 7004
- 2.拷贝配置文件:
cp redis.conf /7004
- 3.修改配置文件:
sed -i /s/6379/7004/g 7004/redis.conf
- 4.启动
redis-server 7004/redis.conf
c.添加新节点到集群:
- 1.添加节点的语法如下:
执行命令:
redis-cli --cluster add-node 192.168.150.101:7004 192.168.150.101:7001
- 2.通过命令查看集群状态:
redis-cli -p 7001 cluster nodes
- 3.如图,7004加入了集群,并且默认是一个master节点,
但是,可以看到7004节点的插槽数量为0,因此没有任何数据可以存储到7004上
d.转移插槽
- 1.我们要将num存储到7004节点,因此需要先看看num的插槽是多少:
如上图所示,num的插槽为2765.
- 2.我们可以
将0~3000的插槽从7001转移到7004
,命令格式如下:
- 3.具体命令如下:
建立连接:
结果是:
询问要移动多少个插槽,我们计划是3000个:
新的问题来了:
那个node来接收这些插槽??
显然是7004,那么7004节点的id是多少呢?
复制这个id,然后拷贝到刚才的控制台后:
- 这里询问,你的插槽是从哪里移动过来的?
- all:代表全部,也就是三个节点各转移一部分
- 具体的id:目标节点的id
- done:没有了
- 这里我们要从7001获取,因此填写7001的id,填完后,点击done,这样插槽转移就准备好了:
- 确认要转移吗?输入yes:
- 然后,通过命令查看结果:
4.3集群缩短:
a.需求介绍:
- 1.集群初识状态是这样的:
- 其中7001、7002、7003都是master,我们计划让7002宕机。
b.自动故障转移
- 1.当集群中有一个master宕机会发生什么呢?直接停止一个redis实例,例如7002:
redis-cli -p 7002 shutdown
- 2.宕机过程:
- 首先是该实例与其它实例失去连接
- 然后是疑似宕机:
- 3.最后是确定下线,自动提升一个slave为新的master:
- 4.当7002再次启动,就会变为一个slave节点了:
c.手动故障转移
- 1.手动故障的情况适用于数据迁移等情况
- 2.利用
cluster failover
命令可以手动让集群中的某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移。 - 3.在slave节点上执行此命令,执行后,这个slave节点对应的主节点就会下线,当前slave节点就会变成master节点
- 4.其流程如下:
- 5.这种failover命令可以指定三种模式:
缺省
:默认的流程,如图1~6歩force
:省略了对offset的一致性校验,第3和第4步就没了takeover
:直接执行第5歩,忽略数据一致性、忽略master状态和其它master的意见
d.案例需求:
- 1.在7002这个slave节点执行手动故障转移,重新夺回master地位
- 2.步骤如下:
- 利用redis-cli连接7002这个节点
- 执行cluster failover命令
- 3.如图:
- 4.效果:
相关文章:
![](https://i-blog.csdnimg.cn/blog_migrate/80136148c4194ffac36afd146a82e7a1.png)
[0405].第05节:搭建Redis主从架构
Redis学习大纲 一、3主3从的集群配置: 1.1.集群规划 1.分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下: 2.每组是一主一从&#x…...
![](https://i-blog.csdnimg.cn/direct/c45ea20fc1a04089927927c983f4f843.png)
6 分布式限流框架
限流的作用 在API对外互联网开放的情况下,是无法控制调用方的行为的。当遇到请求激增或者黑客攻击的情况下,会导致接口占用大量的服务器资源,使得接口响应效率的降低或者超时,更或者导致服务器宕机。 限流是指对应用服务进行限制…...
![](https://i-blog.csdnimg.cn/direct/393e7572536740c78fbcc4dc0f524ac2.png)
sosadmin相关命令
sosadmin命令 以下是本人翻译的官方文档,如有不对,还请指出,引用请标明出处。 原本有个对应表可以跳转的,但是CSDN的这个[](#)跳转好像不太一样,必须得用html标签,就懒得改了。 sosadmin help 用法 sosadm…...
![](https://i-blog.csdnimg.cn/direct/f4a7ae796e6e4f4f9f731b30b8fed96f.png)
关于大数据的基础知识(四)——大数据的意义与趋势
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于大数据的基础知识(四&a…...
![](https://i-blog.csdnimg.cn/direct/db0b39702c0740089717072d13644716.png)
【EI,Scopus检索 | 往届均已检索见刊】第四届智能系统、通信与计算机网络国际学术会议(ISCCN 2025)
重要信息: 大会官网:更多详情【论文投稿】 截稿时间:以官网信息为准 大会时间:2025年2月21-23日 接受/拒稿通知:投稿后3-5个工作日内 收录检索:EI,Scopus 出版信息: 本会议所有…...
![](https://www.ngui.cc/images/no-images.jpg)
smplx blender插件笔记
目录 liunx安装: liunx安装: pip install smplx 这个创建模型报错 SMPL_blender_addon...
![](https://i-blog.csdnimg.cn/direct/2a4dacb754a74d40bb0658f225877fe7.png#pic_center)
【算法】移除元素
今天讲的是力扣题目的题解: 力扣题目: 72.移除元素 题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不…...
![](https://www.ngui.cc/images/no-images.jpg)
【后端面试总结】设计一个分布式锁需要考虑哪些东西
分布式锁是我们在分布式场景中经常用到的一种技术,在后端面试中也是出镜率很高,那么我们设计分布式锁的时候应该从那几方面去考虑呢 实现分布式锁需要考虑的点 设置超时时间 设置超时时间的目的是为了避免这个场景:进程A拿了锁,…...
![](https://www.ngui.cc/images/no-images.jpg)
awr报告无法生成:常见案例与解决办法
awr报告无法生成:常见案例与解决办法 STATISTICS_LEVEL设置过低数据库打开状态不对主库隐含参数设置错误MMON子进程被SuspendSYS模式统计信息过期WRH$_SQL_PLAN表数据量太大AWR绑定变量信息收集超时撞上数据库Bug 9040676STATISTICS_LEVEL设置过低 STATISTICS_LEVEL设置为BAS…...
![](https://www.ngui.cc/images/no-images.jpg)
Hadoop 生态之 kerberos
参考链接 https://winway.github.io/2022/04/02/kerberos-ranger/ https://ieevee.com/tech/2016/06/22/ranger-2.html kerberos解决”who are you“的问题 ranger解决”what you can do“的问题 LDAP 轻型目录访问协议(英文:Lightweight Director…...
![](https://www.ngui.cc/images/no-images.jpg)
【文件I/O】文件持久化
这篇文章详细讲解的是 理解在Linux操作系统中输入/输出(I/O)编程与文件操作的关系。 在计算机编程中,输入/输出编程(I/O 编程) 是一个重要的概念,指的是通过程序与外部世界(如用户输入、文件、…...
![](https://i-blog.csdnimg.cn/direct/d11547e6ff0946ad9b7d2b891a28d06a.png)
USB学习——基本概念
文章目录 USB(Universal Serial Bus)概述USB系统的描述USB总线传输方式USB的拓扑结构 USB的连接模型USB控制器及分类USB描述符USB 端点USB枚举过程USB 四种传输类型USB 事务批量传输(Bulk)中断传输(Interrupt)等时传输(Isochronous)控制传输(Control)端点…...
![](https://i-blog.csdnimg.cn/direct/06a111f36a0d4a8a85d9df2b1ca3860e.png)
python-leetcode-三数之和
15. 三数之和 - 力扣(LeetCode) class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort() # 排序n len(nums)res []for i in range(n):# 剪枝:如果当前数 > 0,三数之和不可能为 0if nums[i]…...
![](https://www.ngui.cc/images/no-images.jpg)
springboot整合拦截器
1.首先创建拦截器类: package com.example.interceptor;import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.sp…...
![](https://i-blog.csdnimg.cn/direct/094bec39f44d4f7e898d29aff13fd3ec.png)
B树与B+树:数据库索引的秘密武器
想象一下,你正在构建一个超级大的图书馆,里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式,它们都能帮助你快速找到想要的书籍,但各有特点。 B树就像是一个传统的图书馆摆放方式: 1. 书籍摆放&…...
![](https://www.ngui.cc/images/no-images.jpg)
Lua语言中常用的字符串操作函数
string.sub(s, i, j) 功能: 截取字符串 s 中从位置 i 到位置 j 的子字符串。 local s "Hello, Lua!" print(string.sub(s, 1, 5)) -- 输出 "Hello" print(string.sub(s, 8, 11)) -- 输出 "Lua!" string.len(s) 功能:将字符串长度…...
![](https://www.ngui.cc/images/no-images.jpg)
HOW - Form 表单确认校验两种模式(以 Modal 场景为例)
目录 一、背景二、具体1. 模式一:点击确认进行校验提示2. 模式二:确认按钮依赖于表单内容实现说明 一、背景 基于react、antd form分别实现如下两种模式: 1、一个 Modal,点击确认进行校验提示2、一个 Modal,确认按钮…...
![](https://i-blog.csdnimg.cn/direct/c0ddb912155f4879bb65d30e9576c808.png)
LabVIEW部署Web服务
目录 LabVIEW部署Web服务1、创建项目2、创建Web服务3、新建WebVI3.1、使用GET方法3.2、使用POST方法 4、 部署和对应URL4.1、应用程序:80804.2、本地调试:80094.3、NI Web服务器:9090(禁用) 5、测试5.1、测试GET方法5.2、测试POST方法 6、实际…...
![](https://i-blog.csdnimg.cn/direct/3c2ab220a9114f0295142e6b8e3cd3c4.png)
进程件通信——网络通信——TCP
网络抓包工具:wireshark 抓取经过设备网卡的数据。 操作: 1. sudo wireshark 2. 选择要抓取的网卡----》any 3. 设置抓取的过滤条件 4. 进行网络通信 5. 分析数据 UDP: 用户数据报协议 UDP: 用户数据报协议 特点ÿ…...
![](https://i-blog.csdnimg.cn/img_convert/5c68d2ea14cb574b782f1d69872bbc3a.png)
【数据库】三、SQL语言
文章目录 三、SQL语言1 概述2 数据定义(DDL)2.1 定义数据库2.2 定义基本表2.3 修改基本表2.4 删除基本表 3 数据操作(DML)3.1 数据查询3.1.1 单表查询3.1.2 连接查询3.1.3 嵌套查询3.1.4 集合查询 3.2 数据更新3.2.1 插入数据3.2.2 修改数据3.2.3 删除数据 4 数据控制(DCL)5 视…...
![](https://www.ngui.cc/images/no-images.jpg)
Python对象的序列化和反序列化工具:Joblib与Pickle
在Python中,序列化是将内存中的对象转换为可存储或传输的格式的过程。常见的序列化格式有JSON、YAML、Pickle和Joblib等。其中,Pickle和Joblib是最常用的用于序列化和反序列化Python对象的工具。虽然这两者有很多相似之处,但它们在某些方面有…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring Boot3 配合ProxySQL实现对 MySQL 主从同步的读写分离和负载均衡
将 ProxySQL 配合 Spring Boot 使用,主要的目的是在 Spring Boot 应用程序中实现对 MySQL 主从同步的读写分离和负载均衡。这样,你可以利用 ProxySQL 自动将写操作路由到主库,而将读操作路由到从库。 1. 准备工作 确保你的 MySQL 主从同步环…...
![](https://img-blog.csdnimg.cn/img_convert/afd69b45eb77d0f51a9fc67a011f5312.jpeg)
量子计算遇上人工智能:突破算力瓶颈的关键?
引言:量子计算遇上人工智能——突破算力瓶颈的关键? 在数字化时代的浪潮中,人工智能(AI)正以前所未有的速度改变着我们的生活,从语音助手到自动驾驶,从医学诊断到金融分析,无不彰显其…...
![](https://i-blog.csdnimg.cn/direct/9f1b2f02ab724c0387dfc67a9f32c711.png)
【Unity插件】解决移动端UI安全区问题 - Safe Area Helper
在移动端设计界面时,必须要考虑的就是UI的安全区。 Unity本身也提供了Safearea的API。 但在asset store时已经有人提供了免费的插件(Safe Area Helper),我们可以直接使用。 插件链接: https://assetstore.unity.com/p…...
![](https://www.ngui.cc/images/no-images.jpg)
JSON.stringify 实现深度克隆的缺陷
在前端开发中,深克隆(Deep Clone)和浅克隆(Shallow Clone)是常见的操作。浅克隆和深克隆的区别主要体现在对象内部嵌套对象的处理方式上。 1. 浅克隆(Shallow Clone) 浅克隆是指创建一个新对象…...
![](https://i-blog.csdnimg.cn/direct/02b6673fa6a04f47861e77be53f77d80.png)
深度解析如何使用Linux中的git操作
1.如何理解版本控制 →Git&&gitee||github 多版本控制面对善变的甲方 版本控制是一种用于管理文件或代码变更的系统,帮助团队或个人追踪项目的历史记录,并支持多方协作开发。它在软件开发和文档管理中尤为重要,但也适用于其他需要追…...
![](https://i-blog.csdnimg.cn/direct/2681db1202d342d79bb28d8ca2468ccf.png)
el-table 合并单元格
参考文章:vue3.0 el-table 动态合并单元格 - flyComeOn - 博客园 <el-table :data"tableData" border empty-text"暂无数据" :header-cell-style"{ background: #f5f7fa }" class"parent-table" :span-method"obj…...
![](https://www.ngui.cc/images/no-images.jpg)
Redis 三大问题:缓存穿透、缓存击穿、缓存雪崩
Redis 作为高性能的内存数据库,广泛应用于缓存场景。然而,在实际使用中,可能会遇到三大经典问题:缓存穿透、缓存击穿 和 缓存雪崩。这些问题如果不加以解决,可能会导致系统性能下降甚至崩溃。 1. 缓存穿透 问题描述 …...
![](https://www.ngui.cc/images/no-images.jpg)
常用字符串处理函数
常用字符串处理函数 strcspn函数原型参数说明返回值使用示例注意事项 strpbrk函数原型参数说明返回值使用示例 strcasecmp函数原型参数说明返回值使用示例注意事项 strcspn strcspn 是一个 C 和 C 标准库函数,用于计算一个字符串中不包含任何指定字符的最长前缀的长…...
![](https://i-blog.csdnimg.cn/img_convert/d4650b69e387ef1c51998b8d2dd446f7.png)
Pathview包:整合表达谱数据可视化KEGG通路
Pathview是一个用于整合表达谱数据并用于可视化KEGG通路的一个R包,其会先下载KEGG官网上的通路图,然后整合输入数据对通路图进行再次渲染,从而对KEGG通路图进行一定程度上的个性化处理,并且丰富其信息展示。(KEGG在线数…...
![](https://img-blog.csdnimg.cn/20200915135651839.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3UwMTE2NzUzMzQ=,size_16,color_FFFFFF,t_70)
投简历网站/网站如何推广运营
1、安装 Scala brew install scala 2、查看是否安装成功及进入 Scala 命令 scala 若成功安装,界面为: 3、退出命令行模式 :quit 4、补充命令...
网站建设与维护考试卷/首页排名优化公司
既上一篇文章之后又看到一篇文章关于教育的,当今日新月异的生活,给我们带来高质的生活的同时也引发了我们深刻的思考。 今天,即使你幽居偏远山沟,通过视频,也可以面对面地和海外朋友对话交流;你要学金融&am…...
![](https://s3.51cto.com/wyfs02/M00/1A/57/wKioL1MUpSSAftbDAAFlfT0D8c4906.jpg)
厦门定制网站建设/网络公司名字
关于前端图表开发有很多基于Flash,HTML5,JavaScript的开源组件,而Java开源图表组件JFreeChart也是众所周知,网上关于JFreeChart的资料非常之多,可见其在Java开发中应用的相当广泛。写这篇文章一是为了记录一下关于JFre…...
![](/images/no-images.jpg)
贵阳白云区疫情最新情况今天/宁波seo网站推广
二叉树结构的实现1.二叉树相关操作2.二叉树的存储结构2.1. 二叉树的顺序存储结构2.2. 二叉链表存储结构2.3 三叉链表存储结构3.二叉树的遍历的操作3.1. 递归遍历二叉树3.2. 非递归遍历二叉树3.2.1. 基于任务分析的二叉树遍历非递归算法3.2.2. 基于搜索路径分析的二叉树遍历的非…...
![](/images/no-images.jpg)
wordpress商城怎么样/100%上热门文案
2020/7/28 依旧是和sql有着不解之缘的一天 总结一下在python中用sql语句的一些汇总 insertinsert into tablename(column1,column2...) values(value1,value2...) insert into tablename(column1,column2...) values(%s,%s...)---->然后你要传数据到这个里面去࿰…...
![](https://img-blog.csdnimg.cn/img_convert/66627a337fbe956c0a4f34bf39167add.png)
网络营销推广及优化方案/东莞网络推广优化排名
1.一段java程序是如何运行起来的呢? Java源文件,通过编译器,产生.Class字节码文件,字节码文件通过Java虚拟机中的解释器,编译成特定及其上的机器码,那Java虚拟机又是怎样加载java程序并执行起来的呢&#…...