Redis 哨兵 (基于 Docker)

目录

1. 基本概念

2. 安装部署 (基于 Docker)

2.1 使用 docker 获取 redis 镜像

2.2 编排 主从节点

2.3  编排 redis-sentinel 节点

3.  重新选举

4. 选举原理

5. 总结


1. 基本概念

名词

逻辑结构物理结构
主节点Reids 主服务一个独立的 redis-server 进程
从节点Redis 从服务一个独立的 reids-server 进程
Reids 数据节点主从节点主节点和从节点的进程
哨兵节点监控 Reids 数据节点的节点一个独立的 redis-sentinel 进程
哨兵节点集合若干哨兵节点的抽象组合若干 redis-sentinel 进程
Redis 哨兵 (Sentinel)Redis 提供的高可用方案哨兵节点结合和 Redis 主从节点
应用方泛指一个多多个客户端一个或多个连接 Redis 的进程

        我们在使用 主从复制时, 主从节点的复制模式, 让我们的主节点在故障的时候, 有了一个从节点的备份, 保证数据尽量不丢失, 从节点还可以分担主节点的读压力, 让主节点只承担写的请求. 但是这种模式并不是万能的, 还是有问题的 : 

  • 主节点发生故障时, 进行主从切换的过程的复杂的, 需要完全的人工参与, 导致故障时间无法保障.
  • 主节点可以将读压力分散出去, 但写压力 / 存储压力是无法被分担的, 还是受到单机的限制.

我们的第一个问题就是使用哨兵来解决的, 哨兵可以使我们的的切换过程自动化

Redis Sentinel 故障转移的流程 : 

  1.  节点故障, 从节点同步连接中断, 主从复制停止
  2. 哨兵节点通过定期监控发现主节点出现故障, 哨兵节点与其他哨兵节点进行协商, 达成多数认同主节点故障的共识. 这步主要是防止该情况 : 出故障的不是主节点, 而是发现故障的哨兵节点, 该情况经常发生于哨兵节点的网络被孤立的场景下
  3. 哨兵节点之间使用 Raft 算法选举出一个领导角色, 由该节点负责后续的故障转移工作
  4. 哨兵领导者开始执行故障转移 : 从节点中选择一个作为新主节点, 让其他从节点同步新主节点, 通知应用层转移到新主节点

Redis Sentinel 的核心功能 : 

  • 监控 : Sentinel 节点会定期检测 Redis 数据节点, 其余哨兵节点是否可达
  • 故障转移 : 实现从节点晋升 (promotion) 为主节点并维护后续正确的主从关系
  • 通知 : Sentinel 节点会将故障转移的结果通知给应用方 

哨兵节点有一个也是可以的

2. 安装部署 (基于 Docker)

2.1 使用 docker 获取 redis 镜像

查看

2.2 编排 主从节点

创建容器 : 

启动所有容器 : 

验证 : 

2.3  编排 redis-sentinel 节点

创建容器 : 

这里因为启动之后, 每个 sentinel.conf 的内容会发生改变, 所以要是用不同的文件, 但文件的内容是一样的

启动容器 : 

查看日志 :  docker-compose logs

此处, 会发生报错, 哨兵节点不认识 redis-master (一个域名, docker 会解析)

为什么会解析不了呢? docker-compose 一下启动了 N 个容器, 此时 N 哥容器都处于同一个 "局域网" 中, 可以使这 N 个容器之间可以相互访问. 三个 redis-server 节点, 是一个局域网, 三个哨兵节点, 是另一个局域网, 默认情况下, 这两个网络, 不是互通的. 

那么我们可以使用 docker-compose 把此处的两组服务给放到同一个局域网中. 

查看 docker 创建的局域网 : 

在 docker-compose.yml 中加入 : 

重新启动容器 : 

这下全都在同一个局域网中, 就没有问题了

也可以将 六个容器, 都写到同一个 yml 配置中, 一次全都启动, 这样也可以保证互通问题

查看 sentinel. conf 文件, 发现确实发生了变化 : 

3.  重新选举

当 redis-master 宕机之后, 观察 哨兵的日志, 我们可以发现, 哨兵发现了主节点 sdown, 多个哨兵开投票, 当票数达到法定票数,于是, 主节点被判定 odown

  • 主观下线 (sdown) : 哨兵感知到主节点没心跳了. 判定为主观下线.
  • 客观下线 (odown) : 多个哨兵达成一致意见, 才能认为 master 确实下线了.

Redis 主机如果宕机, 哨兵会把其中一个从节点, 提拔成主节点, 当之前的 redis 主节点重启之后, 这个主节点被加入到哨兵的监控中, 但是只会被作为从节点使用

