3、redis的高可用
主从复制
主从复制:这是redis高可用的基础。哨兵模式和集群都是建立在此基础之上。
主从模式和数据库的主从模式是一样的,主负责写入,然后把写入的数据同步到从,从节点只能读不能写。read only。
不能做高可用的切换,主节点出现故障,没有替换的主节点,所有的写入操作都将失败。
主从复制工作模式
- 当配置完整之后,从节点启动,会向主节点发送一个sync command,请求同步连接
- master都会开启一个后台的进程将主节点的数据保存到数据文件中
- 主节点把数据同步给从节点从节点先把数据保存到硬盘,再加载到内存
主从复制实操
我们先定义主从复制架构如下
主服务器: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。 不能做高可用的切换ÿ…...

数据结构--顺序表(详解)
欢迎大家来到我的博客~欢迎大家对我的博客提出指导,有错误的地方会改进的哦~点击这里了解更多内容 目录 一、线性表二、顺序表 一、线性表 线性表(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. 创建函数指针变量: 函数是有地址的࿰…...

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

Unity 实现Canvas显示3D物体
新建一个UI相机,选择渲染层为UI 将主相机的渲染层去掉UI层 、 将Canvas的RenderMode设置为Screen Space - Camera,将RenderCamera设置为UI相机 新建3D物体的UI父物体,并将3D物体的层级设置为UI层 适当的放缩3DObjParent,让3D物体能显示出来…...

【Docker命令】如何使用`docker exec`在容器内执行命令
大家好,今天我们来聊聊Docker容器管理中的一个非常有用的命令:docker exec。在日常工作中,我们经常需要在运行中的Docker容器内执行各种命令,docker exec正是帮助我们实现这一需求的利器。下面我将通过一个简单的例子,…...

NetSuite Formula(HTML)超链打开Transaction
当Saved Search作为Sublist应用在Form时,如果Document Number是Group过的,则会出现如下超链失效的情况。 解决办法: 可以利用Saved Search中的Formula(HTML)功能来构建超链,用于打开Transaction。 以下图…...

【React】- 跨域PDF预览、下载(改文件名)、打印
我们经常会碰到跨域来方位PDF,同时需要下载、打印的需求,通常由于浏览器的安全策略,可以预览,但是下载和打印可能会受限,这时候怎么办呢? 1.创建一个隐藏的标签 要下载 iframe 中的 PDF 文件,…...

git clone ssh 设置代理
Linux配置方法 编辑 ~/.ssh/config 文件 Host github.com Hostname github.com ProxyCommand nc -v -x 127.0.0.1:1080 %h %pwindows配置方法 编辑 C:\Users\当前用户名.ssh\config 文件 Host github.com Hostname github.com ProxyCommand connect -S 127.0.0.1:1080 %h %…...

RK3568平台(USB篇)USB网络共享
使用RK的USB网络共享,在内核里面已经有了,这不需要自己写驱动程序,只需要把内核自带的USB网络共享的驱动添加上去即可。 一.RNDIS 协议简介 RNDIS 是微软定义的一种协议,它允许通过 USB 接口实现网络连接。通过 RNDIS,USB 设备可以充当网络适配器,允许主机通过 USB 与设…...

vite 打包时:JavaScript heap out of memory(内存溢出)
出错原因分析: 执行命令 npm run build 时出现以下错误提示: vite v3.2.7 building for production... 11:22:34 transforming (3) src\main.tsWARN Browserslist: caniuse…...

【服务器学习专栏 1.2 -- 带外管理】
请阅读 嵌入式学习必备专栏 文章目录 Overview服务器带外管理BMC 介绍BMC 特点BMC 工作原理 Overview 从技术的角度,网络管理可分为带外管理(out-of-band)和带内管理(in-band)两种管理模式。 带内管理,是指…...

微服务のGeteWay
目录 概念: 三大核心: 工作流程: 9527网关如何做路由映射: GetWay高级特性: 按服务名动态路由服务: 断言Route Predicate Factories : 获取当前时区时间: After Route &…...

html+css+js网页设计 美食 美食家6个页面
htmlcssjs网页设计 美食 美食家6个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1…...