Redis-运维

news2024/11/25 19:51:37

转自 极客时间 Redis 亚风 原文视频:https://u.geekbang.org/lesson/535?article=681062

Redis 同步

Redis主从数据同步,主从第⼀次同步是全量同步

replicaof 主机 端口 #当前这个机器做Master的备份

在这里插入图片描述
master如何判断slave是不是第⼀次来同步数据:
Replication ld:简称replid,是数据集的标记,id⼀致则说明是同⼀数据集。每⼀个master都有唯⼀的replid,slave则会继承master节点的replid。
Offset:偏移量,随着记录在repl_baklog中的数据增多⽽逐渐增⼤。slave完成同步时也会记录当前同步的offset。
如果slave的offset⼩于master的offset,说明slave数据落后于master,需要更新。
因此slave做数据同步,必须向master声明⾃⼰的replication id 和offset,master才可以判断到底需要同步哪些数据。

如果slave重启后同步,会进⾏增量同步。

在这里插入图片描述

repl_baklog⼤⼩有上限,写满后会覆盖最早的数据。如果slave断开时间过久,导致数据被覆盖,则⽆法实现增量同步,只能再次全量同步。slave 和Master 始终保持着一点差距,也就是上面的Slave 节点追不上 Master 节点了,超过一圈,后面的数据就被重写了。

可以从以下⼏个⽅⾯来优化Redis主从集群
在master中配置repl-diskless-sync yes启⽤⽆磁盘复制(需要看网络带宽,作为了解不太实用),避免全量同步时的磁盘IO。
Redis单节点上的内存占⽤不要太⼤,减少RDB导致的过多磁盘IO
适当提⾼repl_baklog的⼤⼩,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步

⼀个master上的slave节点数量,如果实在是太多slave,则可以采⽤主-从-从链式结构,减少master压⼒。

在这里插入图片描述

哨兵

slave节点宕机恢复后可以找master节点同步数据,那master节点宕机怎么办?
Redis提供了哨兵(Sentinel)机制来实现主从集群的⾃动故障恢复。哨兵的结构和作⽤如下:
在这里插入图片描述
• 监控:Sentinel 会不断检查master和slave是否按预期⼯作
• ⾃动故障恢复:如果master故障,Sentinel会将⼀个slave提升为master。当
故障实例恢复后也以新的master为主
• 通知:Sentinel充当Redis客户端的服务发现来源,当集群发⽣故障转移时,
会将最新信息推送给Redis的客户端
Sentinel基于⼼跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

上下线检测及选举
• 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线。
• 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的⼀半。⼀旦发现master故障,sentinel需要在salve中选择⼀个作为新的master,选择依据是这样的:
1) ⾸先会判断slave节点与master节点断开时间⻓短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点
2) 然后判断slave节点的slave-priority值,越⼩优先级越⾼,如果是0则永不参与选举
3) 如果slave-prority⼀样,则判断slave节点的offset值,越⼤说明数据越新,优先级越⾼
4)最后判断slave节点的运⾏id⼤⼩,越⼩优先级越⾼
当选中了其中⼀个slave为新的master后(例如slave1),故障的转移的步骤如下:
1)sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master。
2) sentinel给所有其它slave发送slaveof ip port命令,让这些slave成为新master的从节点,开始从新的master上同步数据。
3)Sentinel将故障节点标记为slave(修改配置),当故障节点恢复后会⾃动成为新的master的slave节点。
sping 针对主从的应用

spring.redis.sentinel.master=mymaster
spring.redis.sentinel.node=ip:port,ip:port

连接Sentinel的时候需要指定这个bean
在这里插入图片描述
这⾥的ReadFrom是配置Redis的读取策略,是⼀个枚举,包括下⾯选择:
MASTER: 从主节点读取
MASTER_PREFERRED:优先从master节点读取,master不可⽤才读取replica
REPLICA: 从slave (replica)节点读取
REPLICA_PREFERRED:优先从slave (replica)节点读取,所有的slave都不可⽤才读取master

Redis 分片集群

主从和哨兵可以解决⾼可⽤、⾼并发读的问题。但是依然有两个问题没有解决:
• 海量数据存储问题
• ⾼并发写的问题
使⽤分⽚集群可以解决上述问题,分⽚集群特征:
• 集群中有多个master,每个master保存不同数据
• 每个master都可以有多个slave节点
• master之间通过ping监测彼此健康状态
• 客户端请求可以访问集群任意节点,最终都会被转发到正确节点

在这里插入图片描述
Redis会把每⼀个master节点映射到0~16383共16384个插槽 (hash slot)上,查看集群信息时就能看到:
在这里插入图片描述
数据key不是与节点绑定,⽽是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:
Key中包含{},且{}中⾄少包含1个字符,{}中的部分是有效部分
key中不包含{},整个key都是有效部分
例如:key是num,那么就根据num计算,如果是{a}num,则根据a计算。计算⽅式是利⽤CRC16算法得到⼀个hash值,然后对16384取余,得到的结果就是slot值。

cluster failover命令可以⼿动让集群中的某个master宕机,切换到执⾏cluster failover命令的slave节点,实现⽆感知的数据迁移。⼿动的failover⽀持三种不同模式:
• 缺省:默认的流程,如下面的图
不常用下面两个命令:
• force:省略了对offset的⼀致性校验(不管当前节点是否与Master有距离)
• takeover:直接执⾏第5歩,忽略数据⼀致性、忽略master状态和其它master的意⻅
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1332696.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux循环调度执行

9.2 循环调度执行 9.2.1 简介 cron的概念和crontab是不可分割的。 ​ crontab是一个命令,常见于Unix和Linux的操作系统之中用于设置周期性被执行的指令。 ​ 该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执…

