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

3、redis的高可用

主从复制

主从复制:这是redis高可用的基础。哨兵模式和集群都是建立在此基础之上。

主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从,从节点只能读不能写。read  only。

不能做高可用的切换,主节点出现故障,没有替换的主节点,所有的写入操作都将失败。

主从复制工作模式

  1. 当配置完整之后,从节点启动,会向主节点发送一个sync command,请求同步连接
  2. master都会开启一个后台的进程将主节点的数据保存到数据文件中
  3. 主节点把数据同步给从节点从节点先把数据保存到硬盘,再加载到内存

主从复制实操

我们先定义主从复制架构如下

主服务器:mysql1,192.168.254.31

从服务器:tomcat1,192.168.254.21

从服务器:zw4,192.168.254.14

1、配置主服务器的主配置文件 /etc/redis/redis.conf,修改如下配置

  • #关闭监听地址,表示同意任何

  • #关闭保护模式

  • #启用后台运行

  • #启用AOF二进制日志文件

2、配置两台从服务器的主配置文件 /etc/redis/redis.conf,修改如下配置

  • #指定从节点复制主节点192.168.254.31的数据

3、在主服务器上打开redis的日志文件,发现两台从服务器已经关联上了我们主服务器

这时候我们主从复制模式就成功了,两台从服务器会变成只读模式。

哨兵模式

在主从模式的基础之上,引入了故障的切换模式,一般涉及高可用模式的服务器的数量是奇数。

哨兵也是一个分布式的集群结构,对主从结构当中的每台服务器进行监控,当出现故障时,通过投

票的机制选择一个新的master。被选举出的新的master会将所有的主从节点重新连接到自己,从节

点会自动同步到主,自动变成只读模式。

哨兵模式工作模式

1、主从之间,互相有一个心跳的检测

2、当主节点宕机,从节点都会收到主的宕机的信息

3、两个从节点,自动进行投票,选择一个新的主

4、从节点会自动加入新主的主从模式。

哨兵模式实操

哨兵模式是在主从复制基础上,我们这边配置哨兵模式在上面主从复制的基础上进行。

首先在配置哨兵模式的第一次的时候,我们是人工的定义好主。这里定mysql1为主。

1、下载redis哨兵软件,apt -y install redis-sentinel

2、三台服务器都配置redis哨兵的主配置文件,/etc/redis/sentinel.conf,具体修改如下

  • 人工定义主的服务器。2的含义:当主节点发送故障,必须要有两个从节点同意才能进行主节点的故障切换。
  • 判断服务器服务器宕机的时间周期30000毫秒,30秒
  • 故障节点的最大超时时间18000毫秒,18秒

3、重启服务后,在主服务器上打开redis哨兵的日志文件,发现两台从服务器已经关联上了我们主服务器

systemctl restart redis-sentinel.service

tail -f /var/log/redis/redis-sentinel.log

4、这时候我们关闭掉主服务器的redis服务,显示哨兵模式的主推过选举移到了从1上

我们进入到原来主的redis主配置文件里,发现在最下面添加了一行,显示192.168.254.21从1现在是主

这时候我们哨兵+主从模式就成功了,192.168.254.21变成了主服务器,另外两台服务器变成了只读模式。

集群

redis-cluster,集群是由多个节点组成,redis的数据分布在节点中,集群的当中每个节点又分主和从。主负责写,从负责读。

集群工作模式和槽位

0-16383个hash的槽位:

A:0-5460槽位

B:5461-10922槽位

C:10923-16383槽位

集群实操

我们先定义主从复制架构如下,集群需要至少6台服务器

服务器1:mysql1,192.168.254.31

服务器2:mysql2,192.168.254.32

服务器3:mysql3,192.168.254.33

服务器4:zw4,192.168.254.14

服务器5:zw5,192.168.254.15

服务器6:zw6,192.168.254.16

1、6台服务器都要配置redis主配置文件,具体修改如下

  • #开启集群功能
  • #集群的配置文件名称

  • #设置集群的超时时间

