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

Redis(哨兵模式)

什么是哨兵机制

  • 问题: redis 主从复制模式下, 一旦主节点由于故障不能提供服务, 需要人工进行主从切换, 同时大量客户端需要被通知切换到新的主节点上, 对于有一定规模的应用来说, 对于人力的资源消耗会很大.
  • 解决: 通过哨兵对主从结构进行监控, 一旦出现主节点挂了的情况, 自动的选举新主节点, 搭建新主从结构, 并主动通知客户端进行主节点切换.

哨兵机制核心功能

  1. 监控 (哨兵机制通过独立的 redis - sentinel 进程体现, 负责对 redis - server 进程的进行监控)
  2. 自动的故障转移(主节点挂了哨兵机制能够自动选举新的主节点,重构主从结构)
  3. 通知

哨兵机制执行流程

哨兵机制对主节点进行 监控 , 当主节点挂了的时候

  1. 先查看已挂的主节点能否抢救
  2. 如果不能抢救, 就需要挑一个从节点, 以它为主节点重新建立主从结构
    2.1 对选中的从节点, 设置 slaveof no one 命令,将其设置为主节点
    2.2 把其他从节点, 修改 slaveof 的主节点 ip, port , 让它们连上新的主节点
  3. 通知客户端, 让客户端连接新的主节点 (修改客户端配置)

对于已挂的主节点, 修复完成后, 挂到新的主从结构中作为 从节点 存在

Redis Sentinel 架构
在这里插入图片描述

哨兵节点集合监控现有的 redis master 和 slave (通过 TCP 长连接) (监控方式为 心跳包机制)
当哨兵节点集合超半数认为主节点挂了之后 (用集合就是为了方式单个哨兵 误判 )
哨兵集合内部选举出一个 leader ,由 leader 挑选出一个新主节点
哨兵节点控制 新主从结构 的搭建
完成后, leader 主动通知客户端, 告知新的主节点


哨兵重新选举 主节点 流程

  1. 主观下线
    单个哨兵通过心跳包判定 redis 挂了 (可能是真挂了, 可能是网络波动…)
  2. 客观下线
    超半数哨兵认为 redis 主节点挂了, 此时就会采取补救措施
  3. 哨兵节点集合 选举 leader
    谁的网络延迟小, 最先发现主节点挂了之后, 就会先投自己一票, 并通知其他哨兵节点, 让他们也投自己 (拉票)
    (ps: 哨兵节点的个数通常设置为奇数 3/5/7, 就是为了防止选 leader 时出现 1:1 , 2:2 … 的情景, 导致无法选出新 leader )
    当某个节点的票数超过法定票数的一半 (2/3 , 4/5 …) , 该哨兵就会晋升为 leader
  4. leader 选举完成, 由 leader 选出一个从节点, 作为新的主节点, 并搭建新的主从结构
    leader 挑选 从节点 遵循三个原则:
    4.1 优先级 : 在配置文件中: slave-priority, 优先级最高者, 会被选中
    4.2 offset : 同步进度最多者, 会被选中
    4.3 run id : 每个 redis - server 进程, 会被随机分配一个 run id
http://www.lryc.cn/news/340873.html

相关文章:

  • 一种基于镜像指示位办法的RingBuffer实现,解决Mirror和2的幂个数限制
  • 【Java开发指南 | 第十一篇】Java运算符
  • 【IC前端虚拟项目】验证环境方案思路和文档组织
  • 程序设计|C语言教学——C语言基础1:C语言的引入和入门
  • 初学python记录:力扣928. 尽量减少恶意软件的传播 II
  • LlamaIndex 组件 - Storing
  • 在Linux系统中设定延迟任务
  • JVM之方法区的详细解析
  • Go 使用ObjectID
  • 基于SpringBoot+Vue的疾病防控系统设计与实现(源码+文档+包运行)
  • 2024年阿里云4核8G配置云服务器价格低性能高!
  • 关于ContentProvider这一遍就够了
  • 《1w实盘and大盘基金预测 day23》
  • 向量数据库与图数据库:理解它们的区别
  • WIN7用上最新版Chrome
  • node.jd版本降级/升级
  • python+playwright 学习-88 禁止加载图片等资源
  • Linux:Redis7.2.4的简单在线部署(1)
  • HackMyVM-Connection
  • Prometheus接入AlterManager配置邮件告警(基于K8S环境部署)
  • find方法
  • TLS v1.3 导致JetBrains IDE jdk.internal.net.http.common CPU占用高
  • 计算机网络 2.2数据传输方式
  • 陇剑杯 流量分析 webshell CTF writeup
  • 【测试开发学习历程】python常用的模块(下)
  • GCDAsynSocket之TCP简析
  • 大型网站系统架构演化实例_1.单体架构和垂直架构
  • 2024蓝桥杯——宝石问题
  • three.js加载模型报错,Error: THREE.GLTFLoader: No DRACOLoader instance provided.
  • Spring VS Spring Boot