当前位置: 首页 > 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…...

01、kafka知识点综合

kafka是一个优秀大吞吐消息队列,下面我就从实用的角度来讲讲kafka中,“kafka为何有大吞吐的机制”,“数据不丢失问题”,“精准一次消费问题” 01、kafka的架构组织和运行原理 kafka集群各个节点的名称叫broker,因为kaf…...

K8S集群常用命令

1,查看pod kubectl get pods -A 查看所有的pod kubectl get pods 这个只查看namespace为default下的pod,也就是只查看默认命名空间下的pod kubectl get pod -A -o wide 查看所有的pod,并且放出的信息更全(包含了pod的ip&#xff0…...

数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall

数据集-目标检测系列- 石榴 检测数据集 pomegranate >> DataBall DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(fre…...

【ubuntu24.04】配置ssh以root登录

ubuntu默认不能以root登录 SSH 访问 Ubuntu 时,root 用户登录提示 Access denied 的问题,通常是因为 Ubuntu 默认禁用了 root 用户通过 SSH 登录。这是出于安全性考虑的默认配置。原因分析 默认禁用 root 登录: 在 /etc/ssh/sshd_config 配置文件中,PermitRootLogin 默认…...

python学opencv|读取图像(二十九)使用cv2.getRotationMatrix2D()函数旋转缩放图像

【1】引言 前序已经学习了如何平移图像,相关文章链接为: python学opencv|读取图像(二十七)使用cv2.warpAffine()函数平移图像-CSDN博客 在此基础上,我们尝试旋转图像的同时缩放图像。 【2】…...

Python语言的编程范式

Python语言的编程范式探讨 引言 在当今的编程世界中,Python语言以其简洁、易读和强大的功能深受开发者的喜爱。作为一种多范式编程语言,Python支持多种编程风格,包括面向对象编程(OOP)、函数式编程和命令式编程等。每…...

JAVA多线程学习

文章目录 线程相关概念线程创建继承Thread类Runnable接口多个线程同时操作同一个对象测试:实现callable接口(了解)静态代理lamda表达式 线程状态线程停止线程休眠线程礼让 线程相关概念 线程:是进程的一部分,一个进程之内的线程之间共享进程的…...

【c语言】指针 (完结)

一、sizeof和strlen的对比 1、sizeof 前面我们在学习操作符的时候,我们学习了sizeof,知道其是计算变量所占内存的大小的,单 位是字节,如果操作数是数据类型的话,计算的就是这个类型的变量所占的内存空间的大…...

vue使用自动化导入api插件unplugin-auto-import,避免频繁手动导入

‌unplugin-auto-import‌是一个现代的自动导入插件,旨在简化前端开发中的导入过程,减少手动导入的繁琐工作,提升开发效率。它支持多种构建工具,包括Vite、Webpack、Rollup和esbuild,并且可以与TypeScript配合使用&…...

matlab函数讲解——randsample

在MATLAB中,randsample函数用于从一个给定的集合中随机选择样本。函数的基本用法是从指定范围内随机选择元素,具体用法如下: 用法 y randsample(n, k, true, w)参数说明 n: 整数,表示从1到n的集合中进行抽样。例如,…...

50_Lua垃圾回收

1.Lua垃圾回收机制概述 Lua采用了一种自动内存管理机制,称为垃圾回收(Garbage Collection, GC)。垃圾回收的主要目的是回收程序中不再被使用的内存,从而避免内存泄漏。Lua的垃圾回收器负责回收动态分配的对象,如函数、用户数据、表、字符串、线程、内部结构等。Lua的垃圾…...

【Python】数据容器:列表,元组,字符串,集合字典及通用操作

文章目录 一.序列1.1list列表定义常用操作列表的遍历 1.2tuple元组定义常见操作元组的遍历 1.3str字符串定义常见操作字符串的遍历 1.4序列常用操作——切片 二.set集合定义常见操作集合的遍历 三.dict字典定义常用操作字典的嵌套 *数据容器对比总结四.数据容器的通用操作4.1通…...

Wi-Fi Direct (P2P)原理及功能介绍

目录 Wi-Fi Direct (P2P)介绍Wi-Fi Direct P2P 概述P2P-GO(P2P Group Owner)工作流程 wifi-Direct使用windows11 wifi-directOpenwrtwifi的concurrent mode Linux环境下的配置工具必联wifi芯片P2P支持REF Wi-Fi Direct &#xff…...

系统看门狗配置--以ubuntu为例

linux系统配置看门狗 以 ubuntu 系统配置看门狗为例 配置看门狗使用的脚本文件,需要使用管理员权限来执行: 配置是:系统每 30S 喂一次狗,超过 60S 不进行投喂,就会自动重启。 1. 系统脚本内容: #!/bin/b…...

Mysql--基础篇--多表查询(JOIN,笛卡尔积)

在MySQL中,多表查询(也称为联表查询或JOIN操作)是数据库操作中非常常见的需求。通过多表查询,你可以从多个表中获取相关数据,并根据一定的条件将它们组合在一起。MySQL支持多种类型的JOIN操作,每种JOIN都有…...

44_Lua迭代器

在Lua中,迭代器是一种用于遍历集合元素的重要工具。掌握迭代器的使用方法,对于提高Lua编程的效率和代码的可读性具有重要意义。 1.迭代器概述 1.1 迭代器介绍 迭代器是一种设计模式,它提供了一种访问集合元素的方法,而不需要暴露其底层结构。在Lua中,迭代器通常以一个函…...

网络原理(三)—— 传输层 之 UDP 和 TCP协议

传输层 在传输层两大关键的协议就是UDP和TCP协议了,除此之外,还有别的传输层协议,本文章将介绍UDP和TCP协议,重点介绍TCP协议。 首先回顾TCP和UDP 的特点: UDP:不可靠传输,面向数据包&#xf…...

Swin Transformer模型详解(附pytorch实现)

写在前面 Swin Transformer(Shifted Window Transformer)是一种新颖的视觉Transformer模型,在2021年由微软亚洲研究院提出。这一模型提出了一种基于局部窗口的自注意力机制,显著改善了Vision Transformer(ViT&#xf…...

opencv进行人脸识别环境搭建

1. 构建人脸识别环境 1) 下载安装opencv 下载地址:Releases - OpenCV 参考博文:OpenCV下载安装教程(Windows)-CSDN博客 下载对应系统的opencv,如windows版,opencv-4.5.5-vc14_vc15.exe 2) 然后解压缩到…...

java小灶课详解:关于char和string的区别和对应的详细操作

char和string的区别与操作详解 在编程语言中,char和string是用于处理字符和字符串的两种重要数据类型。它们在存储、操作和应用场景上存在显著差异。本文将从以下几个方面详细解析两者的区别及常见操作。 1. 基本定义与存储差异 char: 定义:…...

计算机网络之---RIP协议

RIP协议的作用 RIP (Routing Information Protocol) 协议是一个基于距离矢量的路由协议,它在网络中用来动态地交换路由信息。RIP 是最早的路由协议之一,通常用于小型和中型网络中。它的工作原理简单,易于实现,但在一些大型网络中效…...

F#语言的文件操作

F#语言的文件操作 F#是一种功能性编程语言,运行在.NET平台上,特别适合处理并发和复杂的数据处理任务。在这篇文章中,我们将介绍F#语言中的文件操作,包括读取、写入和管理文件的基本方法。通过实例来帮助理解,适合初学…...

微信小程序开发设置支持scss文件

在微信小程序开发中,默认是不支持scss文件的,创建文件的时候,css文件默认创建的是wxss后缀结尾的,但是用习惯了scss的怎么办呢? 首先找到project.config.json文件,打开文件在setting下设置useCompilerPlug…...

【Excel笔记_3】execl的单元格是#DIV/0!,判断如果是这个,则该单元格等于空

在 Excel 中,可以使用 IF 函数来判断单元格是否是 #DIV/0! 错误,并将其替换为空值(即空字符串 "")。具体公式如下: IF(ISERROR(A1), "", A1)或者,如果只想判断 #DIV/0! 错误&#xff…...

51单片机入门基础

目录 一、基础知识储备 (一)了解51单片机的基本概念 (二)掌握数字电路基础 (三)学习C语言编程基础 二、开发环境搭建 (一)硬件准备 (二)软件准备 三、…...

设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析

访问者模式(Visitor Pattern)是一种行为设计模式,它允许你在不改变元素类的前提下定义作用于这些元素的新操作。这种模式将算法与对象结构分离,使得可以独立地变化那些保存在复杂对象结构中的元素的操作。 假设我们有一个复杂的对…...

stable diffusion 量化学习笔记

文章目录 一、一些tensorRT背景及使用介绍1)深度学习介绍2)TensorRT优化策略介绍3)TensorRT基础使用流程4)dynamic shape 模式5)TensorRT模型转换 二、TensorRT转onnx模型1)onnx介绍2)背景知识&…...