4. 选举原理

  1. 主观下线 : 当 redis-master 宕机, 此时 redis-master 和三个哨兵之间的心跳包就没有了. 此时,  站在三个哨兵的角度来看, redis-master 出现严重故障. 因此三个哨兵均会把 redis-master  判定为主观下线 (SDown)
  2. 客观下线 : 此时, 哨兵 sentinel1, sentinel2, sentinel3 均会对主节点故障这件事情进行投票. 当故障得票数 >= 配置的法定票数之后, 此时意味着 redis-master 故障这个事情被做实了.  此时触发客观下线 (ODown)
  3. 选举出哨兵的 leader : 接下来需要哨兵把剩余的 slave 中挑选出一个新的 master. 这个工作不需要所有的哨兵都参与. 只需要选出个代表(称为 leader ), 由 leader 负责进行 slave 升级到 master 的提拔过程 .这个选举的过程涉及到 Raft 算法 (先下手为强).
  4. leader 挑选出合适的 slave 成为新的 master : 挑选规则 : 1. 比较优先级. 优先级高(数值小的)的上位. 优先级是配置文件中的配置项 (slave-priority 或者 replica-priority). 2.比较 replication offset 谁复制的数据多, 高的上位. 3.比较run id, 谁的 id 小, 谁上位.
  5. 当某个 slave 节点被指定为 master 之后, leader 指定该节点执行slave no one, 成为 master, leader 指定剩余的 slave 节点, 都依附于这个新 master \

5. 总结

  • 哨兵节点不能只有一个. 否则哨兵节点挂了也会影响系统可用性.
  • 哨兵节点最好是奇数个. 方便选举leader, 得票更容易超过半数.
  • 哨兵节点不负责存储数据. 仍然是 redis 主从节点负责存储
  • 哨兵 + 主从复制解决的问题是 "提高可用性", 不能解决 "数据极端情况下写丢失" 的问题.
  • 哨兵 + 主从复制不能提高数据的存储容量. 当我们需要存的数据接近或者超过机器的物理内存,  这样的结构就难以胜任了.

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

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

相关文章

Python学习-day4

Python 语言的运算符: 算术运算符比较(关系)运算符赋值运算符逻辑运算符位运算符成员运算符身份运算符运算符优先级 算术运算符 定义变量a 21,变量b 10。运算符描述实例加 - 两个对象相加a b 输出结果 31-减 - 得到负数或是一个数减去另一…

Vite 插件 @vitejs/plugin-legacy 深度解析:旧浏览器兼容指南

📖 简介 vitejs/plugin-legacy 是 Vite 官方提供的兼容性插件,专门用于为现代浏览器构建的应用程序提供对旧版浏览器的支持。该插件通过自动生成兼容性代码和 polyfill,确保您的应用能够在 IE 11 等旧版浏览器中正常运行。 核心价值 向后兼…

数据质检之springboot通过yarn调用spark作业实现数据质量检测

Spring Boot 应用中通过 YARN 来调用 Spark 作业的来执行数据质检。这是一个非常经典的数据质量检测、数据优化的常用架构,将Web服务/业务处理(Spring Boot)与大数据质检(Spark on YARN)解耦。 核心架构图 首先,通过一张图来理解整个流程的架构: 整个流程的核心在于,…

SQL优化_以MySQL为例

MySQL SQL 优化详细教程与案例 1. 理解SQL执行过程 在优化之前,需要了解MySQL如何处理SQL查询: 客户端发送SQL语句到服务器服务器检查查询缓存(MySQL 8.0已移除查询缓存)解析器解析SQL,生成解析树预处理器验证权限和表…

探索数据结构中的 “树”:揭开层次关系的奥秘

在计算机科学的广袤森林中,有一种数据结构如同参天大树般支撑着无数应用的根基 —— 它就是 “树”(Tree)。它不仅仅是一个抽象概念,更是我们理解和组织信息、模拟现实世界层级关系的强大工具。1. 什么是 “树”?从家族…

技术框架之RPC

一、序言:为什么我们需要RPC?在单体应用时代,函数调用是进程内的简单操作。但随着业务规模扩大,系统被拆分为多个独立服务(如订单服务、支付服务),服务间通信成为刚需。早期开发者常使用HTTPJSO…

【光照】Unity中的[光照模型]概念辨析

【从UnityURP开始探索游戏渲染】专栏-直达 基础光照模型‌ ‌标准光照模型(Standard Lighting Model)‌ ‌定义‌:传统光照计算的框架,通常包含漫反射、镜面反射和环境光三部分。‌特点‌:非物理经验模型&#xff0c…

MCU上跑AI—实时目标检测算法探索

