[0405].第05节:搭建Redis主从架构

ops/2025/1/11 22:02:24/

Redis学习大纲


一、3主3从的集群配置:

1.1.集群规划

  • 1.分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下:
    在这里插入图片描述
  • 2.每组是一主一从,一共3组,来模拟分片集群,这里我们会在同一台虚拟机中开启2个redis实例,实现一主一从,信息如下:
IPPORT角色
192.168.111.1756381master
192.168.111.1756382slave
192.168.111.1726383master
192.168.11.1726384slave
192.168.111.1746385master
192.168.111.1746386slave

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参数才可以:
    在这里插入图片描述

三、主从容错切换迁移案例:


四、主从扩容案例:

二、集群伸缩:

redis_75">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实例

redis_90">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.效果:
    在这里插入图片描述

http://www.ppmy.cn/ops/149258.html

相关文章

【YOLOv8杂草作物目标检测】

YOLOv8杂草目标检测 算法介绍模型和数据集下载 算法介绍 YOLOv8在禾本科杂草目标检测方面有显著的应用和效果。以下是一些关键信息的总结: 农作物幼苗与杂草检测系统:基于YOLOv8深度学习框架,通过2822张图片训练了一个目标检测模型&#xff…

《零基础Go语言算法实战》 【题目 1-15】字符串的比较

《零基础Go语言算法实战》 【题目 1-15】字符串的比较 请用 Go 语言实现一个算法,在不使用额外存储结构的条件下判断一个字符串的所有字 符是否全都相同,字符串的长度不能超过 3000。 【解答】 ① 思路。 本题需要实现一个算法来判断字符串中的所有…

通过LlaMA-Factory导出的模型部署到Ollama

LlaMA-Factory导出的模型转换格式 仓库地址:https://github.com/ggerganov/llama.cpp git clone仓库之后,下载相关依赖: cd /opt/gl/llama.cpp-master/llama.cpp-master pip install -r requirements.txt转换大模型格式 转换为gguf格式 pyt…

iPhone升级iOS18黑屏?2025最新修复办法分享

你是不是迫不及待想试试苹果最新的 iOS 18 系统,结果升级过程或者升级后出现黑屏问题?最近不少用户反馈出iPhone升级最新iOS18出现黑屏问题。 不担心,这个问题其实很好解决,下面就给大家分享升级iOS18出现黑屏的问题和解决办法&am…

OpenCV相机标定与3D重建(53)解决 Perspective-3-Point (P3P) 问题函数solveP3P()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 根据 3 个 3D-2D 点对应关系找到物体的姿态。 cv::solveP3P 是 OpenCV 中的一个函数,用于解决 Perspective-3-Point (P3P) 问题。该问…

Redis 安装与 Spring Boot 集成指南

安装 Redis 和将其与 Spring Boot 应用集成是构建高效缓存解决方案的常见步骤。以下是详细的指南,帮助你在本地环境中安装 Redis,并在 Spring Boot 项目中配置和使用它。 1. 安装 Redis Windows 环境 Redis 官方并不直接支持 Windows,但你…

自动驾驶领域的基础模型综述

论文地址:Forging Vision Foundation Models for Autonomous Driving: Challenges, Methodologies, and Opportunitie 0 Abstract 论文摘要解读 这篇论文讨论了**大规模基础模型(Foundation Models)在人工智能(AI)领…

Jmeter全流程性能测试实战

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 项目背景: 我们的平台为全国某行业监控平台,经过3轮功能测试、接口测试后,98%的问题已经关闭,决定对省平台向…