【redis13】集群前奏:sentinel模式

这篇具有很好参考价值的文章主要介绍了【redis13】集群前奏:sentinel模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.哨兵sentinel引入背景

我们现在来思考一个问题:如何实现服务的高可用。我们首先想到至少要满足两个要求:1.服务端能够实现主从自动切换;2.对于客户端来说,如果发生了主从切换,则能够自动连接到最新的master节点。
我们首先想到一个思路:增加一个领导者角色,能够管理redis节点存活状态,而且具备路由功能。比如master节点超过一定时间没有给监控服务器发送心跳报文,就把master标记为下线,然后将某个slave变成master。应用每一次都是从这个监控服务器骂道master的地址。
那问题来了?如果这个监控服务器本身出问题了怎么办?或者网络不同了,链接不到监控服务器了?
那是不是应该再创建一个监控服务器,来监控监控服务器?这个似乎无解了?因此如果采取哨兵sentinel的模式,我们该如何设计就是很重要的问题了。

这篇博客内容还不错,我们直接拿来用啦!

对于sentinel机制,我们的问题可以细分为以下几个方面:

  1. 什么是Redis的哨兵模式?
  2. 哨兵模式的优点是什么?
  3. 哨兵模式的工作原理是什么?
  4. 如何配置Redis的哨兵模式?
  5. 哨兵模式中的故障转移是如何实现的?

我们先来了解一下哨兵机制实现了以下主要功能,进一步了解这些功能的实现原理。

【redis13】集群前奏:sentinel模式,一个项目征服Java,精通redis,sentinel

  1. 监控:哨兵节点定期检查Redis主节点和从节点的健康状态。它们发送命令并等待响应,以确保Redis实例正常运行。如果一个节点没有响应,哨兵节点会将其标记为下线。
  2. 故障检测和转移:当一个哨兵节点检测到主节点下线时,它会将这个信息广播给其他哨兵节点。当大多数哨兵节点都确认主节点下线后,它们会开始选举出一个新的主节点。这个过程称为故障转移,它可以确保Redis集群在主节点故障时仍然能够正常运行。
  3. 自动故障转移:一旦新的主节点选出,哨兵节点会更新Redis从节点的配置,使它们切换到新的主节点。这个过程是自动进行的,无需人工干预。
  4. 配置提供和更新:哨兵节点会监控Redis集群的配置,并在需要时提供给客户端。当主节点发生故障转移时,哨兵节点会更新从节点的配置,使它们正确地连接到新的主节点。
  5. 提供集群信息:哨兵节点可以提供有关Redis集群的信息,如主节点、从节点和哨兵节点的地址和状态。

根据上面的描述,我们可以将哨兵的功能总结为以下几点:

哨兵机制可以提供高可用性和故障转移能力,确保Redis集群在主节点故障时仍然可用。

2. 哨兵机制的原理

2.1 基本过程

哨兵实例之间可以相互发现,要归功于 Redis 提供的 pub/sub 机制,也就是发布/订阅机制。哨兵只要和主库建立起了连接,就可以在主库上发布消息了,比如说发布它自己的连接信息(IP 和端口)。同时,它也可以从主库上订阅消息,获得其他哨兵发布的连接信息。当多个哨兵实例都在主库上做了发布和订阅操作后,它们之间就能知道彼此的 IP 地址和端口。除了哨兵实例,我们自己编写的应用程序也可以通过 Redis 进行消息的发布和订阅。所以,为了区分不同应用的消息,Redis 会以频道的形式,对这些消息进行分门别类的管理。所谓的频道,实际上就是消息的类别。当消息类别相同时,它们就属于同一个频道。反之,就属于不同的频道。只有订阅了同一个频道的应用,才能通过发布的消息进行信息交换。
在主从集群中,主库上有一个名为__sentinel__:hello的频道,不同哨兵就是通过它来相互发现,实现互相通信的。我来举个例子,具体说明一下。在下图中,哨兵 1 把自己的 IP(172.16.19.3)和端口(26579)发布到__sentinel__:hello频道上,哨兵 2 和 3 订阅了该频道。那么此时,哨兵 2 和 3 就可以从这个频道直接获取哨兵 1 的 IP 地址和端口号。然后,哨兵 2、3 可以和哨兵 1 建立网络连接。通过这个方式,哨兵 2 和 3 也可以建立网络连接,这样一来,哨兵集群就形成了。它们相互间可以通过网络连接进行通信,比如说对主库有没有下线这件事儿进行判断和协商。【redis13】集群前奏:sentinel模式,一个项目征服Java,精通redis,sentinel

通过上面的讲解我们可以总结出来如下几点:

 1. 哨兵集群的组建步骤

  • 步骤1:启动哨兵节点。
  • 步骤2:配置哨兵节点的监控对象。
  • 步骤3:哨兵节点之间的通信和协调。