MCU上跑实时目标检测算法 前几年一直忙着别的事情没有在技术分享上下功夫, 这段时间稳定下来就想和几个志同道合的朋友做点有意义的事情, 于是乎就使用MCU做了个与AI有识别相关的 “小玩意儿”. 本人负责嵌入式端相关的编码, AI相关的工作由好友 AgeWang 负责. 这儿把一些成果给…

SpringBoot 整合 RabbitMQ 的完美实践

引言: 本文总字数:约 9200 字 预计阅读时间:38 分钟 为什么 RabbitMQ 是消息中间件的优选? 在分布式系统架构中,消息中间件扮演着 "交通枢纽" 的角色,负责协调各个服务之间的通信。目前主流的消息中间件有 RabbitMQ、Kafka 和 RocketMQ,它们各具特色: Kafka…

nestjs 发起请求 axios

1、下载npm i --save nestjs/axios axios2、全局配置import { HttpModule } from nestjs/axios;Global() Module({imports: [HttpModule.registerAsync({inject: [ConfigService],useFactory: async (configService: ConfigService) > {return {timeout: configService.get(…

将 Logits 得分转换为概率,如何计算

场景:动物识别,输入一张28*28的图像,模型输出属于 猫、狗、鸟 哪个类型。需求:假设模型 ​​Logits(模型在每个类别的置信度得分) 输出为​​:[猫: 3.2, 狗: 1.5, 鸟: -0.8]。计算 ​​Softmax …

【Qt】bug排查笔记——QMetaObject::invokeMethod: No such method

问题如题目所示:QMetaObject::invokeMethod: No such method xxxx,在网上好一顿查,又将查到的资料喂给了 Ai,才最终将问题解决,特此记录下。 一、问题背景 在做公司项目时,使用了插件的方式开发。主程序加载…

Spring Boot手写10万敏感词检查程序

使用Spring Boot手写10万敏感词检查程序 本文将介绍如何使用Spring Boot构建一个高效的敏感词检查系统,能够处理多达10万个敏感词的检测需求。我们将使用DFA(Deterministic Finite Automaton)算法来实现高效匹配,并提供RESTful API接口。 实现步骤 1. 创建Spring Boot项…

零构建的快感!dagger.js 与 React Hooks 实现对比,谁更优雅?

“Add Tags” 技术方案并行对比:React Hooks vs dagger.js(含核心 JS 代码) 源码: React Hooks:https://codepen.io/prvnbist/pen/jJzROe?editors1010dagger.js:https://codepen.io/dagger8224/pen/ZErjzw…

矩池云中LLaMA- Factory多机多卡训练

LLaMA Factory 是一款开源低代码大模型微调框架,集成了业界最广泛使用的微调技术,支持通过 Web UI 界面零代码微调大模型,目前已经成为开源社区内最受欢迎的微调框架之一。但是在矩池云上如何使用LLaMA-Factory多机多卡训练模型呢&#xff1f…

Nginx的反向代理与正向代理及其location的配置说明

一、Nginx中location匹配优先级Nginx中location匹配优先级location支持各种匹配规则,在多个匹配规则下,Nginx对location的处理是有优先级的,优先级高的规则会优先进行处理;而优先级低的规则可能会最后处理或者不进行处理。注意&am…

神经网络正则化三重奏:Weight Decay, Dropout, 和LayerNorm

正则化是机器学习中防止模型过拟合、提升泛化能力的核心技术。Weight Decay、Dropout和LayerNorm是三种最常用的方法,但它们的工作原理和首要目标截然不同。下面的流程图揭示了它们的核心区别与联系: #mermaid-svg-vymek6mFvvfxcWiM {font-family:"…

两台电脑通过网线直连共享数据,设置正确,却互相ping不通的解决方法

因为某些原因,需要两台电脑互传资源,但是某台电脑可能无法连接外网。如果手头有根网线,很容易想到通过一根网线连接两台电脑互传数据。 这里先说一下基本的设置: 两台电脑最好都关闭防火墙;两台电脑都打开专用网络和公…

面试新纪元:无声胜有声,让AI成为你颈上的智慧伙伴

面试,无论是对于面试官还是求职者,都像一场无声的战争。 一方要精准识人,一方要完美自荐;一方怕问不到点子上,一方怕答不到心坎里。 紧张、遗忘、表达失误、准备不足……这些问题几乎每个人都经历过。 有没有一种方…

qt-C++笔记之QtDesigner-Creator按钮图标与样式

qt-C笔记之QtDesigner-Creator按钮图标与样式 整理:如何用 .qrc 管理资源、在 Designer/Creator 中为 QPushButton 设置图标(资源或系统主题),以及用样式表调整文字样式。涵盖 C/Qt 与 PySide/PyQt;Linux 桌面优先&am…