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

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

【机器视觉】单目测距——运动结构恢复

ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛&#xf…...

测试markdown--肇兴

day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...