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

十三、Redis哨兵模式--Sentinel

上一篇介绍了`Redis`中的主从复制。我们知道`Redis`主从中一般只有主节点对外提供写操作,如果主节点发生故障,为了保证`Redis`的可用性,这时就要在可用的`slave`节点中,挑选一个作为主节点。这种切换操作如果是人为的操作,那么存在一定的延时性,且耗费较大的人力。为了解决这个问题,`Redis`提供了一种模式--那就是**哨兵模式**。

Redis哨兵模式是一个分布式系统,监控主从架构中的节点。通过自动故障转移,保证集群的**高可用。**哨兵也是一台Redis服务器,只是不提供任何服务,推荐配置为单数(避免投票时出现相同票)。

1、主要结构

1.1、单哨兵模式

image.png

1.2、多哨兵模式

image.png

2、主要功能

2.1、监控

Sentinel会不间断的监控主节点和从节点是否正常。

2.2、通知

当Sentinel检测到某个节点出现异常时,会通知其他哨兵。

2.3、自动故障转移

当主服务器出现故障时,Sentinel会进行一次自动故障转移,它会从失效的主服务器的从服务器中选择出一个可用的从服务器作为新的主服务器,并通知失效的主服务器的从服务器改为复制新的主服务器;当客户端试图连接失效的主服务器时,集群也会向客户端返回新的主服务器地址,使得集群可以使用主服务器替换失效的服务器。

3、Sentinel工作原理分析

3.1、哨兵文件详解

配置1:sentinel monitor master-name ip port quorum
这个配置文件表示的是,哨兵定期监控名字叫做master-nameIP为ip,端口为port的主节点。quorum表示的哨兵判断主节点是否发生故障的票数。也就是说如果我将quorum设置为2,那么就代表至少要有两个哨兵认为主节点故障了,才算这个主节点是客观下线的。一般设置为sentinel节点数的一半加一。
配置2:sentinel down-after-millseconds master-name times
每个哨兵节点会定期发送ping命令来判断Redis节点和其余的哨兵节点是否可达的,如果超过了配置的times时间没有收到pong回复,就主观判断节点是不可达的。times单位为毫秒。
配置3:sentinel parallel-syncs master-name nums
当哨兵节点认为主节点故障时,哨兵投票选出的leader会进行故障转移,选出新的主节点,原来的从节点们会向新的主节点复制。这个配置就是来控制在故障转移之后,每次可以向新的主节点发起复制的节点个数,最多为nums个,因为如果不加控制会对主节点的网络和磁盘IO资源带来较大的压力。
配置4:sentinel failover-timeout master-name times
这个代表哨兵进行故障转移时,如果超过了配置的times时间就表示故障转移失败。
配置5:sentinel auth-pass master-name password
如果主节点设置了密码,则需要这个配置,否则哨兵无法对主节点进行监控。

3.2、为什么用到哨兵

哨兵主要是为了解决在主从复制架构中出现宕机的情况。主要分为两种情况:

3.2.1、从Redis宕机

这个相对来说简单些,在Redis中从库重新启动后会自动加入到主从架构中,自动完成数据同步。在Redis 2.8之后,主从断线后,数据恢复采用增量复制。

3.2.2、主Redis宕机

这个相对来说复杂点,需要以下两步才能完成

  1. 在从数据库中执行slaveof no noe命令,断开主从关系并且提升为主库继续服务。
  2. 将主库重新启动后,执行slaveof 新的master-ip port命令将其设置从库,这时数据就能更新回来,以从库的方式继续提供服务。

由于这个手动操作的过程其实是比较麻烦的并且容易出错,所以Redis提供了**哨兵模式(Sentinel)**来解决这个问题。

3.2.3、主观下线

主观下线就是单个Sentinel认为某个服务下线。Sentinel会以每秒一次的频率向所有与其建立了命令连接的实例(master,从服务,其他Sentinel)发送ping命令,通过判断ping命令回复是有效回复还是无效回复判断实例是否在线(对该Sentinel来说是主观下线)。
Sentinel配置文件中的down-after-millseconds设置了判断主观下线的时间长度,如果实例在down-afetr-millseconds毫秒内,没有收到有效回复(pong),那么Sentinel会认为(主观)该实例已经下线,修改状态为SRI_S_DOWN。如果多个Sentinel监视一个服务,有可能存在多个Sentinel的down-after-mullseconds配置不同。

3.2.4、客观下线

