Redis Sentinel(哨兵)详解

简介: Redis Sentinel(哨兵)详解

前言:有关Redis的基础知识可以参照我之前写的文章Redis必知必会的知识

在之前的Redis的主从复制模式下,如果一个master宕机,那么需要从slave中选举一个新的master,并且需要修改应用方的master链接地址,还需要从剩余的slave节点复制新master的数据,在此过程中需要人工介入,消耗大量的时间和精力,因此Redis官方提出了一种新的方案就是Sentinel(哨兵)机制,可以实现自动化的故障转移,无需人工介入。

一:什么是Sentinel(哨兵)

Sentinel是一中运行模式,不提供任何的读写过程,它只负责运行特殊的Redis命令执行自动化的故障转移。默认运行在26379端口上,依赖于Redis工作,可以通过以下命令让Redis以Sentinel的形式运行

redis-sentinel /path/to/sentinel.conf

或者

redis-server /path/to/sentinel.conf --sentinel

Redis的源码中sentinel.conf 就是用来配置Sentinel的

// 指定要监视的 master

// 127.0.0.1 6379 为 master 地址

// 2 表示当有 2 个 sentinel 认为 master 失效时,master 才算真正失效

sentinel monitor mymaster 127.0.0.1 6379 2

// master 节点宕机多长时间才会被 sentinel 认为是失效

sentinel down-after-milliseconds mymaster 60000

sentinel failover-timeout mymaster 180000

sentinel parallel-syncs mymaster 1

sentinel monitor resque 192.168.1.3 6380 4

sentinel down-after-milliseconds resque 10000

sentinel failover-timeout resque 180000

// 在发生主备切换时最多可以有 5 个 slave 同时对新的 master 进行同步

sentinel parallel-syncs resque 5

二:Sentinel有什么用

根据Redis的官方文档可以知道,sentinel节点主要提供以下几个功能

1.监控

Sentinel会监控redis的每一个节点(master,slave),甚至包括监控自己

2.故障转移

当一个master节点出现故障后,Sentinel会自动帮助我们实现故障转移,自动将某一台的slave节点选举为新的master节点

3通知

通知slave连接线新的master节点,让他们执行replicaof命令成为新的master的slave

4.配置提供

客户端连接 sentinel 请求 master 的地址,如果发生故障转移,sentinel 会通知新的 master 链接信息给客户端。

三:Sentinel如何检测master节点宕机

1.主观下线

所谓的主观下线是指当某一个Sentinel节点认为一个master节点已经下线了,但是还不是很确定,需要其他的Sentinel进行投票

2.客观下线

客观下线是指过法定票数的sentinel节点认为某一个master已经下线,那么这个master节点就真的下线了

其实就是当sentinel自己认为master下线那么就是主观下线,而sentinel整体达成一致认为master下线那么就是客观下线。

具体的步骤如下:

每个 sentinel 节点以每秒钟一次的频率向整个集群中的 master、slave 以及其他 sentinel 节点发送一个 PING 命令。

主观下线:

如果对应的节点超过规定的时间(down-after-millisenconds)没有进行有效回复的话,就会被其认定 为是 主观下线(SDOWN) 。注意!这里的有效回复不一定是 PONG,可以是-LOADING 或者 - MASTERDOWN 。

客观下线:

所有 sentinel 节点要以每秒一次的频率确认 master 的确下线了,当法定数量(通常为过半)的 sentinel 节点认定 master 已经下线, master 才被判定为 客观下线(ODOWN) 。这样做的目的是为了 防止误判,毕竟故障转移的开销还是比较大的,这也是为什么 Redis 官方推荐部署多个 sentinel 节点 (哨兵集群)。

sentinel 中会有一个 Leader 的角色来负责故障转移,也就是自动地从 slave 中选出一个新的 master 并执行完相关的一些工作(比如通知 slave 新的 master 连接信息,让它们执行 replicaof 成为新 的 master 的 slave)。如果没有足够数量的 sentinel 节点认定 master 已经下线的话,当 master 能对 sentinel 的 PING 命令 进行有效回复之后,master 也就不再被认定为主观下线,回归正常。  

四:Sentinel是如何选举出新的master

slave必须是在线状态才能参加竞选成为新的master,sentinel在选举新的master时是基于以下3个方面来实现的

1.slave的优先级

可以通过slave-priority手动设置slave的优先级,优先级越高成为master的几率也就越高,优先级最高的slave可以直接成为master,如是没有设置slave的优先级sentinel会采用复制进度进一步判断

2.复制进度

sentinel会选择出数据最完整也就是复制进度最快的slave节点升级为master

3.runid

通常经过前面两轮筛选已经成果选出来了新的 master,万一真有多个 slave 的优 先级和复制进度一样的话,那就 runid 小的成为新的 master,每个 redis 节点启动时都有一个 40 字节随机字符串作为运行 id。

五:如何在sentinel集群中选择出Leader

这就需要用到分布式领域的 共识算法 了。简单来说,共识算法就是让分布式系统中的节点就一个问题达成共识。在 sentinel 选举 leader 这个场景下,这些 sentinel 要达成的共识就是谁才是 leader 。 大部分共识算法都是基于 Paxos 算法改进而来,在 sentinel 选举 leader 这个场景下使用的是 Raft 算 法。这是一个比 Paxos 算法更易理解和实现的共识算法—Raft 算法。更具体点来说,Raft 是 MultiPaxos 的一个变种,其简化了 Multi-Paxos 的思想,变得更容易被理解以及工程实现

有关 Raft 算法可以参考以下文章:Raft详解

Raft 协议实战之 Redis Sentinel 的选举 Leader 源码解析

相关文章
|
3月前
|
监控 NoSQL Redis
Redis Sentinel:秒杀系统背后的可靠性保障神器!
本文详细介绍了如何在个人项目中利用 Redis 哨兵模式保障系统的可靠性与高可用性。哨兵模式通过监控主从服务器状态、自动故障转移和通知客户端等功能,确保在主服务器宕机时系统仍能正常运行。适用于读请求多于写请求的场景,如秒杀系统,能有效缓解数据库压力。同时也探讨了哨兵模式在高并发场景下的优化方法及潜在缺陷,帮助开发者更好地应用该模式。
82 7
Redis Sentinel:秒杀系统背后的可靠性保障神器!
|
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月更文挑战第7天】
|
5月前
|
缓存 NoSQL Redis
Redis复制、哨兵
Redis复制、哨兵
46 0
|
7月前
|
NoSQL Java Redis
SpringBoot2.0整合Redis高可用之Sentinel哨兵
本篇博文分享的是一主二从三哨兵模式。至于为什么用三个哨兵,同第一段。本文是模拟环境,都是一个服务器上面。
436 0
|
7月前
|
监控 NoSQL Redis
Redis - 主从复制那些事与高可用sentinel
Redis - 主从复制那些事与高可用sentinel
66 0
|
7月前
|
监控 NoSQL 程序员
Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理
Redis 高可用篇:你管这叫 Sentinel 哨兵集群原理
136 5
|
监控 NoSQL Redis
基于Docker的Redis高可用集群搭建(redis-sentinel)
前言   之前介绍了用docker来搭建redis主从环境,但这只是对数据添加了从库备份(主从复制),当主库down掉的时候,从库是不会自动升级为主库的,也就是说,该redis主从集群并非是高可用的。
7665 1