写在前面

之前有位朋友去面试被问到Redis哨兵机制,这道题其实很多小伙伴都应该有被问到过!本文将跟大家一起来探讨如何回答这个问题!同时用XMind画了一张导图记录Redis的学习笔记和一些面试解析(源文件对部分节点有详细备注和参考资料:

先聊聊什么是哨兵机制?

Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:

监控(Monitoring): 哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。

**提醒(Notification):**当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。

**自动故障迁移(Automatic failover):**当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。

1.为什么要有哨兵机制?

哨兵机制的出现是为了解决主从复制的缺点的!再这谈谈redis的主从复制的缺点:

  • 主从复制,若主节点出现问题,则不能提供服务,需要人工修改配置将从变主
  • 主从复制主节点的写能力单机,能力有限
  • 单机节点的存储能力也有限

2.哨兵机制(sentinel)的高可用

原理: 当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。

其实整个过程只需要一个哨兵节点来完成,首先使用Raft算法(选举算法)实现选举机制,选出一个哨兵节点来完成转移和通知

3.哨兵的定时监控任务

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

任务2: 每个哨兵节点每隔2秒会向redis数据节点的指定频道上发送该哨兵节点对于主节点的判断以及当前哨兵节点的信息,同时每个哨兵节点也会订阅该频道,来了解其它哨兵节点的信息及对主节点的判断,其实就是通过消息publish和subscribe来完成的。

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

客观下线: 当主观下线的节点是主节点时,此时该哨兵3节点会通过指令sentinel is-masterdown-by-addr寻求其它哨兵节点对主节点的判断,当超过quorum(选举)个数,此时哨兵节点则认为该主节点确实有问题,这样就客观下线了,大部分哨兵节点都同意下线操作,也就说是客观下线。

4.领导者哨兵选举流程

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

5.故障转移机制

由Sentinel节点定期监控发现主节点是否出现了故障: sentinel会向master发送心跳PING来确认master是否存活,如果master在“一定时间范围”内不回应PONG 或者是回复了一个错误消息,那么这个sentinel会主观地(单方面地)认为这个master已经不可用了

当主节点出现故障, 此时3个Sentinel节点共同选举了Sentinel3节点为领导,负载处理主节点的故障转移

由Sentinel3领导者节点执行故障转移,过程和主从复制一样,但是自动执行

流程:

  1. 将slave-1脱离原从节点,升级主节点,
  2. 将从节点slave-2指向新的主节点
  3. 通知客户端主节点已更换
  4. 将原主节点(oldMaster)变成从节点,指向新的主节点

故障转移后的redis sentinel的拓扑结构图

5.哨兵机制-故障转移详细流程-确认主节点

  • 过滤掉不健康的(下线或断线),没有回复过哨兵ping响应的从节点
  • 选择salve-priority从节点优先级最高(redis.conf)的
  • 选择复制偏移量最大,此指复制最完整的从节点

总结

redis哨兵的作用:

  1. 监控主数据库和从数据库是否正常运行。
  2. 主数据库出现故障时,可以自动将从数据库转换为主数据库,实现自动切换。

什么是Redis哨兵机制?相关推荐

  1. Redis哨兵机制以及发布订阅

    Redis哨兵机制 1 哨兵Sentinel机制 2 哨兵架构原理 3 搭建哨兵架构 4 通过springboot操作哨兵 Redis发布订阅 1 哨兵Sentinel机制 Sentinel(哨兵)是 ...

  2. Redis哨兵机制 哨兵集群搭建

    本文讲解,基于Redis版本:5.0.3  2021-12-24更新:本教程 Redis-6.2.1 同样适用 本文是在Redis集群的基础之上,通过Redis哨兵机制来完成Redis集群的高可用方案 ...

  3. Redis——Redis哨兵机制原理

    摘要 redis的主从复制是redis系统的高可用前提,从库宕机依然可以将请求发送给主库或者其他从库,但是 Master 宕机,只能响应读操作,写请求无法再执行.所以主从复制架构面临一个严峻问题,主库 ...

  4. redis 哨兵机制环境搭建 - 七脉 - 博客园

    原文地址 Redis哨兵机制,一主二从 注:Redis哨兵切换,建议一主多从 一.一主二从 教程步骤:https://www.cnblogs.com/zwcry/p/9046207.html 二.哨兵 ...

  5. redis哨兵机制在集群中的应用

    一.数据存放的2种方式 假设来了一批数据,怎么放入redis集群? 1.分片 2.镜像全量(lvs后面放的就是镜像全量) 对于redis来讲,镜像全量这种方式无效.比如一台节点内存4G,3台也是4G, ...

  6. SpringBoot 整合 Redis 哨兵机制_01

    文章目录 一.哨兵简述 1. 哨兵能解决和未能解决的问题 2. 哨兵的作用 3. 哨兵的主要配置 4. 哨兵综述 二.搭建哨兵 2.1. 思路分析 2.2. 节点分布总览 2.3. 哨兵配置 2.4. ...

  7. Redis - 哨兵机制与主从切换

    Redis 哨兵简介 哨兵(Sentinel)是一个分布式的系统,一个架构中可以运行多个哨兵进程,他们之间使用gossip protocols来进行通信,它为Redis提供了高可用的方案,主要是通过管 ...

  8. Redis主从复制Redis哨兵机制Springboot整合哨兵

    目录 一.Redis主从复制 full resync(全量复制) partial resync(增量复制) 二.Redis主从复制配置 三.哨兵机制原理 每个 Sentinel 都需要定期执行的任务 ...

  9. 图解Redis,Redis主从复制与Redis哨兵机制

    目录 专栏导读 一.Redis复制是什么? 二.Redis复制能干嘛? 三.Redis复制的缺点 1.复制延迟 2.master宕机 四.乐观复制策略 五.Redis复制常用命令 1.info rep ...

最新文章

  1. Web前端工程师的一些常见误区
  2. 基于PowerShell 3.0的web接口测试
  3. python列表、元组、字典和集合的算法时间_27.Python列表(list)、元组(tuple)、字典(dict)和集合(set)详解...
  4. jieba.posseg.cut方法
  5. 【JavaScript】修改图片src属性切换图片
  6. Maven拉取私服Jar包和发布jar包到maven私服
  7. selenide_使用Selenide进行有效的UI测试
  8. Myeclipse下Maven的配置
  9. (王道408考研操作系统)第四章文件管理-第二节4:磁盘的管理
  10. Linux系统编程10:进程入门之系统编程中最重要的概念之进程进程的相关操作使用fork创建进程
  11. java中遍历collection_使用Java中的Iterator遍历Collection
  12. wince6移植之创建.pbcxml文件
  13. EXP-00003解决
  14. 汉字笔画动图怎么做_动态图示范汉字笔顺标准,超全面!
  15. 算术编码 matlab程序,算术编码算法的matlab实现
  16. Hibernate官网下载最新版jar包
  17. 华为的PBC个人绩效评价模板
  18. mysql千万测试表生成,随机id、username、age、sex、create_time
  19. 一键清理系统垃圾.bat文件中的误区,你了解吗?
  20. 365天英语口语学习_11,收拾餐桌碗碟

热门文章

  1. 利用 Openai Gpt-3 实现下一代自动化测试
  2. C++ Reference: Standard C++ Library reference: C Library: cstdio: getc
  3. HTML简单的网页制作期末作业【NBA勒布朗詹姆斯篮球明星】HTML+CSS+JavaScript
  4. 软件测试的痛点有哪些?
  5. 两种编写代码风格方式对比
  6. PowerBuilder中图片文件的处理
  7. JavaPoet开源项目的使用
  8. 基于禁忌搜索算法的三维装箱问题
  9. 一份合格的软件需求规格说明书的要求
  10. ASP内置对象及其作用