改完配置后,重启redis服务

2、配置主从节点,具体操作如下,这里我们在192.168.254.31上面打的命令,后面6台服务器顺序无所谓,并不是谁在前就是主,随机的。

redis-cli  -h 192.168.254.31 --cluster create 192.168.254.31:6379 192.168.254.32:6379 192.168.254.33:6379 192.168.254.14:6379 192.168.254.15:6379 192.168.254.16:6379 --cluster-replicas 1

  • cluster-replicas 1:表示每个主节点对于一个从节点

这里显示,31、32、33是主节点,14、15、16是从节点;并且16384个hash槽位全部分配完成。

3、当我们发现在192.168.254.31上创建key键值会报错,注意这里并不是报错,还是提示

  • 表示客户端尝试将这个数值保存到槽位号10357的位置,实际槽位在32这个主机

我们在31上创建的键,主从复制到15上面,证明主机31和15是主从关系。与其他两个主从互补影响。

可见:redis的集群模式,只是满足高可用,不能实现数据同步。

           对数据同步要求很高的场景,选择redis的主从和哨兵模式。

相关文章:

3、redis的高可用

主从复制 主从复制:这是redis高可用的基础。哨兵模式和集群都是建立在此基础之上。 主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从,从节点只能读不能写。read only。 不能做高可用的切换&#xff…...

数据结构--顺序表(详解)

欢迎大家来到我的博客~欢迎大家对我的博客提出指导,有错误的地方会改进的哦~点击这里了解更多内容 目录 一、线性表二、顺序表 一、线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结…...

Day62 图论part11

Floyd 算法精讲 Floyd 算法代码很简单,但真正理解起原理 还是需要花点功夫,大家在看代码的时候,会发现 Floyd 的代码很简单,甚至看一眼就背下来了,但我为了讲清楚原理,本篇还是花了大篇幅来讲解。 代码随想…...

git clone 超时

git clone 超时 参考 https://blog.csdn.net/qq_45906972/article/details/142214187?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-142214187-blog-137158358.235v43pc_blog_bottom_relevance_base8&spm1001.2101.3001.…...

WPF编程excel表格操作

WPF编程excel表格操作 摘要NPOI安装封装代码测试代码 摘要 Excel操作几种方式 使用开源库NPOI(常用,操作丰富)使用Microsoft.Office.Interop.Excel COM组件(兼容性问题)使用OpenXml(效率高)使用OleDb(过时) NPOI安装 封装代码 using System; using System.IO; u…...

Day10补代码随想录 理论基础|232.用栈实现队列|225.用队列实现栈|20.有效的括号|1047.删除字符串中的所有相邻重复项

栈和队列理论基础 抽象认识 栈是先进后出(FIFO),队列是先进先出(LIFO) 队首(先进))队尾(后进)栈顶(后进)栈底(先进) 栈(Stack) 只在一端进行进出操作(只在一端进一端出)像个篮球框,取用篮球从一端进出。 /进栈 int a[1000];//足够大的栈空间 int top-1…...

【Devops】什么是Devops?(Development+Operations)和运维的区别?

DevOps(Development Operations)是一种将开发(Development)和运维(Operations)团队结合在一起的文化和实践,目的是通过自动化、协作和持续反馈来加快软件的开发、部署和运维的周期,…...

基于NodeMCU的物联网电灯控制系统设计

