当前位置: 首页 > news >正文

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

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

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


四、主从扩容案例:

二、集群伸缩:

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

相关文章:

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

Redis学习大纲 一、3主3从的集群配置: 1.1.集群规划 1.分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下: 2.每组是一主一从&#x…...

6 分布式限流框架

限流的作用 在API对外互联网开放的情况下,是无法控制调用方的行为的。当遇到请求激增或者黑客攻击的情况下,会导致接口占用大量的服务器资源,使得接口响应效率的降低或者超时,更或者导致服务器宕机。 限流是指对应用服务进行限制…...

sosadmin相关命令

sosadmin命令 以下是本人翻译的官方文档,如有不对,还请指出,引用请标明出处。 原本有个对应表可以跳转的,但是CSDN的这个[](#)跳转好像不太一样,必须得用html标签,就懒得改了。 sosadmin help 用法 sosadm…...

关于大数据的基础知识(四)——大数据的意义与趋势

成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于大数据的基础知识(四&a…...

【EI,Scopus检索 | 往届均已检索见刊】第四届智能系统、通信与计算机网络国际学术会议(ISCCN 2025)

重要信息: 大会官网:更多详情【论文投稿】 截稿时间:以官网信息为准 大会时间:2025年2月21-23日 接受/拒稿通知:投稿后3-5个工作日内 收录检索:EI,Scopus 出版信息: 本会议所有…...

smplx blender插件笔记

目录 liunx安装: liunx安装: pip install smplx 这个创建模型报错 SMPL_blender_addon...

【算法】移除元素

今天讲的是力扣题目的题解: 力扣题目: 72.移除元素 题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不…...

【后端面试总结】设计一个分布式锁需要考虑哪些东西

分布式锁是我们在分布式场景中经常用到的一种技术,在后端面试中也是出镜率很高,那么我们设计分布式锁的时候应该从那几方面去考虑呢 实现分布式锁需要考虑的点 设置超时时间 设置超时时间的目的是为了避免这个场景:进程A拿了锁&#xff0c…...

awr报告无法生成:常见案例与解决办法

awr报告无法生成:常见案例与解决办法 STATISTICS_LEVEL设置过低数据库打开状态不对主库隐含参数设置错误MMON子进程被SuspendSYS模式统计信息过期WRH$_SQL_PLAN表数据量太大AWR绑定变量信息收集超时撞上数据库Bug 9040676STATISTICS_LEVEL设置过低 STATISTICS_LEVEL设置为BAS…...

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…...

【文件I/O】文件持久化

这篇文章详细讲解的是 理解在Linux操作系统中输入/输出(I/O)编程与文件操作的关系。 在计算机编程中,输入/输出编程(I/O 编程) 是一个重要的概念,指的是通过程序与外部世界(如用户输入、文件、…...

USB学习——基本概念

文章目录 USB(Universal Serial Bus)概述USB系统的描述USB总线传输方式USB的拓扑结构 USB的连接模型USB控制器及分类USB描述符USB 端点USB枚举过程USB 四种传输类型USB 事务批量传输(Bulk)中断传输(Interrupt)等时传输(Isochronous)控制传输(Control)端点…...

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]…...

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…...

B树与B+树:数据库索引的秘密武器

想象一下,你正在构建一个超级大的图书馆,里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式,它们都能帮助你快速找到想要的书籍,但各有特点。 B树就像是一个传统的图书馆摆放方式: 1. 书籍摆放&…...

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) 功能:将字符串长度…...

HOW - Form 表单确认校验两种模式(以 Modal 场景为例)

目录 一、背景二、具体1. 模式一:点击确认进行校验提示2. 模式二:确认按钮依赖于表单内容实现说明 一、背景 基于react、antd form分别实现如下两种模式: 1、一个 Modal,点击确认进行校验提示2、一个 Modal,确认按钮…...

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、实际…...

进程件通信——网络通信——TCP

网络抓包工具:wireshark 抓取经过设备网卡的数据。 操作: 1. sudo wireshark 2. 选择要抓取的网卡----》any 3. 设置抓取的过滤条件 4. 进行网络通信 5. 分析数据 UDP: 用户数据报协议 UDP: 用户数据报协议 特点&#xff…...

【数据库】三、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 视…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中,UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

基于TurtleBot3在Gazebo地图实现机器人远程控制

1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

day36-多路IO复用

一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...