当主观下线的节点是主节点时,此时该哨兵节点会通过指令Sentinel is-master-down-by-addr寻求其他Sentinel节点对主节点的判断,如果其他Sentinel节点也认为主节点客观下线,且认为主观下线的票数超过了quorum(选举个数),此时哨兵节点则认为该主节点确实有问题,认为其事客观下线。
image.png

4、哨兵的三个定时任务监控

4.1、任务1

每个哨兵每10秒会向主节点和从节点发送info命令获取最新的拓扑结构图,哨兵配置时,只需要配置对主节点的监控即可,通过向主节点发送info命令,获取从节点的信息,并当有新的从节点假如时,可以马上感知到。
image.png

4.2、任务2

每个哨兵节点每隔2秒会向Redis数据节点的指定频道发送该哨兵节点对于主节点的判断,以及当前哨兵节点的信息,同时每个哨兵节点也会订阅该频道,来了解其他哨兵节点的信息及对主节点的判断,其实就是通过消息的publishsubscribe来完成的。
image.png

4.3、任务3

每隔1秒,每个哨兵会向主节点、从节点及其余哨兵节点发送一次ping命令做一次心跳检测,这个也是哨兵用来判断节点是否正常的重要依据。
image.png

5、Sentinel的leader选举流程

如果主节点被认为是客观下线之后就会选取一个哨兵节点来完成后面的故障转移工作,选举出一个leader的过程如下:

  1. 每个在线的哨兵节点都可以成为leader,当它确认(比如上图的哨兵3)主节点下线时,会向其他哨兵发送is-master-down-by-addr命令,征求其他哨兵的判断,并且将自己设置为leader,由leader来处理故障转移。
  2. 当其他哨兵收到此消息时,可以同意或者拒绝它成为领导者。
  3. 如果哨兵3发现自己在选举中的票数大于num(Sentinel)/2+1时,将成为领导者,如果没有超过,则继续选举。

image.png

6、自动故障转移机制

在从节点中选择新的主节点。
Sentinel状态数据结构中保存了主服务的所有从服务信息。Sentinel中的leader按照如下规则在从服务中选择一个作为新的主服务。

  1. 过滤掉主观下线的节点
  2. 选择slave-priority最高的节点,如果有则返回,没有就继续选择。
  3. 选择复制偏移量最大的节点,因为复制偏移量越大,说明数据越完整,如果有则返回,没有继续选择。
  4. 选择run_id最小的节点

image.png
通过slaveof no one,让选出来的从节点成为主节点;并通过slaveof命令让其他从节点复制新的主节点。将下线的主节点设置成新主节点的从节点,当其回复正常时,复制新的主节点,变成新主节点的从节点。

7、Sentinel工作原理总结

  • 每个Sentinel以每秒一次的频率向他所知master、slave以及其他Sentinel发送一次ping命令。
  • 如果一个实例距离最后一次回复ping命令的时间超过down-after-millseconds指定的值,则这个实例会被Sentinel标记为主观下线。
  • 如果一个master被标记为主观下线,则正在监控这个master的其他Sentinel要以每秒一次的频率确认master是否进入主观下线
  • 如果有足够数量的Sentinel(大于等于quorum指定的值)认为master确实处于主观下线状态,那么master会被标记为客观下线
  • 在一般情况下,每个Sentinel要以每10秒一次的频率向已知的master、slave发送info命令。
  • 当master被标记为客观下线后,Sentinel向下线的master的所有slave发送info命令的频率会从10秒一次改为每秒一次。

相关文章:

十三、Redis哨兵模式--Sentinel

上一篇介绍了Redis中的主从复制。我们知道Redis主从中一般只有主节点对外提供写操作,如果主节点发生故障,为了保证Redis的可用性,这时就要在可用的slave节点中,挑选一个作为主节点。这种切换操作如果是人为的操作,那么…...

[力扣题解]1005. K 次取反后最大化的数组和

题目:1005. K 次取反后最大化的数组和 思路 贪心法; 用绝对值大小排序,自己写一个比较函数, static bool compare(int a, int b) {return abs(a) > abs(b); }注意这样写出来是降序排列; 代码 class Solution {…...

Web UI自动化测试--PO模式

没有PO实现的测试用例的问题: 重用性低:登录功能重复可维护性差:数据和代码混合可读性差:元素定位方法杂乱(id、xpath、css混杂)可读性差:不易识别操作的含义(特别是css和xpath语法)可维护性差:如果某个元素的属性改了,你要更改多次PO(Page Object Model)页面对象模型…...

Python进阶之-反射机制详解

✨前言: 什么是反射? Python中的“反射”是一个编程术语,它指的是程序在运行时能够检查和操作其自身状态的能力,特别是通过名称(通常是字符串)来访问对象的属性、方法和其他组成部分。这种机制允许代码动态…...

day05-面向对象内存原理和数组

day05 面向对象内存原理和数组 我们在之前已经学习过创建对象了,那么在底层中他是如何运行的。 1.对象内存图 1.1 Java 内存分配 Java 程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域…...

从头理解transformer,注意力机制(下)

交叉注意力 交叉注意力里面q和KV生成的数据不一样 自注意力机制就是闷头自学 解码器里面的每一层都会拿着编码器结果进行参考,然后比较相互之间的差异。每做一次注意力计算都需要校准一次 编码器和解码器是可以并行进行训练的 训练过程 好久不见输入到编码器&…...

ORA-609频繁出现在alert.log,如何解决?

ORA-609就alertlog中比较常见的一个报错,虽然并没有太大的影响,但是频繁的出现在alert log也是很让人厌烦的事情,本文介绍如何排查解决ORA-609问题。 1.ORA-609官方定义 could not attach to incoming connection Cause Oracle process cou…...

JVM 类加载机制

JVM 类加载机制分为五个部分:加载,验证,准备,解析,初始化,下面我们就分别来看一下这五个过程。 加载 加载是类加载过程中的一个阶段,这个阶段会在内存中生成一个代表这个类的 java.lang.class 对…...

亲测-wordpress文章实时同步发布修改删除多个站点的WP2WP插件

一款将wordpress文章同步到其他WordPress网站的插件,通过这款插件,可以保持不同博客之间文章发布、修改、删除的同步。 安装步骤: 主站和分站都要上传这个插件 1.把插件上传到wp-content\plugins解压出来wp2wp文件夹,然后启用插…...

npm无法安装node-sass 的问题

安装 node-sass 的问题呈现:4.9.0版本无法下载 Downloading binary from https://github.com/sass/node-sass/releases/download/v4.9.0/win32-x64-72_binding.node Cannot download "https://github.com/sass/node-sass/releases/download/v4.9.0/win32-x64-…...

springboot 引入第三方bean

如何进行第三方bean的定义 参数进行自动装配...

安装Nginx

如果没有gcc环境,需要安装gcc yum install gcc-c安装依赖 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel工作目录 mkdir /opt/nginx && cd /opt/nginx下载安装包 wget http://nginx.org/download/nginx-1.32.1.tar.gz解压安装包…...

爬虫工具you-get

you-get是一个简单易上手的爬虫小工具,可以从网络中爬取多媒体信息,包括图片、音频和视频。you-get的github项目地址为:https://github.com/soimort/you-get 一、安装 以下为相关依赖,需要分别安装: Python 3 (必须…...

hal_stm32_RTC函数

1设置当前时间: 调用 HAL_RTC_SetTime 来设置小时、分钟、秒和亚秒。 调用 HAL_RTC_SetDate 来设置年、月、日和星期。 HAL_StatusTypeDef HAL_RTC_SetTime(RTC_HandleTypeDef *hrtc, RTC_TimeTypeDef *sTime, uint32_t Format); HAL_StatusTypeDef HAL_RTC_SetDat…...

【大数据·Hadoop】从词频统计由浅入深介绍MapReduce分布式计算的设计思想和原理

一、引入:词频统计问题 假如我们有一亿份文档,需要统计这一亿份文档的词频。我们会怎么做,有以下思路 使用单台PC执行:能不能存的下不说,串行计算,一份一份文档读,然后进行词频统计&#xff0…...

win10建立共享文件夹和ipad共享文件

win10端设置 查看自己的局域网IP 在任意地方新建一个文件夹 打开文件夹的属性,点到共享的地方 点击高级共享 然后点击应用,确认 再回到之前哪个地方,点击共享 把Everyone的权限改为读取/写入 最后点击共享就欧克了 失败的可能原因 ipad端设置 然后回出现一个要输入用户名和…...

手机在网状态多方面重要性

手机在网状态的重要性体现在多个方面,它是现代社会中人们保持联系、获取信息以及进行日常活动不可或缺的一部分。以下是一些关于手机在网状态重要性的详细解释: 通信联系: 手机是在现代社会中进行通信联系的主要工具。当手机处于在网状态时&…...

Multitouch for Mac:手势自定义,提升工作效率

Multitouch for Mac作为一款触控板手势增强软件,其核心功能在于手势的自定义和与Mac系统的深度整合。通过Multitouch,用户可以轻松设置各种手势,如三指轻点、四指左右滑动等,来执行常见的任务,如打开应用、切换窗口、滚…...

IDEA创建springboot项目时不能选择java 8或者java 11等等版本的问题,解决方案

文章目录 1. Project JDK 和 Java 的区别2. 没有 java 8 或 java 11 等版本2.1 方案一2.2 方案二2.3 方案三 1. Project JDK 和 Java 的区别 我们在利用 idea 创建 spring boot 项目时,会有以上两个选项,这两个选项有什么区别? 答&#xff…...

SpringCloudAlibaba:4.3云原生网关higress的JWT 认证

概述 简介 JWT是一种用于双方之间传递安全信息的简洁的、URL安全的声明规范。 定义了一种简洁的,自包含的方法用于通信双方之间以Json对象的形式安全的传递信息,特别适用于分布式站点的单点登录(SSO)场景 session认证的缺点 1.安…...

【机器学习】Reinforcement Learning-强化学习基本概念

1、Q值与V值 1.1 Q值和V值的定义 Q值:也称为动作价值函数,评估动作的价值,它代表了智能体选择这个动作后,一直到最终状态奖励总和的期望,表示为Q(s, a),其中 s是状态,a是动作。 V值&#xff…...

vim编辑器---(1)vim编辑器介绍?

(1)vim编辑器介绍? 1 目录 (a)IC简介 (b)vim简介 (c)Verilog简介 (d)vim编辑器介绍? (e)结束 1 IC简介…...

解密 Unix 中的 “rc“ 后缀:自定义你的工作环境

在文件名中,rc 通常表示 “run commands”(运行命令)或者 “runtime configuration”(运行时配置)。这种命名惯例源自早期的 Unix 系统,用于指示这些文件包含了一系列要在程序运行时执行的命令或配置选项。…...

Java使用csv导出多字段大数据文件(无需写实体映射,自动遍历)

csv工具类CsvUtils 此处使用LinkedHashMap链表哈希表,实现键值中值为空时仍存在数据以及保证顺序与sql顺序一致。 package com.xxx.xxx.utils;import lombok.val; import org.springframework.util.CollectionUtils; import javax.servlet.http.HttpServletRespons…...

Redis 本机无法访问

问题 我在服务器上有两个 Redis 实例,服务端口号分别是 6379 和 6380,Redis 服务器地址假设为 10.0.0.12。其中 6379 这个实例不需要密码即可访问,6380 需要密码访问。 在正常使用几天后,本机突然无法访问 6379 这个实例&#x…...

【论文笔记】Training language models to follow instructions with human feedback B部分

Training language models to follow instructions with human feedback B 部分 回顾一下第一代 GPT-1 : 设计思路是 “海量无标记文本进行无监督预训练少量有标签文本有监督微调” 范式;模型架构是基于 Transformer 的叠加解码器(掩码自注意…...

stm32——OLED篇

技术笔记! 一、OLED显示屏介绍(了解) 1. OLED显示屏简介 二、OLED驱动原理(熟悉) 1. 驱动OLED驱动芯片的步骤 2. SSD1306工作时序 三、OLED驱动芯片简介(掌握) 1. 常用SSD1306指令 2. …...

重卡生产流程的可视化管理与优化

重卡车间可视化是一个将车间内部生产流程、设备状态及人员配置直观展现的技术手段,确保制造过程的每个环节都在最优状态下运行。 在重卡制造领域,从底盘组装、车身焊接、涂装到最终的总装和检验,每一个工作过程都至关重要,对于保…...

软考-软件工程

软件工程概述 软件工程指的是应用计算机科学、数学及管理科学等原理,以工程化的原则和方法来解决软件 问题的工程,目的是提高软件生产率、提高软件质量、降低软件成本。 概述: 软件开发模型:指导软件开发的体系 需求分析确定软件…...

Agent AI智能体:未来社会的角色、发展路径与挑战

目录 引言 一、Agent AI智能体的发展路径 1. 技术进步与智能化水平提升 2. 应用场景拓展与普及 二、Agent AI智能体在未来社会中的角色 1. 提高生产效率与生活品质 2. 促进社会进步与发展 三、Agent AI智能体可能带来的挑战 1. 隐私与安全问题 2. 就业与社会结构变革 …...