《redis哨兵机制》

【redis哨兵机制导读】上一节介绍了redis主从同步的机制,但大家有没有想过一种场景,比如:主库突然挂了,那么按照读写分离的设计思想,此时redis集群只有从库才能提供读服务,那么写服务该如何提供,主库挂了,恢复主库也需要一定的时间,不可能这段时间不给业务方提供写服务吧!基于这样的背景,哨兵机制就应运而生。

就好比如下的场景,redis集群是没法给外界提供写服务的。那比如此时是淘宝双11活动期间,那用户就没法下单了,只能查询订单了。
在这里插入图片描述 redis就此推出了哨兵机制,何为哨兵机制?哨兵其实就是运行在特殊模式下的redis进程,特殊模式下的redis进程其实并不对外提供服务,它们的作用就是监控redis集群中所有的主库和从库。怎样监控呢?定期PING所有的主、从库,如果从库没有回应哨兵的PING请求,那么从库会被标记为"下线状态",影响倒不大;如果主库没有回应PING请求,那么哨兵会认为主库挂了,随后便开始自动切换主库的流程

那如何实现自主切换主库流程?哨兵会按照一定的规则,从众多从库中选出一个从库作为主库,随后将新选出的主库信息同步给其它的从库,让从库执行replicaof 命令,从新主库上同步数据;最后将新主库的信息发给客户端,让客户端给新主库发送请求。整体的流程可以用如下流程图进行概括。
在这里插入图片描述
那是否存在哨兵误判的情况?
答案是肯定的,因为主库要扛住那么高的并发请求,网络带宽的压力肯定很大,那是否存在一种可能,哨兵主动PING主库,主库没来得及回应,此时如果哨兵就单纯地认为主库下线了,就显得不客观,主库便被认定为"主观下线"。基于这一现状,redis推出除了哨兵集群,也就是在多个主机上分别运行多个哨兵,构建成一个哨兵集群,这些哨兵同时监控所有的主库和从库,假设有超过半数以上的哨兵没法和主库PING通,那么此时主库大概率是下线,主库此时便被认定为"客观下线"。
主库"客观下线"了,哨兵就要开启选新主库的流程了,那选新主库也是有一定的策略和规则的。主要分为筛选和打分两个流程,筛选主要是把那些下线的从库给剔除掉,选出一批在线的从库。随后进入打分环节。主要包括以下三步:

第一轮:优先级最高的从库得分高

从库优先级可以走配置,用户可以通过 slave-priority 配置项,给不同的从库设置不同优先级,如果选出了优先级最高的从库,那么这个从库就是新的主库了。

第二轮:和旧主库同步程度最接近的从库得分高

何为从库与主库最接近?记得上一节我们提过的环形队列repl_backlog_buffer,环形队列中有两个偏移量master_repl_offset、slave_repl_offset,这两个偏移量的意义,我就不过多介绍了。如果那个从库的slave_repl_offset和主库的master_repl_offset差值最小,那说明该从库和旧主库的数据差异最小,即当前从库就是最新的主库。

第三轮:ID 号小的从库得分高

记得前几节内容提过,每个redis进程都默认有个ID值,ID值最小的,那得分最高,也即是最容易被选为主库。

哨兵集群,经历过上述三个打分流程,肯定能从众多从库中选出最新的主库。

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

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

相关文章

今日AI和商界事件(2025-02-05)

今日AI领域的相关事件主要包括以下几个方面: 一、DeepSeek引发全球关注 性能与成本优势: DeepSeek推出的R1模型性能出色,成本较低,在全球AI行业引发震动。该模型在数学、代码处理等方面性能优异,受到广泛赞誉。 平台…

【赵渝强老师】Spark RDD的依赖关系和任务阶段

Spark RDD彼此之间会存在一定的依赖关系。依赖关系有两种不同的类型:窄依赖和宽依赖。 窄依赖:如果父RDD的每一个分区最多只被一个子RDD的分区使用,这样的依赖关系就是窄依赖;宽依赖:如果父RDD的每一个分区被多个子RD…

开源数据分析工具 RapidMiner

RapidMiner是一款功能强大且广泛应用的数据分析工具,其核心功能和特点使其成为数据科学家、商业分析师和预测建模人员的首选工具。以下是对RapidMiner的深度介绍: 1. 概述 RapidMiner是一款开源且全面的端到端数据科学平台,支持从数据准备、…

蓝桥杯备考:二维前缀和算法模板题(二维前缀和详解)

【模板】二维前缀和 这道题如果我们暴力求解的话,时间复杂度就是q次查询里套两层循环最差的时候要遍历整个矩阵也就是O(q*n*m) 由题目就是10的11次方,超时 二维前缀和求和的公式(创建需要用到)f[i][j]就是从&#xf…

3-track_hacker/2018网鼎杯

3-track_hacker 打开附件 使用Wireshark打开。过滤器过滤http,看里面有没有flag.txt 发现有 得到:eJxLy0lMrw6NTzPMS4n3TVWsBQAz4wXi base64解密 import base64 import zlibc eJxLy0lMrw6NTzPMS4n3TVWsBQAz4wXi decoded base64.b64decode(c) result zlib.deco…

llama.cpp LLM_ARCH_DEEPSEEK and LLM_ARCH_DEEPSEEK2