基于AT89C51单片机的8位密码锁仿真与实物制作

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/88657969?spm1001.2014.3001.5503 源码获取 C 源码仿真图毕业设计实物制作步骤01 摘要 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表…

在使用 npm install的时候提示node-sass command faile 解决方案

在使用npm install的时候错误提示node-sass 相关的。错误信息如下图: 解决方法(PS:凯哥的不适用) 出现这种问题基本是由于node版本与sass版本不匹配导致的 方案1:卸载node,安装对应版本 方案2&#xff1…

关键字:protected关键字

在 Java 中,protected 是一个访问修饰符,用于修饰类成员(成员变量、成员方法和构造方法)。当一个类成员被声明为 protected 时,它可以在同一包中的其他类以及子类中被访问。 以下是 protected 关键字的解析&#xff1a…

5. 创建型模式 - 单例模式

亦称: 单件模式、Singleton 意图 单例模式是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。 问题 单例模式同时解决了两个问题, 所以违反了单一职责原则: 保证一个类只有一…

隧道裂缝检测_2【C++PCL】

作者:迅卓科技 简介:本人从事过多项点云项目,并且负责的项目均已得到好评! 公众号:迅卓科技,一个可以让您可以学习点云的好地方 1.前言 我们团队注重每一个细节,确保代码的可读性、可维护性和可扩展性达到最高标准。我们严格遵循行业最佳实践,采用模块化和面向对象的设…

k8s集群部署成功后某个节点突然出现notready状态的问题原因分析和解决办法

文章目录 1、问题描述2、查看node03的日志3、错误原因分析4、解决办法 1、问题描述 k8s集群配置为 一主三个节点;刚开始运行一直正常;某天突然node03主机状态变为notready,问题如下: 在master节点使用: #master节点…

Vue3学习(后端开发)

目录 一、安装Node.js 二、创建Vue3工程 三、用VSCode打开 四、源代码目录src 五、入门案例——手写src 六、测试案例 七、ref和reactive的区别 一、安装Node.js 下载20.10.0 LTS版本 https://nodejs.org/en 使用node命令检验安装是否成功 node 二、创建Vue3工程 在…

OLED显示原理7T1C基础分析(PWM与DC调光)

文章目录 一、7T1C设计要点分析1、先回顾一下上篇 发光过程三个阶段---复位、补偿、发光2、设计关键点一:复位、补偿、发光三阶段 控制信号严格分离3、基本亮度控制策略---DC调光 && PWM调光4、PWM调光频率 之 低频PWM/高频PWM---EM信号的控制细节5、功耗优…

蓝桥小课堂-平方和【算法赛】

问题描述 蓝桥小课堂开课啦! 平方和公式是一种用于计算连续整数的平方和的数学公式。它可以帮助我们快速求解从 1 到 n 的整数的平方和,其中 n 是一个正整数。 平方和公式的表达式如下: 这个公式可以简化计算过程,避免逐个计算…

HarmonyOs4.0基础(一)

目录 一、HarmonyOs系统定义 1.1系统的技术特性(三大特征) 1.1.1、硬件互助、资源共享 1.1.2、一次开发、多端部署(面向开发者) 1.1.3、统一OS,弹性部署(支持多种API:ArkTs、JS、C/C、Java) 1.2、系统的技术架构 二、Harmony OS项目搭建 2.1、(D…

Elasticsearch的分片平衡问题解决

2023年11月份在某电商系统生产中的Elasticsearch(以下简称ES)集群突然,出现了大量慢查询告警,导致请求堆积。经过几天的排查发现了ES节点主分片和副本分片分布存在不均匀的问题。当然了暂未有定论是由于分片不均衡导致了性能下降&…

文心一言 VS 讯飞星火 VS chatgpt (163)-- 算法导论13.1 3题

三、用go语言,定义一棵松弛红黑树(relaxed red-black tree)为满足红黑性质 1、3、4 和5的二叉搜索树。换句话说,根结点可以是红色或是黑色。考虑一棵根结点为红色的松弛红黑树 T 。如果将 T 的根结点标为黑色而其他都不变,那么所得到的是否还…

祝大家圣诞节快乐

同时庆祝 JWFD 20周年

Plantuml之状态图语法介绍(二十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

官宣!DevExpress Blazor UI组件,支持全新的.NET 8渲染模式

DevExpress Blazor UI组件使用了C#为Blazor Server和Blazor WebAssembly创建高影响力的用户体验,这个UI自建库提供了一套全面的原生Blazor UI组件(包括Pivot Grid、调度程序、图表、数据编辑器和报表等)。 .NET 8为Blazor引入了令人兴奋的重…

Echarts社区推荐

Apache Echarts官方示例中,有的demo并不能完全符合我们的需求,下面推荐几个Echarts社区,以便快速搭建项目。 1. isqqw 官方地址 :https://www.isqqw.com/ 2. makepie 官方地址 :https://www.makeapie.cn/echarts 3. P…

图像随机裁剪代码实现

原理 在计算机视觉领域,深度学习模型通常需要大量的训练数据才能获得良好的性能。然而,在实际应用中,我们可能面临训练数据不足的问题。为了解决这一问题,可以使用数据增强技术来扩充数据集。随机图像裁剪是其中一种简单而有效的…

03_排序

03_排序 一、简单排序Comparable接口介绍需求: 冒泡排序排序原理:冒泡排序API设计: 选择排序排序原理:选择排序API设计:选择排序的时间复杂度分析: 插入排序需求:排序原理:插入排序A…

C#中如何稳定精确地每隔5ms执行某个函数?

C#中如何稳定精确地每隔5ms执行某个函数? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C#的资料从专业入门到高级教程工具包」,点个关注,全部无偿共享给大家&#xf…