CN114138568A - Redis哨兵模式下客户端故障转移的调度方法及系统 - Google Patents
Redis哨兵模式下客户端故障转移的调度方法及系统 Download PDFInfo
- Publication number
- CN114138568A CN114138568A CN202111493509.0A CN202111493509A CN114138568A CN 114138568 A CN114138568 A CN 114138568A CN 202111493509 A CN202111493509 A CN 202111493509A CN 114138568 A CN114138568 A CN 114138568A
- Authority
- CN
- China
- Prior art keywords
- redis
- client
- module
- node
- message
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/16—Error detection or correction of the data by redundancy in hardware
- G06F11/20—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
- G06F11/202—Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
- G06F11/2023—Failover techniques
- G06F11/203—Failover techniques using migration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Maintenance And Management Of Digital Transmission (AREA)
- Small-Scale Networks (AREA)
Abstract
本发明提供了一种Redis哨兵模式下客户端故障转移的调度方法及系统,涉及计算机技术领域,该方法包括:步骤S1:创建监听器,监听主节点切换频道;步骤S2:建立Redis客户端,通过Redis客户端注册所述监听器;步骤S3:判断哨兵模式下的主节点是否发生故障转移,发生故障转移时,Redis客户端能够接收到主节点切换频道的消息;步骤S4:Redis客户端切换主节点并重置连接。本发明能够监听Redis哨兵模式下的主节点故障转移的消息,解决了Java客户端无法自动切换至新的主节点的问题。
Description
技术领域
本发明涉及计算机技术领域,具体地,涉及一种Redis哨兵模式下主节点发生故障时客户端自动转移的调度方法,尤其涉及一种Redis哨兵模式下客户端故障转移的调度方法及系统。
背景技术
Redis哨兵(Sentinel)是一个分布式系统,可自动干预Redis主从切换,主要用于管理多个Redis服务器,执行监控、通知、自动故障迁移任务。
原生的Redis哨兵集群模式下主从节点切换的介绍:如果Redis节点未在指定的时间内,对向它发送PING命令(用于确定两台主机之间是否能成功交换数据包)的哨兵返回一个有效回复,该哨兵就会将这个节点标记为主观下线。当某个哨兵先监测到主节点不可用时,系统并不会马上进行failover过程(failover过程即为主节点故障后,从节点升级为主节点的过程)。该哨兵会向其他哨兵发送命令来询问其他哨兵是否认为主节点的服务器已下线并提议选举自己为领导者哨兵。如果在给定时间内接收到多数哨兵(哨兵数量应大3且为奇数)的同意时,领导者哨兵产生。领导者哨兵选出一个从节点,并将它升级为主节点。之后,哨兵向被选中的从节点发送命令,让它转变为主节点。该过程为Redis哨兵模式在主节点发生故障后的选举及切换过程,且该过程可由Redis自动完成。
公开号为CN107016087B的发明专利,公开了一种基于哨兵模型的层级数据库高可用系统,该系统包含客户端、哨兵单元、驱动单元和数据库集群。客户端通过配置哨兵单元的哨兵节点信息与驱动单元交互,从而访问数据库集群。哨兵单元包括为客户端提供服务,同时实时监控主库和从库存活状态,如果主库宕机实现主库故障自动切换,并且在切换过程中补偿差异数据,从而保证在主库故障时不丢失数据。驱动单元接收客户端传入的哨兵节点信息,解析后返回主库连接给客户端。数据库集群为层级数据库主从复制集群。
现开源的Java调用Redis的工具主要有Jedis、Lettuce等,然而这些开源项目并没有提供在Redis哨兵模式下主节点发生故障时的自动切换功能。当主节点故障时,Java客户端会仍然连接在故障的节点上,无法自动切换至新选举出来的主节点。
发明内容
针对现有技术中的缺陷,本发明提供一种Redis哨兵模式下客户端故障转移的调度方法及系统。
根据本发明提供的一种Redis哨兵模式下客户端故障转移的调度方法及系统,所述方案如下:
第一方面,提供了一种Redis哨兵模式下客户端故障转移的调度方法,所述方法包括:
步骤S1:创建监听器类,监听主节点切换频道;
步骤S2:建立Redis客户端,通过Redis客户端注册所述监听器类;
步骤S3:判断哨兵模式下的主节点是否发生故障转移,发生故障转移时,Redis客户端能够接收到主节点切换频道的消息;
步骤S4:Redis客户端切换主节点并重置连接。
优选的,步骤S1.1:新建类实现RedisPubSubListener接口;
步骤S1.2:利用Java类实现接口的机制,实现RedisPubSubListener接口中的message方法;
步骤S1.3:在message方法中监听到主节点故障切换消息时,执行步骤S4中Redis客户端切换主节点并重置连接。
优选的,所述步骤S2包括:
步骤S2.1:新建Redis客户端;
步骤S2.2:新建步骤S1中的监听器实例;
步骤S2.3:将步骤S2.2中新建的监听器实例注册在步骤S2.1中新建的Redis客户端中。
优选的,所述步骤S3还包括:
步骤S3.1:Redis客户端接收到主节点切换频道的消息;
步骤S3.2:判断该消息是否已被处理过,若已被处理过则结束,未被处理过则进入下一步骤;
步骤S3.3:调用Redis客户端主节点切换和重置连接的方法。
优选的,所述步骤S4包括:
步骤S4.1:给整个主节点切换和重置连接方法加锁;
步骤S4.2:关闭原主从节点的连接和Redis客户端;
步骤S4.3:创建新的Redis主从节点客户端。
第二方面,提供了一种Redis哨兵模式下客户端故障转移的调度系统,所述系统包括:
模块M1:创建监听器类,监听主节点切换频道;
模块M2:建立Redis客户端,通过Redis客户端注册所述监听器类;
模块M3:判断哨兵模式下的主节点是否发生故障转移,发生故障转移时,Redis客户端能够接收到主节点切换频道的消息;
模块M4:Redis客户端切换主节点并重置连接。
优选的,模块M1.1:新建类实现RedisPubSubListener接口;
模块M1.2:利用Java类实现接口的机制,实现RedisPubSubListener接口中的message方法;
模块M1.3:在message方法中监听到主节点故障切换消息时,执行模块M4中Redis客户端切换主节点并重置连接。
优选的,所述模块M2包括:
模块M2.1:新建Redis客户端;
模块M2.2:新建模块M1中的监听器实例;
模块M2.3:将模块M2.2中新建的监听器实例注册在模块M2.1中新建的Redis客户端中。
优选的,所述模块M3包括:
模块M3.1:Redis客户端接收到主节点切换频道的消息;
模块M3.2:判断该消息是否已被处理过,若已被处理过则结束,未被处理过则进入下一步骤;
模块M3.3:调用Redis客户端主节点切换和重置连接的方法。
优选的,所述模块M4包括:
模块M4.1:给整个主节点切换和重置连接方法加锁;
模块M4.2:关闭原主从节点的连接和Redis客户端;
模块M4.3:创建新的Redis主从节点客户端。
与现有技术相比,本发明具有如下的有益效果:
1、本发明通过利用Redis的订阅监听机制,监听Redis哨兵模式下的主节点故障转移的消息;
2、本发明解决了Java客户端无法自动切换至新的主节点的问题。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明整体示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
本发明实施例提供了一种Redis哨兵模式下客户端故障转移的调度方法,参照图1所示,该方法包括:
步骤S1:创建监听器类,监听主节点切换频道;
在该步骤中,具体包括:
首先新建Java类,该类需实现Lettuce框架io.lettuce.core.pubsub包下的RedisPubSubListener接口;
利用Java类实现接口的机制,实现RedisPubSubListener接口中的message方法;
在message方法中监听到主节点故障切换消息时,Redis客户端切换主节点并重置连接。
步骤S2:建立Redis客户端,通过Redis客户端注册监听器;
该步骤具体包括:先新建一个Redis客户端,再新建一个步骤S1中的监听器类的实例对象,最后通过Redis客户端注册监听器。
步骤S3:判断哨兵模式下的主节点是否发生故障转移,发生故障转移时,Redis客户端能够接收到主节点切换频道的消息;Redis客户端接收到主节点切换频道的消息后,判断该消息是否已被处理过,若已被处理过则结束,未被处理过则进入下一步骤。最后再调用Redis客户端主节点切换和重置连接的方法。
步骤S4:Redis客户端切换主节点并重置连接。
在该步骤当中,具体包括:
给整个主节点切换和重置连接方法加锁;
具体地,利用Java语言中的synchronized关键字给整个主节点切换和重置方法加锁以保证高并发场景下的安全问题;
关闭原主从节点的连接和Redis客户端;
具体地,调用原主从连接对象的close方法来关闭其主从连接,调用原Redis主从客户端的shutdown方法来关闭Redis客户端;
创建新的Redis主从节点客户端。
具体地,调用lettuce框架中RedisClient对象的create静态方法来创建新的Redis主从节点客户端。
本发明还提供了一种Redis哨兵模式下客户端故障转移的调度系统,该系统具体不包括:
模块M1:创建监听器类,监听主节点切换频道;
具体模块M1包括:模块M1.1:新建类实现RedisPubSubListener接口;
模块M1.2:利用Java类实现接口的机制,实现RedisPubSubListener接口中的message方法;
模块M1.3:在message方法中监听到主节点故障切换消息时,执行模块M4中Redis客户端切换主节点并重置连接。
模块M2:建立Redis客户端,通过Redis客户端注册所述监听器类;
具体地,模块M2包括:
模块M2.1:新建Redis客户端;
模块M2.2:新建模块M1中的监听器实例;
模块M2.3:将模块M2.2中新建的监听器实例注册在模块M2.1中新建的Redis客户端中。
模块M3:判断哨兵模式下的主节点是否发生故障转移,发生故障转移时,Redis客户端能够接收到主节点切换频道的消息;
具体地,模块M3包括:
模块M3.1:Redis客户端接收到主节点切换频道的消息;
模块M3.2:判断该消息是否已被处理过,若已被处理过则结束,未被处理过则进入下一步骤;
模块M3.3:调用Redis客户端主节点切换和重置连接的方法。
模块M4:Redis客户端切换主节点并重置连接。
具体地,模块M4包括:
模块M4.1:给整个主节点切换和重置连接方法加锁;
模块M4.2:关闭原主从节点的连接和Redis客户端;
模块M4.3:创建新的Redis主从节点客户端。
具体实施原理:
本发明基于Redis的订阅发布机制,通过接收Redis主节点故障的消息来触发接下来自动转移的流程。当接收到主节点故障的消息时,关闭原主从节点连接和客户端,随即创建新的主从节点连接和客户端从而最终达到了主节点故障时自动转移的目的。
本发明实施例提供了一种Redis哨兵模式下客户端故障转移的调度方法及系统,通过利用Redis的订阅监听机制,监听Redis哨兵模式下的主节点故障转移的消息,解决了Java客户端无法自动切换至新的主节点的问题。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置、模块、单元以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置、模块、单元以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置、模块、单元可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置、模块、单元也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置、模块、单元视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
Claims (10)
1.一种Redis哨兵模式下客户端故障转移的调度方法,其特征在于,包括:
步骤S1:创建监听器类,监听主节点切换频道;
步骤S2:建立Redis客户端,通过Redis客户端注册所述监听器类;
步骤S3:判断哨兵模式下的主节点是否发生故障转移,发生故障转移时,Redis客户端能够接收到主节点切换频道的消息;
步骤S4:Redis客户端切换主节点并重置连接。
2.根据权利要求1所述的Redis哨兵模式下客户端故障转移的调度方法,其特征在于,所述步骤S1包括:
步骤S1.1:新建类实现RedisPubSubListener接口;
步骤S1.2:利用Java类实现接口的机制,实现RedisPubSubListener接口中的message方法;
步骤S1.3:在message方法中监听到主节点故障切换消息时,执行步骤S4中Redis客户端切换主节点并重置连接。
3.根据权利要求1所述的Redis哨兵模式下客户端故障转移的调度方法,其特征在于,所述步骤S2包括:
步骤S2.1:新建Redis客户端;
步骤S2.2:新建步骤S1中的监听器实例;
步骤S2.3:将步骤S2.2中新建的监听器实例注册在步骤S2.1中新建的Redis客户端中。
4.根据权利要求1所述的Redis哨兵模式下客户端故障转移的调度方法,其特征在于,所述步骤S3还包括:
步骤S3.1:Redis客户端接收到主节点切换频道的消息;
步骤S3.2:判断该消息是否已被处理过,若已被处理过则结束,未被处理过则进入下一步骤;
步骤S3.3:调用Redis客户端主节点切换和重置连接的方法。
5.根据权利要求1所述的Redis哨兵模式下客户端故障转移的调度方法,其特征在于,所述步骤S4包括:
步骤S4.1:给整个主节点切换和重置连接方法加锁;
步骤S4.2:关闭原主从节点的连接和Redis客户端;
步骤S4.3:创建新的Redis主从节点客户端。
6.一种Redis哨兵模式下客户端故障转移的调度系统,其特征在于,包括:
模块M1:创建监听器类,监听主节点切换频道;
模块M2:建立Redis客户端,通过Redis客户端注册所述监听器类;
模块M3:判断哨兵模式下的主节点是否发生故障转移,发生故障转移时,Redis客户端能够接收到主节点切换频道的消息;
模块M4:Redis客户端切换主节点并重置连接。
7.根据权利要求6所述的Redis哨兵模式下客户端故障转移的调度系统,其特征在于,所述模块M1包括:
模块M1.1:新建类实现RedisPubSubListener接口;
模块M1.2:利用Java类实现接口的机制,实现RedisPubSubListener接口中的message方法;
模块M1.3:在message方法中监听到主节点故障切换消息时,执行模块M4中Redis客户端切换主节点并重置连接。
8.根据权利要求6所述的Redis哨兵模式下客户端故障转移的调度系统,其特征在于,所述模块M2包括:
模块M2.1:新建Redis客户端;
模块M2.2:新建模块M1中的监听器实例;
模块M2.3:将模块M2.2中新建的监听器实例注册在模块M2.1中新建的Redis客户端中。
9.根据权利要求6所述的Redis哨兵模式下客户端故障转移的调度系统,其特征在于,所述模块M3包括:
模块M3.1:Redis客户端接收到主节点切换频道的消息;
模块M3.2:判断该消息是否已被处理过,若已被处理过则结束,未被处理过则进入下一步骤;
模块M3.3:调用Redis客户端主节点切换和重置连接的方法。
10.根据权利要求6所述的Redis哨兵模式下客户端故障转移的调度系统,其特征在于,所述模块M4包括:
模块M4.1:给整个主节点切换和重置连接方法加锁;
模块M4.2:关闭原主从节点的连接和Redis客户端;
模块M4.3:创建新的Redis主从节点客户端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111493509.0A CN114138568A (zh) | 2021-12-08 | 2021-12-08 | Redis哨兵模式下客户端故障转移的调度方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111493509.0A CN114138568A (zh) | 2021-12-08 | 2021-12-08 | Redis哨兵模式下客户端故障转移的调度方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114138568A true CN114138568A (zh) | 2022-03-04 |
Family
ID=80385296
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111493509.0A Pending CN114138568A (zh) | 2021-12-08 | 2021-12-08 | Redis哨兵模式下客户端故障转移的调度方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114138568A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114900372A (zh) * | 2022-07-07 | 2022-08-12 | 南京智人云信息技术有限公司 | 基于零信任安全哨兵体系的资源防护系统 |
CN115190005A (zh) * | 2022-06-30 | 2022-10-14 | 南京信息工程大学 | 一种基于Redis的双宿主系统的高可用方法 |
-
2021
- 2021-12-08 CN CN202111493509.0A patent/CN114138568A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115190005A (zh) * | 2022-06-30 | 2022-10-14 | 南京信息工程大学 | 一种基于Redis的双宿主系统的高可用方法 |
CN115190005B (zh) * | 2022-06-30 | 2023-05-16 | 南京信息工程大学 | 一种基于Redis的双宿主系统的高可用方法 |
CN114900372A (zh) * | 2022-07-07 | 2022-08-12 | 南京智人云信息技术有限公司 | 基于零信任安全哨兵体系的资源防护系统 |
CN114900372B (zh) * | 2022-07-07 | 2022-10-14 | 南京智人云信息技术有限公司 | 基于零信任安全哨兵体系的资源防护系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112600891B (zh) | 一种基于信息物理融合的边云协同系统及工作方法 | |
US8412790B2 (en) | Method, system and computer readable recording medium for determining major group under split-brain syndrome | |
CN109936622B (zh) | 一种基于分布式资源共享的无人机集群控制方法及系统 | |
CN114138568A (zh) | Redis哨兵模式下客户端故障转移的调度方法及系统 | |
CN106161644B (zh) | 数据处理的分布式系统及其数据处理方法 | |
EP1518385A1 (en) | Opc server redirection manager | |
CN103036719A (zh) | 一种基于主备集群服务器的跨地区服务容灾方法及装置 | |
CN105630589A (zh) | 分布式流程调度系统及流程调度、执行方法 | |
CN111459639B (zh) | 一种支持全球多机房部署的分布式任务管理平台及方法 | |
US9231779B2 (en) | Redundant automation system | |
CN111064672A (zh) | 云平台通信系统、选举方法及资源调度管理方法 | |
CN112925614B (zh) | 一种分布式事务处理方法、装置、介质和设备 | |
CN111026379A (zh) | 一种Redis主从分片集群高可用方法 | |
Lauer et al. | Engineering adaptive fault-tolerance mechanisms for resilient computing on ROS | |
CN115658166A (zh) | 集中管理和容易使用应用程序配置的系统、方法及介质 | |
CN115396296A (zh) | 业务处理方法、装置、电子设备及计算机可读存储介质 | |
CN106685688A (zh) | 一种集群计算机设备同步升级方法 | |
CN115801799A (zh) | 基于kubernetes多集群管理中间件生命周期的系统 | |
CN103559188A (zh) | 元数据管理方法及管理系统 | |
US10701167B1 (en) | Adaptive quorum for a message broker service | |
CN112714022A (zh) | 多套集群的控制处理方法、装置及计算机设备 | |
CN115291891A (zh) | 一种集群管理的方法、装置及电子设备 | |
CN116723077A (zh) | 一种分布式it自动化运维系统 | |
CN111966469B (zh) | 一种集群虚拟机高可用方法及系统 | |
CN101453354A (zh) | 一种基于atca架构的高可用性系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |