redis高可用(哨兵模式篇)
哨兵模式(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高可用(哨兵模式篇)相关推荐
- 3台服务器Redis高可用哨兵模式
3台服务器Redis高可用哨兵模式 @(学习)[redis, 高可用] 3台服务器Redis高可用哨兵模式 介绍 redis程序安装 哨兵模式配置 1 主redis配置 2 从redis配置 3 启动 ...
- mysql哨兵模式_3台服务器Redis高可用哨兵模式实现
1. 介绍 Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主 ...
- Redis高可用哨兵Sentinel
Redis的高可用哨兵Sentinel 什么是Sentinel 如何启动Sentinel服务 Sentinel状态与实例结构 工作流程 主观下线 客观下线 选举领头Sentinel 故障转移 什么是S ...
- redis经典三节点高可用哨兵模式集群搭建
生产环境下,为保证redis的高可用性,通常会搭建集群,redis集群的好处无需多说,提升单节点的读写性能从而整体提升并发效率,达到整体QPS的提升,同时,多个节点可以实现数据共享,在集群模式下,从节 ...
- python redis 哨兵_Redis高可用哨兵机制及SpringBoot整合哨兵
前言:在前面讲到了Redis分片机制可实现内存数据的扩容来提高执行速率---Redis分片机制,可是Redis分片依旧有一些问题,如果redis分片的节点如果有一个服务器宕机,则直接影响用户的使用.R ...
- Redis高可用集群-哨兵模式(Redis-Sentinel)搭建配置教程【Windows环境】
================================================= 人工智能教程.零基础!通俗易懂!风趣幽默!大家可以看看是否对自己有帮助! 点击查看高清无码教程 == ...
- Redis高可用——主从复制、哨兵模式、集群
文章目录 一.Redis高可用 1.什么是高可用 2.Redis的高可用技术 二.Redis主从复制 1.Redis主从复制的作用 2.主从复制的流程 三.主从复制的搭建 实验准备 1.所有主机安装R ...
- Redis高可用:主从复制及哨兵模式
目录 主从复制 作用 复制原理 使用的方式 哨兵模式 主从切换过程 Redis Sentinel的配置文件 参考 主从复制 主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器.前 ...
- redis 高可用(持久化、主从复制、哨兵、集群)以及集群的三种模式
Redis高可用定义 在web服务器中,高可用代表服务器可以正常访问的时间,一般使用百分比来衡量多长时间内可以提供正常服务 但是在redis中,高可用的定义还要更广泛一点,除了提供正常的服务(如主从分 ...
- Redis高可用方案:sentinel(哨兵模式)和集群
一. redis高可用方案–sentinel(哨兵模式) 当我们搭建好redis主从复制方案后会发现一个问题,那就是当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力, ...
最新文章
- 独家 | 改善AI性别偏见的4种方法
- 秋招面经来了,收藏!
- virtualbox 安装ubuntu 时,看不到继续、退出按钮?共享文件无权限?
- 使用webpack或者gulp去除多余CSS
- 货车运输 vijos 1843 NOIP2013 D1T3 最大生成树,并查集,(伪·LCA)
- centos 7 下 rabbitmq 3.8.0 erlang 22.1 源码编译安装
- 给定一个0-1串,请找到一个尽可能长的子串,其中包含的0与1的个数相等。
- ideadebug热更新_Spring Boot 在IDEA中debug时的hot deployment(热部署)
- 《那些年啊,那些事——一个程序员的奋斗史》——65
- 基于深度学习的大豆叶片病害识别(自然环境下1470张图像)
- openstack changePassword
- Linux系统中用源代码编译安装软件和查看进程
- java 聊天室系统实训总结_关于JAVA聊天室编写的总结
- 微信电影影视小程序系统源码
- formatter格式说明
- 《MySQL是怎么样运行的》读书笔记一 数据页+索引
- excel报错无法粘贴信息,原因复制区域跟粘贴区域形状不同
- 如何设计出色的网站后台原型?
- Maya如何渲染序列帧
- 图扑数字孪生智慧社区,助力社区数字化转型