最终效果 基于NodeMCU的物联网电灯控制系统设计 小程序关灯 上图展现了小程序关灯过程的数据传输过程:用户下达关灯指令→小程序下发关灯指令→MQTT服务器接收关灯指令→下位机接收与处理关灯指令。 项目介绍 该项目是“物联网实验室监测控制系统设计(…...

Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02

在嵌入式开发中,I2C(Inter-Integrated Circuit)是一种常用的串行通信协议,广泛应用于与外设(如 EEPROM、传感器、显示屏等)进行数据交换。AT24C02 是一种常见的 I2C EEPROM 存储器,它提供 2Kbit…...

Linux应用软件编程-多任务处理(线程)

线程:轻量级的进程,线程的栈区独立(8M),与同一进程中的其他线程共用进程的堆区,数据区,文本区。 进程是操作系统资源分配的最小单位;线程是cpu任务调度的最小单位。 1. 线程的创建…...

VITUREMEIG | AR眼镜 算力增程

根据IDC发布的《2024年第三季度美国AR/VR市场报告》显示,美国市场AR/VR总出货量增长10.3%。其中,成立于2021年的VITURE增长速度令人惊艳,同比暴涨452.6%,成为历史上增长最快的AR/VR品牌。并在美国AR领域占据了超过50%的市场份额&a…...

Jenkins管理多版本python环境

场景:项目有用到python3.8和3.9,python环境直接安装在jenkins容器内。 1、进入jenkins容器 docker exec -it jenkins /bin/bash 2、安装前置编译环境 # 提前安装,以便接下来的配置操作 apt-get -y install gcc automake autoconf libtool ma…...

Flutter富文本实现学习

Flutter 代码如何实现一个带有富文本显示和交互的页面。 前置知识点学习 RealRichText RealRichText 和 ImageSpan 不是 Flutter 框架中内置的组件,而是自定义的组件或来自第三方库。这些组件的实现可以提供比标准 RichText 更丰富的功能,比如在富文本…...

如何解决 OpenAI API 连接问题:降级 urllib3 版本

如何解决 OpenAI API 连接问题:降级 urllib3 版本 在使用 OpenAI API 时,很多开发者可能会遇到连接问题,特别是在使用 Python 代码与 OpenAI 进行交互时。常见的错误包括 ProxyError、SSLError 和 MaxRetryError,它们通常表示在通…...

【C语言】库函数常见的陷阱与缺陷(三):内存分配函数[4]--free

C语言中的free函数用于释放之前通过malloc、calloc或realloc动态分配的内存。然而,在使用free函数时,开发者可能会遇到一些陷阱和缺陷。 一、功能与用法 free 函数是 C 语言中用于释放动态分配内存的关键函数。在程序使用 malloc、calloc 或 realloc 等函数在堆上分配了内存…...

论文分享 | PromptFuzz:用于模糊测试驱动程序生成的提示模糊测试

大语言模型拥有的强大能力可以用来辅助多种工作,但如何有效的辅助仍然需要人的精巧设计。分享一篇发表于2024年CCS会议的论文PromptFuzz,它利用模型提示生成模糊测试驱动代码,并将代码片段嵌入到LLVM框架中执行模糊测试。 论文摘要 制作高质…...

AWS K8s 部署架构

Amazon Web Services(AWS)提供了一种简化的Kubernetes(K8s)部署架构,使得在云环境中管理和扩展容器化应用变得更加容易。这个架构的核心是AWS EKS(Elastic Kubernetes Service),它是…...

JavaSE笔记(四)

Java泛型与集合类 在前面我们学习了最重要的类和对象,了解了面向对象编程的思想,注意,非常重要,面向对象是必须要深入理解和掌握的内容,不能草草结束。在本章节,我们会继续深入了解,从我们的泛型开始,再到我们的数据结构,最后再开始我们的集合类学习。 走进泛型 为…...

C语言基础——指针(5)

一. 函数指针变量 1. 函数指针变量的定义: 类比数组指针变量,数组指针变量是存放数组地址的变量,那么同理,函数指针变量就是存放函数地址的变量。 2. 创建函数指针变量: 函数是有地址的&#xff0…...

curl+openssl 踩坑笔记

curl编译:点击跳转 踩坑一 * SSL certificate problem: unable to get local issuer certificate * closing connection #0 curl: (60) SSL certificate problem: unable to get local issuer certificate More details here: https://curl.se/docs/sslcerts.html …...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

云计算——弹性云计算器(ECS)

弹性云服务器:ECS 概述 云计算重构了ICT系统,云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台,包含如下主要概念。 ECS(Elastic Cloud Server):即弹性云服务器,是云计算…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

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

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

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...