llama.cpp LLM_ARCH_DEEPSEEK and LLM_ARCH_DEEPSEEK2 1. LLM_ARCH_DEEPSEEK and LLM_ARCH_DEEPSEEK22. LLM_ARCH_DEEPSEEK and LLM_ARCH_DEEPSEEK23. struct ggml_cgraph * build_deepseek() and struct ggml_cgraph * build_deepseek2()References 不宜吹捧中国大语言模型的同…

vite---依赖优化选项esbuildOptions详解

optimizeDeps.esbuildOptions vite.optimizeDeps.esbuildOptions 是 Vite 配置中的一个选项,它允许你在 Vite 启动时,给 esbuild(Vite 用来处理代码转换和优化的工具)传递额外的配置。通过这个配置项,你可以自定义 esb…

DNVS许可审计

在全球化商业环境中,合规性是企业稳定发展的关键因素。为了验证和确保企业遵循DNVS许可的合规标准,DNVS许可审计应运而生。本文将详细介绍DNVS许可审计的重要性、流程及其对企业的价值,帮助您更好地了解如何通过这一审计过程,引领…

因果推断与机器学习—可解释性、公平性和因果机器学习

随着人工智能技术的飞速发展,如人脸识别、自动驾驶、智能音箱和手术机器人等在社会各领域广泛应用,人工智能已成为科技革命和产业变革的核心驱动力。然而,在带来便利的同时,也引发了一系列问题: 数据统计:2016 年,基于美国食品和药物管理局(U.S. Food and Drug Adminis…

【Linux】curl命令详解

【Linux】curl命令详解 【一】curl命令介绍【1】curl命令简介【2】curl命令的基本语法【3】常用的curl命令选项【4】常用的curl命令参数 【二】curl命令示例用法【1】下载文件【2】发送 POST 请求【3】发送请求时附加头部信息【4】请求方法【5】指定用户名和密码进行身份验证【…

第二十章 存储函数

目录 一、概述 二、语法 三、示例 一、概述 前面章节中,我们详细讲解了MySQL中的存储过程,掌握了存储过程之后,学习存储函数则肥仓简单,存储函数其实是一种特殊的存储过程,也就是有返回值的存储过程。存储函数的参数…

使用 Grafana 和 Prometheus展现消息队列性能

引言 上篇文章通过JMX提取Kafka数据,本篇文章将通过JDBC存储Kafka性能数据存储于数据库,并通过Grafana 和 Prometheus进行展示,实现开发中常用的可视化监控 1. 环境准备 Kafka:运行中的 Kafka 集群,确保可以…

Linux:文件系统(软硬链接)

目录 inode ext2文件系统 Block Group 超级块(Super Block) GDT(Group Descriptor Table) 块位图(Block Bitmap) inode位图(Inode Bitmap) i节点表(inode Tabl…

java求职学习day27

数据库连接池 &DBUtils 1.数据库连接池 1.1 连接池介绍 1) 什么是连接池 实际开发中 “ 获得连接 ” 或 “ 释放资源 ” 是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们 采用连接池技术,来共享连接 Connection 。…

机器学习--2.多元线性回归

多元线性回归 1、基本概念 1.1、连续值 1.2、离散值 1.3、简单线性回归 1.4、最优解 1.5、多元线性回归 2、正规方程 2.1、最小二乘法 2.2、多元一次方程举例 2.3、矩阵转置公式与求导公式 2.4、推导正规方程0的解 2.5、凸函数判定 成年人最大的自律就是&#xff1a…

Python | Pytorch | Tensor知识点总结

如是我闻: Tensor 是我们接触Pytorch了解到的第一个概念,这里是一个关于 PyTorch Tensor 主题的知识点总结,涵盖了 Tensor 的基本概念、创建方式、运算操作、梯度计算和 GPU 加速等内容。 1. Tensor 基本概念 Tensor 是 PyTorch 的核心数据结…

996引擎-怪物:Lua 刷怪+清怪+自动拾取

996引擎-怪物:Lua 刷怪+清怪+自动拾取 文件位置NPC脚本参考资料文件位置 文件位置服务端D:\996M2-lua\MirServer-lua\Mir200客户端D:\996M2-lua\996M2_debug\devNPC脚本 服务端\Mir200\Envir\Market_Def\test\test爆率-3.lua -- NPC入口函数 function main(player)-- 获取玩…

git进阶--6---git stash

git进阶–6—git stash 1.需求背景 有时候我们在工作区做了很多的修改,还没到提交的阶段,但是有需要切换到别的分支做一些工作,这时候我们就可以先把工作区的内容保存起来,稍后再做处理这就需要用到git stash,stash翻译为存放&a…

群晖搭建Gitea教程(使用系统自带的postgresql)

基于群晖7.2.2,使用套件中心的gitea,和系统自带的postgresql postgresql: 切换到postgres用户 sudo -I -u postgres 在想要保存数据库的磁盘路径下创建PostgreSql文件夹 初始化数据库文件夹配置 initdb -D ./PostgreSql 备份./PostgreSql路径下的post…

Shell基础:中括号的使用

在Shell脚本中,中括号([ ... ] 和 [[ ... ]])是一种常见的条件测试结构。它们用于进行文件类型检查、值比较以及逻辑判断。通过了解它们的不同特点和用法,能够帮助你编写更加高效、安全且易读的脚本。本文将详细介绍Shell中单中括…