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

Redis-运维

转自 极客时间 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的意⻅
在这里插入图片描述

相关文章:

Redis-运维

转自 极客时间 Redis 亚风 原文视频:https://u.geekbang.org/lesson/535?article681062 Redis 同步 Redis主从数据同步,主从第⼀次同步是全量同步 replicaof 主机 端口 #当前这个机器做Master的备份master如何判断slave是不是第⼀次来同步数据: Repl…...

Qt制作定时关机小程序

文章目录 完成效果图ui界面ui样图 main函数窗口文件头文件cpp文件 引言 一般定时关机采用命令行模式&#xff0c;还需要我们计算在多久后关机&#xff0c;我们可以做一个小程序来定时关机 完成效果图 ui界面 <?xml version"1.0" encoding"UTF-8"?>…...

LeetCode day30

LeetCode day30 害&#xff0c;昨天和今天在搞数据结构的报告&#xff0c;后面应该也会把哈夫曼的大作业写上来。 今天认识认识贪心算法。(&#xff61;&#xff65;∀&#xff65;)&#xff89; 2697. 字典序最小回文串 给你一个由 小写英文字母 组成的字符串 s &#xff0c;…...

数据分析基础之《numpy(5)—合并与分割》

了解即可&#xff0c;用panads 一、作用 实现数据的切分和合并&#xff0c;将数据进行切分合并处理 二、合并 1、numpy.hstack 水平拼接 # hstack 水平拼接 a np.array((1,2,3)) b np.array((2,3,4)) np.hstack((a, b))a np.array([[1], [2], [3]]) b np.array([[2], […...

centos 安装 Miniconda

在 CentOS 上安装 Miniconda 的步骤通常包括下载 Miniconda 安装脚本、运行脚本以及配置环境。以下是详细步骤&#xff1a; 1. 下载 Miniconda 安装脚本 首先&#xff0c;您需要从 Miniconda 的官方网站下载适用于 Linux 的安装脚本。您可以使用 wget 命令在 CentOS 终端中直…...

第二百二十六回

文章目录 1. 概念介绍2. 具体细节2.1 发现服务2.2 发现特征值2.3 发送数据2.4 接收数据 3. 代码与效果3.13.2 运行效果 4. 经验总结 我们在上一章回中介绍了"连接蓝牙设备的细节"相关的内容&#xff0c;本章回中将介绍通过蓝牙发送数据的细节.闲话休提&#xff0c;让…...

ubuntu常用指令

Ubuntu是一个基于Linux的操作系统&#xff0c;它使用了大量的命令行指令。这些指令对于管理系统、处理文件、监控资源和执行各种任务都非常有用。以下是一些常用的Ubuntu命令&#xff1a; 系统管理 sudo&#xff1a;提供管理员权限执行命令&#xff08;例如 sudo apt update&a…...

Quartz.NET 事件监听器

1、调度器监听器 调度器本身收到的一些事件通知&#xff0c;接口ISchedulerListener&#xff0c;如作业的添加、删除、停止、挂起等事件通知&#xff0c;调度器的启动、关闭、出错等事件通知&#xff0c;触发器的暂停、挂起等事件通知&#xff0c;接口部分定义如下&#xff1a…...

2024-AI人工智能学习-安装了pip install pydot但是还是报错

2024-AI人工智能学习-安装了pip install pydot但是还是报错 出现这样子的错误&#xff1a; /usr/local/bin/python3.11 /Users/wangyang/PycharmProjects/studyPython/tf_model.py 2023-12-24 22:59:02.238366: I tensorflow/core/platform/cpu_feature_guard.cc:182] This …...

在使用mapstruct,想忽略掉List<DTO>字段里面的,`data` 字段的映射, 如何写ignore: 使用@IterableMapping

在使用mapstruct,想忽略掉List字段里面的,data 字段的映射, 如何写ignore 代码如下: public interface AssigmentFileMapper {AssigmentFileDTO assigmentFileToAssigmentFileDTO(AssigmentFile assigmentFile);AssigmentFile assigmentFileDTOToAssigmentFile(Assigment…...

ansible-playbook的Temlates模块 tags模块 Roles模块

Temlates模块 jinja模板架构&#xff0c;通过模板可以实现向模板文件传参(python转义)把占位符参数传到配置文件中去,生产一个目标文本文件&#xff0c;传递变量到需要的配置文件当中 &#xff08;web开发&#xff09; nginx.conf.j2 早文件当中配置的是占位符&#xff08;声明…...

Canal使用详解

Canal介绍 Canal是阿里巴巴开发的MySQL binlog增量订阅&消费组件&#xff0c;Canal是基于MySQL二进制日志的高性能数据同步系统。在阿里巴巴集团中被广泛使用&#xff0c;以提供可靠的低延迟增量数据管道。Canal Server能够解析MySQL Binlog并订阅数据更改&#xff0c;而C…...

【经典LeetCode算法题目专栏分类】【第8期】滑动窗口:最小覆盖子串、字符串排列、找所有字母异位词、 最长无重复子串

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推荐--…...

C#和.Net常见问题记录

什么是.NET框架&#xff0c;.NET框架与C#(C Sharp)是什么关系&#xff1f; .NET框架是由Microsoft设计和维护的软件开发框架&#xff0c;.NET框架提供了C#(编程语言)开发的所有基础设施和支持。通过使用C#和.NET框架&#xff0c;开发者可以轻松地开发高质量、高效率的应…...

FAQ:Container Classes篇

1、Why should I use container classes rather than simple arrays?&#xff08;为什么应该使用容器类而不是简单的数组&#xff1f;&#xff09; In terms of time and space, a contiguous array of any kind is just about the optimal construct for accessing a sequen…...

每日一题(LeetCode)----栈和队列--滑动窗口最大值

每日一题(LeetCode)----栈和队列–滑动窗口最大值 1.题目&#xff08;239. 滑动窗口最大值&#xff09; 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 …...

13.bash shell中的if-then语句

文章目录 shell中的流控制if语句if语句if-then语句if-then-else 语句 test命令数值比较字符串比较文件比较case语句 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f339;&#x1f339; shell中的流控制if语句 简单的脚本可以只包含顺序执行的命令&#xff0…...

深入了解 Python 的 import 语句

在 Python 中&#xff0c;import 语句是一个关键的功能&#xff0c;用于在程序中引入模块和包。本文将深入讨论 import 语句的各种用法、注意事项以及一些高级技巧&#xff0c;以帮助你更好地理解和使用这一功能。 概念介绍 package 通常对应一个文件夹&#xff0c;下面可以有…...

接口测试 — 11.logging日志模块处理流程

1、概括理解 了解了四大组件的基本定义之后&#xff0c;我们通过图示的方式来理解下信息的传递过程&#xff1a; 也就是获取的日志信息&#xff0c;进入到Logger日志器中&#xff0c;传递给处理器确定要输出到哪里&#xff0c;然后进行过滤器筛选&#xff0c;通过后再按照定义…...

Hago 的 Spark on ACK 实践

作者&#xff1a;华相 Hago 于 2018 年 4 月上线&#xff0c;是欢聚集团旗下的一款多人互动社交明星产品。Hago 融合优质的匹配能力和多样化的垂类场景&#xff0c;提供互动游戏、多人语音、视频直播、 3D 虚拟形象互动等多种社交玩法&#xff0c;致力于为用户打造高效、多样、…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

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

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

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...