首页 > 数据库 >redis学习-9(哨兵)

redis学习-9(哨兵)

时间:2024-07-15 17:57:30浏览次数:19  
标签:转移 redis 哨兵 学习 故障 下线 节点

概念

主从复制问题

1、高可用
主节点不可用,需要人工干预进行故障转移,即使自动化了还存在许多问题。
2、redis sentinel
自动完成故障发现和转移,并通知应用方,实现高可用。
存在多个哨兵和数据节点,每个哨兵节点对数据节点和其他哨兵节点进行监控,当节点不可达时,多个哨兵对其进行分析,如果是主节点,则哨兵节点间进行协商推举出一个哨兵来完成故障转移工作并通知应用方。(客户端连接的是哨兵节点集合,从而获取主节点信息)

配置和部署

主从节点部署,哨兵节点部署(类似于数据节点),哨兵节点之间能感知其他哨兵的存在
可监控多个主节点

哨兵部署技巧

1)生产中将哨兵节点部署在不同的物理机上
2)部署至少3个且奇数个
3)监控同一个业务的多个主节点集合,则监控多个主节点,否则只监控一个主节点

API

  1. 展示主节点状态和统计信息
  2. 展示某个主节点的从节点状态和统计信息
  3. 展示某个主节点的哨兵节点集合
  4. 展示主节点的ip和port
  5. 对匹配的主节点配置重置
  6. 强制故障转移
    ...

客户端连接哨兵

实现原理:1、遍历哨兵集合获取可用节点 2、获取主节点相关信息 3、验证主节点真实性,防止故障转移期间的变化
Java操作redis 哨兵 使用JedisSentinelPool全局只有一个,参数部分包括mastername,和sentinels集合

哨兵实现原理

  1. 三个定时监控任务
  • 每隔10s哨兵向主从节点发送info命令获取拓扑结构(获取从节点,感知新的从节点,更新节点拓扑)
  • 每隔2s哨兵向数据节点的__sentinel__:hello频道上发送该哨兵对主节点的判断和自身信息,每个哨兵会订阅该频道(发现新的哨兵,交换主节点的状态)
  • 每隔1s哨兵向主从节点,其他哨兵节点发送ping命令进行心跳检测,确认可达性。
  1. 主观下线和客观下线
    通过间隔1s的心跳检测来主观下线。
    当主观下线的是主节点时候,向其他节点询问对主节点的判断,超过quorum时做出客观下线决定。
  2. 领导者哨兵节点选举
    raft算法:大致是每个哨兵有一票,完成作出客观下线判断的节点请求推举自己为领导者,一旦获得(一半)以上的票,则结束选举
  3. 故障转移
  • 选一个从节点为新的主节点(流程:过滤,优先级,复制偏移量大的,runid最小的)
  • 领导哨兵使其执行slave of no one
  • 向剩余从节点发送命令,让他们称为新主节点的从节点
  • 哨兵节点集合将原来的主节点更新为从节点,并保持关注,恢复后区复制新的主节点。

运维和开发

  1. 故障转移日志分析(模拟方法:kill进程)
    主节点:没有日志
    从节点1:发现失联,收到哨兵节点命令变为主节点,其他从主节点发来了复制请求
    其他从节点:发现和主节点失联,受到哨兵命令复制新主节点,之后发起复制操作
    哨兵1:主观下线,投票领导人,从领导人获知新主节点和从节点,在30s后对原来的主节点进行主观下线
    哨兵3:达到客观下线,被选为领导人,故障转移,发布切换信息
    之后原来的主节点重启,受哨兵命令复制新主节点,复制后哨兵们分别撤销主观下线
  2. 节点运维
  • 主节点下线:选取一个从节点晋升,通过哨兵即可,
  • 从节点和哨兵下线:确保应用端感知到,此外哨兵会监视下线的节点
  • 从节点上线:场景:读写分离时原来的从节点无法支持流量,主节点没有从节点来故障转移,用性能更高的机器换主节点;方法:slave of
  • 加哨兵:场景:无法达到redis sentinel健壮性要求或者票数不够,原来的哨兵要下线;方法:配置哨兵参数启动,自动发现
  • 加主节点:无法添加,需要切换,通过从节点来sentinel failover
  1. 节点配置
    哨兵节点配置一致shang
    一开始便规划好dir、loglevel等
    以上内容提前做好预案

高可用读写分离设计方案

