你不知道的redis七-redis高可用,哨兵机制详解

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: 你不知道的redis七-redis高可用,哨兵机制详解

年底了,这一个月下来每天加班搞技术规划和年底总结,对程序员来讲,每年年底些PPT应该是最痛苦的了吧,比代码难多了有木有!!


20201205221723356.jpg


周六周日去上课,今天终于把pmp考完了,接下来终于可以静下心来写博客啦!

上周更到了redis的redis主从复制,今天继续学习redis的哨兵机制。在了解哨兵机制之前,我们先了解下什么是高可用。


一、什么是高可用?


1、什么是高可用


redis已经实现主从复制了,即使挂了一台或者服务硬盘坏掉,数据存在同步备份。那它还不是高可用吗?当然!不是~


20201205222303765.png

高可用的定义一般有以下两个解释:

解释1:它与被认为是不间断操作的容错技术有所不同。是目前企业防止核心系统因故障而无法工作的最有效保护手段

解释2:高可用一般指服务的冗余,一个服务挂了,可以自动切换到另外一个服务上,不影响客户体验。


主要就是当我们服务存在异常的时候,可以自动进行容错或者抵抗异常,从而达到不影响到用户正常使用的一种技术


2、主从复制是否高可用分析


1,主从复制,若主节点出现问题,则不能提供服务,需要人工修改配置将从变主


20201205223120391.png

A,主节点(master)故障,从节点slave-1端执行 slaveof no one后变成新主节点;


20201205223314418.png


B,其它的节点成为新主节点的从节点,并从新节点复制数据

  C,需要人工干预,无法实现高可用。

2,主从复制主节点的写能力单机,能力有限

3,单机节点的存储能力也有限

因此,主从复制并不能满足我们高可用的要求。


二、什么是哨兵机制


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


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


20201205224516557.png


三、redis哨兵机制的实现


1、哨兵主要任务


哨兵主要有三个定时监控任务完成对各节点的发现和监控


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


20201205224655503.png

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


20201206112332607.png

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

20201206112352708.png

2、哨兵发现服务下线


哨兵主观下线

主观下线:刚我知道哨兵节点每隔 1 秒对主节点和从节点、其它哨兵节点发送 ping 做心跳检测,当这些心跳检测时间超过 down-after-milliseconds 时,哨兵节点则认为该节点 错误或下线,这叫主观下线;当然这但不代表这个master真的不能用(有可能网络波动导致该哨兵与服务连接异常),所以主观下线是不可靠的,可能存在误判


2020120617130427.png


哨兵客观下线


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


一般来说客观下线满足大多数原则,因此是可靠的判断。


20201206171255655.png

3、领导者哨兵选举流程


a,每个在线的哨兵节点都可以成为领导者,当它确认(比如哨兵3)主节点下线时,会向其它哨兵发is-master-down-by-addr 命令,征求判断并要求将自己设置为领导者,由领导者处理故障转移;

b,当其它哨兵收到此命令时,可以同意或者拒绝它成为领导者;

c,如果哨兵3 发现自己在选举的票数大于等num(sentinels)/2+1 时,将成为领导者,如果没有超过,继续选举…………  

20201206171343682.png


4、服务故障处理


A、由Sentinel节点定期监控发现主节点是否出现了故障


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


20201206171453963.png

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


20201206171505560.png

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

20201206171515282.png

最后集群架构如下

2020120617152377.png


5,故障转移选举节点选择

主要流程如下

20201206173140747.png


A,过滤掉不健康的(下线或断线),没有回复过哨兵 ping 响应的从节点

B,选择 slave-priority 从节点优先级最高(redis.conf)

C,选择复制偏移量最大,指复制最完整的从节点


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
NoSQL Redis
基于Redis的高可用分布式锁——RedLock
这篇文章介绍了基于Redis的高可用分布式锁RedLock的概念、工作流程、获取和释放锁的方法,以及RedLock相比单机锁在高可用性上的优势,同时指出了其在某些特殊场景下的不足,并提到了ZooKeeper作为另一种实现分布式锁的方案。
130 2
基于Redis的高可用分布式锁——RedLock
|
5月前
|
监控 NoSQL Redis
Redis 哨兵模式高可用
Redis 哨兵模式高可用
89 4
|
6月前
|
运维 监控 NoSQL
Redis Sentinel哨兵模式部署
Redis Sentinel哨兵模式部署
121 2
|
2月前
|
监控 NoSQL 算法
Redis Sentinel(哨兵)详解
Redis Sentinel(哨兵)详解
142 4
|
2月前
|
存储 NoSQL 大数据
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试
41 3
|
3月前
|
存储 NoSQL Redis
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
Redis持久化、RDB和AOF方案、Redis主从集群、哨兵、分片集群、散列插槽、自动手动故障转移
SpringCloud基础7——Redis分布式缓存,RDB,AOF持久化+主从+哨兵+分片集群
|
4月前
|
运维 监控 NoSQL
【Redis】哨兵(Sentinel)原理与实战全解~炒鸡简单啊
Redis 的哨兵模式(Sentinel)是一种用于实现高可用性的机制。它通过监控主节点和从节点,并在主节点故障时自动进行切换,确保集群持续提供服务。哨兵模式包括主节点、从节点和哨兵实例,具备监控、通知、自动故障转移等功能,能显著提高系统的稳定性和可靠性。本文详细介绍了哨兵模式的组成、功能、工作机制以及其优势和局限性,并提供了单实例的安装和配置步骤,包括系统优化、安装、配置、启停管理和性能监控等。此外,还介绍了如何配置主从复制和哨兵,确保在故障时能够自动切换并恢复服务。
|
5月前
|
负载均衡 NoSQL 应用服务中间件
搭建高可用及负载均衡的Redis
【7月更文挑战第10天】
188 1
|
6月前
|
监控 NoSQL Java
redis哨兵架构
不过为了高可用一般都推荐至少三个哨兵节点。为什么推荐奇数个哨兵节点跟集群奇数个master节点类似。
45 0
redis哨兵架构