金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成

目录 一、⾃动化测试理论 二、自动化脚本 1、添加断言 1️⃣注册、登录 2️⃣认证、充值、开户、投资 2、可重复执行:清除测试数据脚本按指定顺序执行 1️⃣如何可以做到可重复执⾏? 2️⃣清除测试数据:连接数据库setup线程组 ①明确…...

无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型

无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型 随着人工智能技术的快速发展,越来越多的AI模型被广泛应用于各个领域。然而,运行这些模型通常需要高性能的硬件支持,特别是GPU(图形处理器&#xff09…...

selenium学习笔记

一.搭建环境 1.安装chrome #下载chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb#安装chrome apt --fix-broken install ./google-chrome-stable_current_amd64.deb2.安装chromedriver 首先先查看版本:google-chrome --…...

SOME/IP协议详解 基础解读 涵盖SOME/IP协议解析 SOME/IP通讯机制 协议特点 错误处理机制

车载以太网协议栈总共可划分为五层,分别为物理层,数据链路层,网络层,传输层,应用层,其中今天所要介绍的内容SOME/IP就是一种应用层协议。 SOME/IP协议内容按照AUTOSAR中的描述,我们可以更进一步…...

nginx 实现 正向代理、反向代理 、SSL(证书配置)、负载均衡 、虚拟域名 ,使用其他中间件监控

我们可以详细地配置 Nginx 来实现正向代理、反向代理、SSL、负载均衡和虚拟域名。同时,我会介绍如何使用一些中间件来监控 Nginx 的状态和性能。 1. 安装 Nginx 如果你还没有安装 Nginx,可以通过以下命令进行安装(以 Ubuntu 为例&#xff0…...

基于单片机的智能花卉浇水系统的设计与实现

摘要: 随着人们生活水平的不断提高,生活节奏也越来越快。人们经常忽视办公室或者家居的花卉,忘记浇水。本文设计了一种基于单片机的智能浇水系统。目的是解决养殖花卉的人忘记浇水的问题。本系统以单片机AT89S52为控制芯片,能够按…...

《使用 YOLOV8 和 KerasCV 进行高效目标检测》

《使用 YOLOV8 和 KerasCV 进行高效目标检测》 作者:Gitesh Chawda创建日期:2023/06/26最后修改时间:2023/06/26描述:使用 KerasCV 训练自定义 YOLOV8 对象检测模型。 (i) 此示例使用 Keras 2 在 Colab 中…...

【Domain Generalization(3)】领域泛化与文生图之 -- QUOTA 任意领域中的生成物体的数量可控

系列文章目录 【Domain Generalization(1)】增量学习/在线学习/持续学习/迁移学习/多任务学习/元学习/领域适应/领域泛化概念理解第一篇了解了 DG 的概念,那么接下来将介绍 DG 近年在文生图中的相关应用/代表性工作。【Domain Generalization(2)】领域泛化在文生图…...

qml XmlListModel详解

1、概述 XmlListModel是QtQuick用于从XML数据创建只读模型的组件。它可以作为各种view元素的数据源,比如ListView、GridView、PathView等;也可以作为其他和model交互的元素的数据源。通过XmlRole定义角色,如name、age和height,并…...

CAPL如何设置TCP/IP传输层动态端口范围

在TCP/IP协议中,应用程序通过传输层协议TCP/UDP传输数据,接收方传输层收到数据后,根据传输层端口号把接收的数据上交给正确的应用程序。我们可以简单地认为传输层端口号是应用程序的标识,这就是为什么我们说应用程序在使用TCP/IP协议通信时要打开传输层端口号或者绑定端口号…...

Pandas常用数据类型

扩展库pandas常用的数据结构如下: (1)Series:带标签的一维数组 (2)DatetimeIndes:时间序列 (3)DateFrame:带标签且大小可变的二维表格结构 (4…...

【AI大模型】BERT GPT ELMo模型的对比

目录 🍔 BERT, GPT, ELMo之间的不同点 🍔 BERT, GPT, ELMo各自的优点和缺点 🍔 小结 学习目标 理解BERT, GPT, ELMo相互间的不同点理解BERT, GPT, ELMo相互比较下的各自优点和缺点 🍔 BERT, GPT, ELMo之间的不同点 关于特征提取…...

探索AGI:智能助手与自我赋能的新时代

目录 1 AGI1.1 DeepMind Levels(2023年11月)1.2 OpenAI Levels(2024年7月)1.3 对比与总结1.4 AGI可能诞生哪里 2 基于AI的智能自动化助手2.1 通用型大模型2.2 专业的Agent和模型工具开发框架2.3 编程与代码生成助手2.4 视频和多模态生成2.5 商…...

Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步

Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动同步 目录 Oracle Dataguard(主库为双节点集群)配置详解(5):将主库复制到备库并启动…...

webrtc自适应分辨率的设置

DegradationPreference 是一个枚举类,用于在视频编码或实时通信(如 WebRTC)中指定系统资源不足时如何处理质量下降的策略。以下是该枚举类的中文解释: enum class DegradationPreference {// 禁用:不根据资源过载信号…...

提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息

网络和IP地址计算器 https://www.sojson.com/convert/subnetmask.html提供的 IP 地址 10.0.0.5 和子网掩码位 /26 来计算相关的网络信息。 子网掩码转换 子网掩码 /26 的含义二进制表示:/26 表示前 26 位是网络部分,剩下的 6 位是主机部分。对应的子网掩码为 255…...

WPF系列八:图形控件Path

简介 Path控件支持一种称为路径迷你语言(Path Mini-Language)的紧凑字符串格式,用于描述复杂的几何图形。这种语言通过一系列命令字母和坐标来定义路径上的点和线段,最终绘制出想要的图形。 绘制任意形状:可以用来绘…...

如何移除git中被跟踪的commit文件

忽略已被跟踪的文件 问题描述 如果某个文件已经被 Git 跟踪(即已被提交到仓库),即使后来将其添加到 .gitignore 文件中,Git 仍会继续跟踪它。 解决方案 更新 .gitignore 文件 将需要忽略的文件加入 .gitignore: .env…...

15. C语言 函数指针与回调函数

本章目录: 前言什么是函数指针?定义声明方式 函数指针的基本用法示例:最大值函数输出示例: 回调函数与函数指针什么是回调函数?通俗解释 示例:回调函数实现动态数组填充输出示例: 进一步探索:带…...

tomcat12启动流程源码分析

信息: Server.服务器版本: Apache Tomcat/12.0.x-dev 信息: Java虚拟机版本: 21下载源码https://github.com/apache/tomcat,并用idea打开,配置ant编译插件,或者使用我的代码 启动脚本是/bin/startup.bat,内部又执行了bin\cata…...

Pycharm 使用教程

一、基本配置 1. 切换Python解释器 pycharm切换解释器版本 2. pycharm虚拟环境配置 虚拟环境的目的:创建适用于该项目的环境,与系统环境隔离,防止污染系统环境(包括需要的库)虚拟环境配置存放在项目根目录下的 ven…...

数据仓库: 9- 数据仓库数据治理

目录 9- 数据治理9.1 数据标准化9.1.1 数据标准化的定义9.1.2 数据标准化的重要性9.1.3 数据标准化的主要内容9.1.4 数据标准化的实施步骤9.1.5 数据标准化常用工具9.1.6 数据标准化的挑战与应对策略9.1.7 案例分析9.1.8 总结 9.2 主数据管理(MDM)9.2.1 主数据管理的核心目标9.…...