哨兵模式(sentinel)

​ 当我们使用主从复制时,从库宕机依然可以将请求发送给主库或者其他从库,但是 Master 宕机,只能响应读操作,写请求无法再执行。所以主从复制架构面临一个严峻问题,主库挂了,无法执行「写操作」,无法自动选择一个 Slave 切换为 Master,也就是无法故障自动切换

哨兵是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统,可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替 已下线的主服务器继续处理命令请求。

哨兵功能主要有以下几点:

  • 监控:哨兵会不断地检查主节点和从节点是否运作正常。
  • 自动故障转移(核心功能):当主节点不能正常工作时,哨兵会开始自动故障转移操作,它会将失效主节点的其中一个从节点升级为新的主节点,并让其他从节点改为复制新的主节点。
  • 配置提供者:客户端(从节点)在初始化时,可以通过连接哨兵来获得当前Redis服务的主节点地址。
  • 通知:哨兵可以将故障转移的结果发送给客户端。

哨兵也是一个 Redis 进程,只是不对外提供读写服务,通常哨兵要配置成单数

一、哨兵集群的组建

哨兵实例之间可以相互发现,要归功于 Redis 提供的 pub/sub 机制,也就是发布 / 订阅机制。

​ 在主从集群中,主库上有一个名为__sentinel__:hello的频道,不同哨兵就是通过它来相互发现并互相通信的。在下图中,哨兵 1 把自己的 IP(172.16.19.3)和端口(26579)发布到__sentinel__:hello频道上,哨兵 2 和 3 订阅了该频道。那么此时,哨兵 2 和 3 就可以从这个频道直接获取哨兵 1 的 IP 地址和端口号。然后,哨兵 2、3 可以和哨兵 1 建立网络连接。同理哨兵2.3也可以建立连接,从而形成哨兵集群。

二、哨兵监控redis库

​ 哨兵对主从库的监控,是通过哨兵向主库发送 INFO 命令来完成的。

​ 哨兵给主库发送INFO命令,主库接受到这个命令后,就会把从库列表返回给哨兵。接着,哨兵就可以根据从库列表中的连接信息,和每个从库建立连接,并在这个连接上持续地对从库进行监控。

三、主库下线的判定

​ 哨兵如何判断主库是否下线了呢?首先要明白主观下线客观下线两个概念。

  • 主观下线:任何一个哨兵都是可以监控探测,并作出Redis节点下线的判断;
  • 客观下线:有哨兵集群共同决定Redis节点是否下线;

也就是说,每一个哨兵会自己做出判断(主观下线),最后共同决定主库是否已经下线(客观下线)。

哨兵通过ping命令来检测master和slave的状态,如果收到的是无效回复,则标记当前节点为**「主观下线」**。

当哨兵2判断主库**「主观下线」后,就会给其他哨兵发送 is-master-down-by-addr 命令。接着,其他哨兵会根据自己和主库的连接情况,做出 Y 或 N 的响应,Y 相当于赞成票,N 相当于反对票。赞成票数(这里是2)是大于等于哨兵配置文件中的 quorum 配置项**(比如quorum=2), 则可以判定**主库「客观下线」了。其实就是判定「主观下线」的票数要过半,就认为「客观下线」**了。

只有 master 被判定为**「客观下线」**,才会进一步触发哨兵开始主从切换流程。

四、新主库的选出

主库下线之后,如何从剩余从库中选取一个作为新主库呢?

  • 过滤掉不健康的(下线或断线),没有回复过哨兵ping响应的从节点。
  • 选择salve-priority从节点优先级最高(redis.conf中)的。
  • 选择复制偏移量最大,也就是复制之前主节点数据最完整的从节点。

选出新主库之后,哨兵要将新主库的信息发送给其他从节点以及客户端,也就是将读写请求转移到新的master。这个操作称为主从切换,需要从哨兵集群中选出一个哨兵来执行此操作。

五、哨兵集群的选举

主库下线后,需要有一个节点(leader)执行主从切换,这个执行操作的节点是由集群选举产生的。

  • 选举机制:通过Raft选举算法实现。 选举的票数大于等于num(sentinels)/2+1且大于等于哨兵配置文件中的 quorum 值时(两个条件缺一不可),将成为领导者,否则继续选举

一个栗子:Redis 1主4从,5个哨兵,哨兵配置quorum为2,如果3个哨兵故障,当主库宕机时,哨兵能否判断主库“客观下线”?能否主从切换?

**(1)可以判定主库“客观下线“。**两个哨兵都判定”主观下线“,达到了quorum的值。

**(2)不可以主从切换。**要进行切换,得到选举的票数必须大于等于5/2+1=3。

六、故障的转移

​ 假设sentinel3为leader:

(1)将slave-1脱离原从节点,升级主节点。

(2)将从节点slave-2指向新的主节点(slave-1)。