从节点用于主节点的故障转移和读能力扩展

  1. redis sentinel 对各个节点的监控,有事件发生都会发出事件消息,从节点变动事件包括:switch-master(从节点变为主节点)/convert-to-slave(原主节点降级为从节点)/sdown(主观下线)/reboot(重启添加了从节点)
  2. 将所有从节点看成一个资源池(所有客户访问slave资源池),无论上线还是下线客户端都能及时感知到(从资源池中添加和删除)。

标签:转移,redis,哨兵,学习,故障,下线,节点
From: https://www.cnblogs.com/bluebubbleyhbgsj/p/18303684

相关文章

  • vue3+vite学习日记之路由
    一、新项目开启网上的项目视频大多数要什么加好友、评论啥的,我嫌麻烦,还是自己边看边写自己的项目吧。ps:可能会和参考视频有一些差异。二、项目创建先创建项目并进行一些安装配置:1、npmcreatevite@latest->输入项目名称->选择vue->选择ts->根据提示进行 2、安装vue-rou......
  • Scrum学习心得
       作为一种敏捷开发框架,强调团队的协作、快速响应变化以及持续的价值交付, Scrum迭代开发模式让我印象深刻。   Scrum将项目分解为短周期的迭代,每个迭代都能产生可交付的成果,这不仅能够及时获得用户反馈,还能够让团队根据实际情况迅速调整方向,避免了在错误的道路上走......
  • Docker学习笔记
    安装不要安装debian自带的docker:sudoaptinstalldocker-compose。debian11和debian12安装的都是v1,没有dockercompose命令。用官网的安装方式:https://docs.docker.com/engine/install/debian/#install-using-the-repository创建imagehttps://docs.docker.com/reference/cl......
  • 数据结构学习笔记——线性表
    链表1.单链表链表的插入:    (1)需要知道插入位置的前驱结点(从表头顺序遍历)    (2)先修改要插入的结点(新结点)的指针    (3)再修改前驱结点的指针链表的删除:    (1)要知道删除结点的前驱结点(从表头顺序遍历)    (2)只需要修改前驱结点的指......
  • opencv—常用函数学习_“干货“_7
    目录十九、模板匹配从图像中提取矩形区域的子像素精度补偿(getRectSubPix)在图像中搜索和匹配模板(matchTemplate)比较两个形状(轮廓)的相似度(matchShapes)解释二十、图像矩计算图像或轮廓的矩(moments)计算图像或轮廓的Hu不变矩(HuMoments)解释使用示例二一、......
  • 支配树学习笔记
    先抛出一个问题:给一个有向图,问从\(1\)节点出发,求每个节点的受支配集。这里,支配的定义为:若从\(1\)结点出发到\(v\)节点的所有路径中,都必须经过\(u\)节点,则称\(u\)支配\(v\)。那么受支配集意思就是对于\(v\)点满足条件的\(u\)点的集合。那么根据支配的定义,我们可以......
  • 【文化课学习笔记】【物理】动量
    【物理】动量冲量基础概念定义力在时间上的积累。冲量一般用字母\(I\)表示。公式冲量\(I\)的表达式如下:\[I=F\cdott\]由于\(F\)的单位是\(\puN\),\(t\)的单位是\(s\),所以冲量的单位是\(\pu{N*s}\)。根据表达式可知,冲量是矢量,方向与\(F\)相同。注意:冲......
  • redis学习-8(redis内存消耗、内存管理、内存优化)
    redis内存消耗内存使用统计关注used_memory_rss(操作系统)和used_memory_rss(存储数据内存占用量)和其比值。当比值>1,内存碎片<1,存在swap,redis性能下降内存消耗划分rss=自身内存+对象内存+缓冲内存+内存碎片3kb=800kb+...1.对象内存存储键值对2.缓冲内存客户端缓冲......
  • 【vue深入学习第2章】Vue.js 中的 Ajax 处理:vue-resource 库的深度解析
    Vue.js中的Ajax处理:vue-resource库的深度解析在现代前端开发中,Ajax请求是与后端进行数据交互的关键技术。Vue.js作为一个渐进式JavaScript框架,提供了多种方式来处理Ajax请求,其中vue-resource是一个较为常用的库。尽管vue-resource在Vue2.x之后不再是官方推荐的......
  • 【vue深入学习第1章】探索 Vue 2 的生命周期:从创建到销毁
    Vue.js是一个渐进式的JavaScript框架,用于构建用户界面。理解Vue的生命周期是掌握这个框架的关键之一。在这篇博客中,我们将深入探讨Vue2的生命周期,并通过代码示例来展示每个生命周期钩子的作用。Vue实例的生命周期Vue实例的生命周期可以分为四个主要阶段:创建阶段:初始......