赞
踩
摘要:详细介绍Redis进阶中的高可用性方面,特别是哨兵机制(Redis Sentinel)。我们将探讨哨兵机制的组建过程、监控Redis库主库下线的判定方式、选举新主库的选出方法以及故障的转移过程。同时,还提供了一些参考文章供读者进一步了解。
本文参考蒋德钧 老师的《Redis 核心技术与实战-08 | 哨兵集群:哨兵挂了,主从库还能切换吗》
本章我们带着这些疑问来学习一下Redis高可用
- 什么是Redis的哨兵模式?
- 哨兵模式的优点是什么?
- 哨兵模式的工作原理是什么?
- 如何配置Redis的哨兵模式?
- 哨兵模式中的故障转移是如何实现的?
我们先来了解一下哨兵机制实现了以下主要功能,进一步了解这些功能的实现原理。
监控:哨兵节点定期检查Redis主节点和从节点的健康状态。它们发送命令并等待响应,以确保Redis实例正常运行。如果一个节点没有响应,哨兵节点会将其标记为下线。
故障检测和转移:当一个哨兵节点检测到主节点下线时,它会将这个信息广播给其他哨兵节点。当大多数哨兵节点都确认主节点下线后,它们会开始选举出一个新的主节点。这个过程称为故障转移,它可以确保Redis集群在主节点故障时仍然能够正常运行。
自动故障转移:一旦新的主节点选出,哨兵节点会更新Redis从节点的配置,使它们切换到新的主节点。这个过程是自动进行的,无需人工干预。
配置提供和更新:哨兵节点会监控Redis集群的配置,并在需要时提供给客户端。当主节点发生故障转移时,哨兵节点会更新从节点的配置,使它们正确地连接到新的主节点。
提供集群信息:哨兵节点可以提供有关Redis集群的信息,如主节点、从节点和哨兵节点的地址和状态。
通过这些功能,哨兵机制可以提供高可用性和故障转移能力,确保Redis集群在主节点故障时仍然可用。
哨兵实例之间可以相互发现,要归功于 Redis 提供的 pub/sub 机制,也就是发布 / 订阅机制。哨兵只要和主库建立起了连接,就可以在主库上发布消息了,比如说发布它自己的连接信息(IP 和端口)。同时,它也可以从主库上订阅消息,获得其他哨兵发布的连接信息。当多个哨兵实例都在主库上做了发布和订阅操作后,它们之间就能知道彼此的 IP 地址和端口。除了哨兵实例,我们自己编写的应用程序也可以通过 Redis 进行消息的发布和订阅。所以,为了区分不同应用的消息,Redis 会以频道的形式,对这些消息进行分门别类的管理。所谓的频道,实际上就是消息的类别。当消息类别相同时,它们就属于同一个频道。反之,就属于不同的频道。只有订阅了同一个频道的应用,才能通过发布的消息进行信息交换。
举个蒋德钧 老师在《Redis 核心技术与实战》中的例子
在主从集群中,主库上有一个名为__sentinel__:hello
的频道,不同哨兵就是通过它来相互发现,实现互相通信的。我来举个例子,具体说明一下。在下图中,哨兵 1 把自己的 IP(172.16.19.3)和端口(26579)发布到__sentinel__:hello
频道上,哨兵 2 和 3 订阅了该频道。那么此时,哨兵 2 和 3 就可以从这个频道直接获取哨兵 1 的 IP 地址和端口号。然后,哨兵 2、3 可以和哨兵 1 建立网络连接。通过这个方式,哨兵 2 和 3 也可以建立网络连接,这样一来,哨兵集群就形成了。它们相互间可以通过网络连接进行通信,比如说对主库有没有下线这件事儿进行判断和协商。
通过上面的讲解我们可以总结出来如下几点
- 步骤1:启动哨兵节点。
- 步骤2:配置哨兵节点的监控对象。
- 步骤3:哨兵节点之间的通信和协调。
- Master节点:负责处理读写请求的主节点。
- Slave节点:通过复制Master节点的数据实现数据备份和读取。
- Sentinel节点:监控Redis集群的状态,负责主库下线判定和故障转移。
哨兵向主库发送INFO命令,主库将从库列表发送给从库,哨兵跟从库列表中的从库建立连接,以便监控从库。
在Redis Sentinel中,主从切换的执行由哨兵集群中的多个哨兵节点共同协作完成。当哨兵集群中的某个哨兵节点检测到主节点下线时,它会向其他哨兵节点发送消息,然后所有哨兵节点共同达成一致,选举出一个新的主节点,并将其他从节点指向新的主节点。选举的过程中,哨兵节点会通过投票和心跳机制来确定新的主节点。选举出的新主节点会广播给所有的客户端,以便它们能够与新的主节点进行通信。所以,主从切换的执行是由所有的哨兵节点共同参与的。
- 哨兵节点通过心跳机制监控主库的状态。
- 当哨兵节点判定主库下线时,会广播通知其他哨兵节点。
- 哨兵节点通过共识算法,确定主库是否真的下线。
总结一下
- 当主库下线后,哨兵节点会开始选举新的主库。
- 哨兵节点通过共识算法选出新的主库。
- 新主库被选出后,哨兵节点会通知其他节点进行切换。
大概过程如图
通过本文的介绍,我们详细了解了Redis进阶中的高可用性方面,特别是哨兵机制(Redis Sentinel)。我们了解了哨兵机制的组建过程、监控Redis库主库下线的判定方式、选举新主库的选出方法以及故障的转移过程。对我们学习和面试都有一定的帮助。
参考文章:
- Redis Sentinel Documentation: https://redis.io/topics/sentinel
- 蒋德钧 老师的《Redis 核心技术与实战-08 | 哨兵集群:哨兵挂了,主从库还能切换吗》
《Redis 从入门到精通【进阶篇】之redis主从复制详解》
《Redis 从入门到精通【进阶篇】之Redis事务详解》
《Redis从入门到精通【进阶篇】之对象机制详解》
《Redis从入门到精通【进阶篇】之消息传递发布订阅模式详解》
《Redis从入门到精通【进阶篇】之持久化 AOF详解》
《Redis从入门到精通【进阶篇】之持久化RDB详解》
《Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解》
《Redis从入门到精通【高阶篇】之底层数据结构快表QuickList详解》
《Redis从入门到精通【高阶篇】之底层数据结构简单动态字符串(SDS)详解》
《Redis从入门到精通【高阶篇】之底层数据结构压缩列表(ZipList)详解》
《Redis从入门到精通【进阶篇】之数据类型Stream详解和使用示例》
根据上面的学习,我们来简答一下常见的Redis高可用相关面试题
Redis的哨兵模式是一种用于实现高可用性的机制。在哨兵模式中,多个Redis实例组成一个哨兵集群,其中一个实例作为主服务器,其他实例作为从服务器。哨兵监控主服务器的状态,并在主服务器宕机时自动将某个从服务器提升为新的主服务器,以保证系统的持续可用性。
sentinel
参数,指定哨兵模式的相关配置。redis-sentinel
命令,启动哨兵进程。大家好,我是冰点,今天的高可用哨兵机制(Redis Sentinel)详解,全部内容就是这些。如果你有疑问或见解可以在评论区留言。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。