(3)通知客户端主节点已更换。

(4)将原主节点(master)变成从节点,指向新的主节点(slave-1)。

转移后

通过 pub/sub 机制发布不同事件,客户端可以订阅哨兵的消息。哨兵提供的消息订阅频道有很多,不同频道包含了主从库切换过程中的不同关键事件。

redis高可用(哨兵模式篇)相关推荐

  1. 3台服务器Redis高可用哨兵模式

    3台服务器Redis高可用哨兵模式 @(学习)[redis, 高可用] 3台服务器Redis高可用哨兵模式 介绍 redis程序安装 哨兵模式配置 1 主redis配置 2 从redis配置 3 启动 ...

  2. mysql哨兵模式_3台服务器Redis高可用哨兵模式实现

    1. 介绍 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主 ...

  3. Redis高可用哨兵Sentinel

    Redis的高可用哨兵Sentinel 什么是Sentinel 如何启动Sentinel服务 Sentinel状态与实例结构 工作流程 主观下线 客观下线 选举领头Sentinel 故障转移 什么是S ...

  4. redis经典三节点高可用哨兵模式集群搭建

    生产环境下,为保证redis的高可用性,通常会搭建集群,redis集群的好处无需多说,提升单节点的读写性能从而整体提升并发效率,达到整体QPS的提升,同时,多个节点可以实现数据共享,在集群模式下,从节 ...

  5. python redis 哨兵_Redis高可用哨兵机制及SpringBoot整合哨兵

    前言:在前面讲到了Redis分片机制可实现内存数据的扩容来提高执行速率---Redis分片机制,可是Redis分片依旧有一些问题,如果redis分片的节点如果有一个服务器宕机,则直接影响用户的使用.R ...

  6. Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】

    ================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...

  7. Redis高可用——主从复制、哨兵模式、集群

    文章目录 一.Redis高可用 1.什么是高可用 2.Redis的高可用技术 二.Redis主从复制 1.Redis主从复制的作用 2.主从复制的流程 三.主从复制的搭建 实验准备 1.所有主机安装R ...

  8. Redis高可用:主从复制及哨兵模式

    目录 主从复制 作用 复制原理 使用的方式 哨兵模式 主从切换过程 Redis Sentinel的配置文件 参考 主从复制 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前 ...

  9. redis 高可用(持久化、主从复制、哨兵、集群)以及集群的三种模式

    Redis高可用定义 在web服务器中,高可用代表服务器可以正常访问的时间,一般使用百分比来衡量多长时间内可以提供正常服务 但是在redis中,高可用的定义还要更广泛一点,除了提供正常的服务(如主从分 ...

  10. Redis高可用方案:sentinel(哨兵模式)和集群

    一. redis高可用方案–sentinel(哨兵模式) 当我们搭建好redis主从复制方案后会发现一个问题,那就是当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力, ...

最新文章

  1. 独家 | 改善AI性别偏见的4种方法
  2. 秋招面经来了,收藏!
  3. virtualbox 安装ubuntu 时,看不到继续、退出按钮?共享文件无权限?
  4. 使用webpack或者gulp去除多余CSS
  5. 货车运输 vijos 1843 NOIP2013 D1T3 最大生成树,并查集,(伪·LCA)
  6. centos 7 下 rabbitmq 3.8.0 erlang 22.1 源码编译安装
  7. 给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
  8. ideadebug热更新_Spring Boot 在IDEA中debug时的hot deployment(热部署)
  9. 《那些年啊,那些事——一个程序员的奋斗史》——65
  10. 基于深度学习的大豆叶片病害识别(自然环境下1470张图像)
  11. openstack changePassword
  12. Linux系统中用源代码编译安装软件和查看进程
  13. java 聊天室系统实训总结_关于JAVA聊天室编写的总结
  14. 微信电影影视小程序系统源码
  15. formatter格式说明
  16. 《MySQL是怎么样运行的》读书笔记一 数据页+索引
  17. excel报错无法粘贴信息,原因复制区域跟粘贴区域形状不同
  18. 如何设计出色的网站后台原型?
  19. Maya如何渲染序列帧
  20. 图扑数字孪生智慧社区,助力社区数字化转型

热门文章

  1. 一切都显得那么苍白无力
  2. 我的世界服务器如何修改天气,我的世界怎么改变天气 我的世界改变天气指令代码大全...
  3. 数据驱动的营销方式和加拿大禁止Clearview AI
  4. VulnHub渗透测试实战靶场笔记(持续更新)
  5. NOJ 1116 哈罗哈的大披萨 【淡蓝】 状态压缩DP
  6. 基于单片机的交通灯设计
  7. javax.crypto.Cipher类--加密和解密
  8. go解析yaml文件示例
  9. Android 后台开发
  10. 虚拟机Linux的安装