2.哨兵节点的角色和作用

  • Master节点:负责处理读写请求的主节点。
  • Slave节点:通过复制Master节点的数据实现数据备份和读取。
  • Sentinel节点:监控Redis集群的状态,负责主库下线判定和故障转移。

哨兵是如何知道从库的信息

哨兵向主库发送INFO命令,主库将从库列表发送给从库,哨兵跟从库列表中的从库建立连接,以便监控从库。

【redis13】集群前奏:sentinel模式,一个项目征服Java,精通redis,sentinel

2.2. 主库下线的判定

在Redis Sentinel中,主从切换的执行由哨兵集群中的多个哨兵节点共同协作完成。当哨兵集群中的某个哨兵节点检测到主节点下线时,它会向其他哨兵节点发送消息,然后所有哨兵节点共同达成一致,选举出一个新的主节点,并将其他从节点指向新的主节点。选举的过程中,哨兵节点会通过投票和心跳机制来确定新的主节点。选举出的新主节点会广播给所有的客户端,以便它们能够与新的主节点进行通信。所以,主从切换的执行是由所有的哨兵节点共同参与的。 

【redis13】集群前奏:sentinel模式,一个项目征服Java,精通redis,sentinel

  1. 哨兵节点通过心跳机制监控主库的状态。
  2. 当哨兵节点判定主库下线时,会广播通知其他哨兵节点。
  3. 哨兵节点通过共识算法,确定主库是否真的下线。

2.3. 哨兵集群选举

  1. 当一个哨兵节点检测到主节点下线时,它会向其他哨兵节点发送消息,通知它们主节点已经下线。
  2. 其他哨兵节点接收到消息后,它们也会检查主节点是否下线。如果它们同意主节点已下线,它们会进入选举过程。
  3. 在选举过程中,哨兵节点会相互通信,通过投票和心跳机制来决定新的主节点。
  4. 每个哨兵节点会为自己选举一个优先级最高的候选节点,然后它们会将自己选举的候选节点发送给其他哨兵节点。
  5. 哨兵节点会根据候选节点的优先级来选出一个新的主节点。如果有多个候选节点具有相同的优先级,那么将根据配置文件中的故障转移超时属性来决定。
  6. 选举出的新主节点将会广播给所有的客户端,以便它们能够与新的主节点进行通信。

需要注意的是,在选举过程中,哨兵节点需要达成多数派的共识才能选出新的主节点。例如,如果哨兵节点的总数为5,那么至少需要3个哨兵节点同意选举结果才能生效。

这个选举过程确保了在主节点下线的情况下,哨兵集群能够自动选举出一个新的主节点,从而保证了Redis的高可用性。

总结一下

  1. 当主库下线后,哨兵节点会开始选举新的主库。
  2. 哨兵节点通过共识算法选出新的主库。
  3. 新主库被选出后,哨兵节点会通知其他节点进行切换。

【redis13】集群前奏:sentinel模式,一个项目征服Java,精通redis,sentinel

3. Redis哨兵模式面试题

根据上面的学习,我们来简答一下常见的Redis高可用相关面试题

3.1. 什么是Redis的哨兵模式?

Redis的哨兵模式是一种用于实现高可用性的机制。在哨兵模式中,多个Redis实例组成一个哨兵集群,其中一个实例作为主服务器,其他实例作为从服务器。哨兵监控主服务器的状态,并在主服务器宕机时自动将某个从服务器提升为新的主服务器,以保证系统的持续可用性。

3.2. 哨兵模式的优点是什么?

自动故障转移:当主服务器宕机时,哨兵可以自动选举一个新的主服务器,从而保证系统的高可用性。
实时监控:哨兵可以实时监控Redis实例的状态,并在发现异常时及时采取措施,如自动切换主服务器。
灵活性:哨兵模式可以根据实际需求配置哨兵集群的大小,以适应不同规模的系统。

3.3. 哨兵模式的工作原理是什么?

哨兵集群中的哨兵不断地监控Redis实例的状态。
每个哨兵通过发送PING命令来检测Redis实例的存活状态。
如果一个哨兵发现主服务器宕机,它会通过选举算法选出一个新的主服务器,并将这一信息广播给其他哨兵。
其他哨兵收到广播后,也会更新自己的配置,以适应新的主服务器。
客户端可以通过连接任意一个哨兵来获取当前的主服务器地址,并与主服务器建立连接。

3.4. 如何配置Redis的哨兵模式?

在每个Redis实例的配置文件中设置sentinel参数,指定哨兵模式的相关配置。
启动每个Redis实例,并指定相应的配置文件。
在哨兵集群中的任意一个哨兵上运行redis-sentinel命令,启动哨兵进程。
哨兵进程会自动发现其他哨兵和Redis实例,并开始监控它们的状态。

4. 5. 哨兵模式中的故障转移是如何实现的?

当一个哨兵发现主服务器宕机时,它会向其他哨兵发送选举请求。
哨兵集群中的所有哨兵会进行选举,选出一个新的主服务器。
选举规则通常是根据优先级、最近一次复制偏移量等因素进行评估。
选举完成后,新的主服务器地址会被广播给其他哨兵和客户端。
客户端可以通过连接任意一个哨兵来获取新的主服务器地址,并与其建立连接。

内容参考:

redis哨兵模式高可用文章来源地址https://www.toymoban.com/news/detail-811736.html

到了这里,关于【redis13】集群前奏:sentinel模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • redis集群和分片-Redis Cluster:分布式环境中的数据分片、主从复制和 Sentinel 哨兵

    当涉及到 Redis 中的集群、分片、主从复制和 Sentinel 哨兵时,这些是构建分布式 Redis 环境中非常重要的概念和组件。下面详细介绍这些概念以及它们在分布式环境中的作用。 Redis Cluster 是 Redis 官方提供的分布式解决方案,用于管理和维护多个 Redis 节点的分布式数据存储。R

    2024年02月13日
    浏览(61)
  • 【Redis前奏曲】初识Redis

    我们在上一篇博客中说到,Redis是一个在内存中存储数据的中间件.用作数据库,数据缓存等方面,在分布式系统中发挥着重要的作用.那么Redis有哪些优点特性呢? Redis在内存中存储数据.MySQL主要是通过 表 的方式来存储组织数据的,是\\\"关系型数据库\\\".而Redis主要是通过 键值对 的方式

    2024年02月03日
    浏览(21)
  • 【征服redis9】快速征服lua脚本

    lua脚本,这个名字总让人想歪,不过老外发明名字,我们只能跟着叫了。这个脚本语言在redis里和Nginx里都有用,所以我们就来看一下。 目录 1 lua的介绍与说明 2 lua的基本语句体验 3.Lua的数据结构和高级特性 Lua是一种小巧而强大的脚本语言,最初由巴西里约热内卢天主教大学

    2024年01月20日
    浏览(38)
  • 【征服Redis12】redis的主从复制问题

    从现在开始,我们来讨论redis集群的问题,在前面我们介绍了RDB和AOF两种同步机制,那你是否考虑过这两个机制有什么用呢?其中的一个重要作用就是为了集群同步设计的。 Redis是一个高性能的键值存储系统,广泛应用于Web应用、缓存、消息队列等领域。在实际应用中,为了

    2024年01月21日
    浏览(36)
  • 【征服redis2】redis的事务与lua

    目录 目录 1.redis事务介绍 2 事务出错的处理 3.Java如何使用redis事务 在前面我们介绍了redis的几种典型数据结构和应用,本文我们来看一下redis的事务问题。事务也是数据库的重要主题,熟悉关系型数据库的读者应该对事务比较了解,简单地说,事务表示一组动作,要么全部执

    2024年01月17日
    浏览(38)
  • 【征服redis5】redis的Redisson客户端

    目录 1 Redisson介绍 2. 与其他Java Redis客户端的比较 3.基本的配置与连接池 3.1 依赖和SDK 3.2 配置内容解析 4 实战案例:优雅的让Hash的某个Field过期 5 Redisson的强大功能 Redisson 最初由 GitHub 用户 “mrniko” 创建,并在 Apache 2.0 许可证下发布。它的目标是提供一组强大的工具和 API,

    2024年01月17日
    浏览(51)
  • 【征服redis8】Redis的AOF持久化

    Redis 支持多种持久化方式来保证数据的可靠性和持久性。前面我们介绍了RDB方式。我们我们介绍第二种方式——AOF(Append Only File)机制是一种常用的持久化方式,它记录了所有对 Redis 数据库进行修改的命令,在 Redis 重启时可以使用这些命令来重构数据库状态。  目录 1.AOF的

    2024年01月19日
    浏览(44)
  • 【征服redis7】谈谈Redis的RDB持久化方式

    从现在开始,我们来探讨redis的一个非常重要的问题——集群,要讨论集群,我们需要先理解redis持久化数据的方法,因为集群本质上就是将一个集群的数据同步到其他机器上。 Redis 6的持久化机制主要有两种:RDB(Redis DataBase)和AOF(Append Only File)。前者效果好,但是代价高

    2024年01月18日
    浏览(48)
  • 【征服redis1】基础数据类型详解和应用案例

    博客计划 ,我们从redis开始,主要是因为这一块内容的重要性不亚于数据库,但是很多人往往对redis的问题感到陌生,所以我们先来研究一下。 本篇,我们先看一下redis的基础数据类型详解和应用案例。 以mysql为代表的数据库,相信很多人都非常熟悉,这是数据持久化存储的

    2024年01月17日
    浏览(39)
  • redis 集群模式(redis cluster)介绍

    目录 一    redis cluster 相关定义 1, redis cluster 是什么 2,redis 集群的组成 3,集群的作用 4,集群架构图 二     Redis集群的数据分片 1,哈希槽是什么 2,哈希槽如何排布 3,Redis集群的主从复制模型 4,哈希槽架构图 三     实验模拟redis 集群 1,实验环境 2,清理实验环

    2024年04月13日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包