CN105933407A - 一种实现Redis集群高可用的方法及系统 - Google Patents

一种实现Redis集群高可用的方法及系统 Download PDF

Info

Publication number
CN105933407A
CN105933407A CN201610248471.3A CN201610248471A CN105933407A CN 105933407 A CN105933407 A CN 105933407A CN 201610248471 A CN201610248471 A CN 201610248471A CN 105933407 A CN105933407 A CN 105933407A
Authority
CN
China
Prior art keywords
agent node
connecting link
server
middleware
node
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.)
Granted
Application number
CN201610248471.3A
Other languages
English (en)
Other versions
CN105933407B (zh
Inventor
李代立
唐旭东
陈卓
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China Unionpay Co Ltd
Original Assignee
China Unionpay Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by China Unionpay Co Ltd filed Critical China Unionpay Co Ltd
Priority to CN201610248471.3A priority Critical patent/CN105933407B/zh
Publication of CN105933407A publication Critical patent/CN105933407A/zh
Application granted granted Critical
Publication of CN105933407B publication Critical patent/CN105933407B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/2866Architectures; Arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L41/00Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
    • H04L41/06Management of faults, events, alarms or notifications
    • H04L41/0654Management of faults, events, alarms or notifications using network fault recovery
    • H04L41/0659Management of faults, events, alarms or notifications using network fault recovery by isolating or reconfiguring faulty entities

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)
  • Hardware Redundancy (AREA)

Abstract

本发明公开一种实现Redis集群高可用的方法及系统,所述集群包括中间件、至少两个与所述中间件连接的代理节点,与所述代理节点连接的Redis服务器,该方法包括:所述中间件为每个代理节点建立用于通信的连接池,其中,每个代理节点的连接池中配置了中间件与代理节点间的多条连接链路;所述中间件通过发起侦测线程侦测每个代理节点的连接池中的连接链路,并标记发生故障的连接链路;所述中间件确定对应同一代理节点的被标记的连接链路的条数是否大于设定阈值;若是,则所述中间件将对应的同一代理节点确定为故障代理节点,并停止与所述故障代理节点的通信,用以解决传统的Redis集群无法自动隔离掉故障代理节点的问题。

Description

一种实现Redis集群高可用的方法及系统
技术领域
本发明涉及通信技术领域,尤其涉及一种实现Redis集群高可用的方法及系统。
背景技术
目前web应用系统为了解决高并发带来的性能问题,都会在web应用系统与数据库之间采取缓存层,使用最为广泛的就是Redis(Redis本质上是一个键-值类型的内存数据库)。Redis作为软件和传统数据库之间的缓冲层,操作命令简单,在保证了数据有效性的情况下,同时也保证了高性能。
传统的Redis集群如图1所示,包括:中间件、代理节点和服务器,其中,Redis集群中至少包含两台代理节点、三台主服务器和三台从服务器,中间件发起的每个工作线程随机直连一台代理节点,而代理节点再与主服务器连接,每个代理节点之间连接的主服务器相同,这种方式可以有效地实现负载均衡,但是在任意一个代理节点发生故障时,传统的集群并不能及时地隔离掉故障代理节点,因此导致在人工隔离故障代理节点前存在部分中间件发出的请求处理失败,可见,传统的Redis集群无法自动隔离掉故障代理节点,影响了正常地业务处理请求。
发明内容
本发明实施例提供一种实现Redis集群高可用的方法及系统,用以解决传统的Redis集群无法自动隔离掉故障代理节点的问题。
本发明方法包括一种实现Redis集群高可用的方法,所述集群包括中间件、至少两个与所述中间件连接的代理节点,与所述代理节点连接的Redis服务器,该方法包括:所述中间件为每个代理节点建立用于通信的连接池,其中,每个代理节点的连接池中配置了中间件与代理节点间的多条连接链路;
所述中间件通过发起侦测线程侦测每个代理节点的连接池中的连接链路,并标记发生故障的连接链路;
所述中间件确定对应同一代理节点的被标记的连接链路的条数是否大于设定阈值;
若是,则所述中间件将对应的同一代理节点确定为故障代理节点,并停止与所述故障代理节点的通信。
基于同样地发明构思,本发明实施例进一步地提供一种实现Redis集群高可用的系统,所述系统包括中间件、至少两个与所述中间件连接的代理节点,与所述代理节点连接的Redis服务器,所述中间件包括:
连接池生成单元,用于为每个代理节点建立用于通信的连接池,其中,每个代理节点的连接池中配置了中间件与代理节点间的多条连接链路;
侦测单元,用于通过发起侦测线程侦测每个代理节点的连接池中的连接链路,并标记发生故障的连接链路;
判断单元,用于确定对应同一代理节点的被标记的连接链路的条数是否大于设定阈值;
若是,处理单元,用于将对应的同一代理节点确定为故障代理节点,并停止与所述故障代理节点的通信。
本发明实施例中间件建立与所述每个代理节点通信的连接池,其中,所述连接池中包含所述中间件与所述每个代理节点通信的各条连接链路,一方面,中间件通过发起侦测线程侦测所述连接池中的连接链路,并将标记发生故障的连接链路,当所述中间件确定对应任意一个代理节点被标记的连接链路条数大于设定阈值时,将对应的代理节点确定为故障代理节点并隔离,以使所述中间件停止与所述故障代理节点的通信。也就是说,对于任意一个代理节点来说,若中间件主动检测到与该代理节点对应连接的设定数量的连接链路均失效,则证明该代理节点发生故障,因此主动将该代理节点定义为故障代理节点,停止与该故障代理节点的通信,从而实现了自动隔离故障节点的功能,保证了中间件与代理节点之间的业务处理不受影响。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术提供的一种Redis集群架构;
图2为本发明实施例提供一种实现Redis集群高可用的方法流程示意图;
图3为本发明实施例提供一种侦测线程和正常工作线程的处理过程;
图4为本发明实施例提供一种代理节点进行主从切换的过程;
图5为本发明实施例还提供一种实现Redis集群高可用的系统。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
参见图2所示,本发明实施例提供一种实现Redis集群高可用的方法流程示意图,具体地实现方法包括:
步骤S101,所述中间件为每个代理节点建立用于通信的连接池,其中,每个代理节点的连接池中配置了中间件与代理节点间的多条连接链路。
步骤S102,所述中间件通过发起侦测线程侦测每个代理节点的连接池中的连接链路,并标记发生故障的连接链路。
步骤S103,所述中间件确定对应同一代理节点的被标记的连接链路的条数是否大于设定阈值。
步骤S104,若是,则将对应的同一代理节点确定为故障代理节点,并停止与所述故障代理节点的通信。
因为中间件与代理节点之间是通过各条连接链路进行通信的,当代理节点发生故障,与该代理节点连接的各条连接链路是无法进行正常通信的,所以本发明实施例通过监测每个代理节点对应的连接池中连接链路的运行状态,当发现某一个代理节点对应的连接池中有大部分的连接链路都发生故障了,或者说当发现全部都发生故障了,则证明该代理节点是故障代理节点,否则,如果只是某几条链路发生故障,很可能是因为暂时的网络不稳定等原因造成的,因此仍然认定该代理节点是正常的。
在步骤S104之后,本发明实施例进一步地帧测连接池中的被标记的连接链路是否恢复正常,若发现对应同一个代理节点的被标记的连接链路有设定数量恢复正常了,或者全部恢复正常了,则认为该代理节点恢复正常,将该代理节点从故障状态修复为正常状态,即恢复通信。
进一步地,所述标记发生故障的连接链路之后,还包括:
将被标记的连接链路从所述连接池转移至预设的不可用服务链表中;
所述中间件确定对应同一代理节点的被标记的连接链路的条数是否大于设定阈值,包括:所述中间件确定所述不可用服务链表中对应同一代理节点的连接链路条数是否大于设定阈值。
也就是说,预先建立一个不可用服务链表,该链表用于存储被标记的连接链路,通过判断不可用服务链表中对应同一代理节点的连接链路个数确定故障代理节点。需要说明的是,每条连接链路均具有标识属于哪个代理节点的属性,所以在不可用服务链表中的故障连接链路是可以通过这样属性确定属于哪个代理节点的。
进一步地,所述中间件通过所述侦测线程侦测所述不可用服务链表中的连接链路是否恢复正常;
若是,则所述中间件将恢复正常的连接链路从所述不可用服务链表转移至所述恢复正常的连接链路对应的连接池中;
当所述故障代理节点对应的恢复正常的连接链路大于设定阈值时,所述中间件恢复所述故障代理节点的通信。
上述过程指的是中间件的侦测线程监测不可用服务链表中的连接链路是否恢复正常,若发现连接链路恢复正常,则可以将该部分恢复正常的连接链路从不可用服务链表转移至连接池中,若对应同一个故障代理节点,有设定数量个的连接链路被转移至连接池中,则说明该故障代理节点恢复正常,因此将该代理节点从故障状态修复为正常状态,即恢复通信。
需要说明的是,上述监测不可用服务链表中的连接链路是否恢复正常的过程与侦测每个代理节点的连接池中的连接链路是否发生故障的过程可以是先后进行的,也可以同时进行的,具体选择根据实际需要确定。另外,中间件判断对应同一代理节点的被标记的连接链路的条数是否大于设定阈值,该设定阈值与上文判断有设定数量个的连接链路被转移至连接池中的设定数量,可以是相同的,也可以是不同的,设定阈值的大小和设定数量的大小是在具体应用场景下的的经验值。
进一步地,所述中间件通过发起侦测线程侦测每个代理节点的连接池中的连接链路,包括:
所述中间件运行侦测线程,所述侦测线程执行如下动作:
从所述连接池中轮询获取每条连接链路;
针对获取的每条连接链路,向每条连接链路发起心跳检测;
若心跳检测成功,则确定所述连接链路正常,否则将所述连接链路确定为发生故障的连接链路。
假设说对应一个代理节点的连接池中有100条连接链路,侦测线程周期性从所述连接池中轮询获取每条连接链路,向连接池中连接链路发送心跳检测,当收到心跳检测的响应时,证明该条连接链路是可以正常通信的,否则,则说明该条连接链路不能正常相同心跳报文,因此是发生故障的连接链路。
考虑到所述中间件的侦测线程在工作的同时,也在运行读写请求的工作线程,所以,本发明实施例进一步地,所述中间件接收应用发送的读写请求;
所述中间件根据各代理节点的工作状态,确定所述读写请求对应的代理节点;
利用所述所述代理节点的连接池中的连接链路将所述读写请求发送给所述对应的代理节点;
若发送失败,则所述读写请求对应的连接链路从所述连接池中转移至预设的不可用服务链表中。
也就是说,中间件收到应用程序发来的读写请求,首先确定本条读写请求对应的哪个代理节点,当确定好代理节点之后,因为所述中间件为各代理节点设置有连接池,每个连接池中包括多个连接链路;因此利用所述连接池中所述代理节点的连接链路将所述读写请求发送给所述对应的代理节点,当发生失败时,证明该条连接链路属于故障的连接链路,因此将它转移至不可用服务链表中,然后再从连接池中获取其它的连接链路再次发送所述读写请求,这样就可以在工作线程处理任务的同时也对连接链路的运行状态进行侦测,也保证了读写请求可以被正常的发送。
如图3所示,示例性地描述了侦测线程和正常工作线程的处理过程,步骤如下:
步骤S201,中间件为每个代理节点建立对应的连接池,连接池中包含若干个连接链路。
步骤S202,中间件发起一个侦测线程,该线程首先从连接池中获取每条连接链路,向每条连接链路发送心跳报文,若没有响应,则把该条连接链路插入到不可用服务链表中;同时侦测线程监测不可用服务链表中的连接链路是否恢复正常,若是,则把不可用服务链表中该条恢复正常的连接链路从链表转移至连接池中。
步骤S203,中间件运行工作线程处理来自应用程序的读写请求时,每条工作线程在处理每条连接链路的同时,判断该条连接链路是否发送请求成功,若不成功,则把该条连接链路转移至不可用服务链表中。
进一步地,所述Redis服务器包括Redis主服务器和Redis从服务器;该方法还包括:
针对连接同一个Redis主服务器的各代理节点,所述各代理节点向共同连接的主服务器发送心跳检测;
若心跳检测失败,则从所述各代理节点中确定第一代理节点进行主从服务器的切换,所述第一代理节点为所述各代理节点中的任意一个;
当所述第一代理节点的Redis主服务器和Redis从服务器切换成功之后,所述第一代理节点将切换之后的Redis主服务器的IP地址通知至连接所述主服务器的其余的代理节点,以使所述其余的代理节点完成主从切换。
因为共同工作的代理节点之间连接的主服务的IP地址是完全相同的,所以要进行主从切换时,可以先选择一个代理节点进行主从服务器的切换,然后再将切换之后的主服务器的IP地址通知给其它的代理节点。
进一步地,所述当切换成功之后,包括:所述各代理节点更新各自的内存参数和配置文件的配置信息,其中,所述内存参数包含的主服务器和从服务器的属性信息与所述配置文件的配置信息中主服务器和从服务器的属性信息一致。其中,所述主服务器和从服务器的属性信息包括:主服务器的IP地址、主服务器的端口信息、从服务器的IP地址、从服务器的端口信息。
因为现有的代理节点对服务端的高可用一般采用Sentinel+脚本的方式,Sentinel需要单独部署,即需要在代理节点之外单独启动一个线程,在检测到主服务器节点发生故障时,采用事件的方式通知脚本,由脚本负责更新代理的配置文件并重启该代理节点。可见这种主从切换方式,代理节点不得不进行重启的操作,为了解决这一问题,本发明实施例通过在代理节点的内部集成监听和脚本事件通知的功能,即不需要再代理节点之外再启用一个线程,只是运行代理节点的线程就可以完成脚本和监听的功能,具体地,如图4所示,假设有两个代理节点在同时工作,两个代理节点均连接同一个主服务器,当主服务器发生故障时,通过上述方法进行主从切换的具体过程如下:
步骤S301,代理节点1和代理节点2均周期性地向该主服务器发送心跳报文
步骤S302,若代理节点1和代理节点2均多次没有收到响应,则选择代理节点2进行优先进行主从切换。
步骤S303,代理节点2进行主从切换,将从服务器更新为主服务器。
步骤S304,代理节点2将修改之后的主服务器的IP地址和端口号通知给代理节点1,代理节点1收到通知之后将该IP地址对应的服务器更新为主服务器。
步骤S305,代理节点2更新配置文件和该地阿里节点内部的内存参数,即更新主服务器的IP地址和主服务器的端口信息。
步骤S306,代理节点1也更新配置文件和该地阿里节点内部的内存参数,即更新主服务器的IP地址和主服务器的端口信息。
基于相同的技术构思,本发明实施例还提供一种实现Redis集群高可用的系统,该系统可执行上述方法实施例。本发明实施例提供的系统如图5所示,包括:连接池生成单元501、侦测单元502、判断单元503、处理单元504,其中,所述中间件包括:
连接池生成单元501,用于为每个代理节点建立用于通信的连接池,其中,每个代理节点的连接池中配置了中间件与代理节点间的多条连接链路;
侦测单元502,用于通过发起侦测线程侦测每个代理节点的连接池中的连接链路,并标记发生故障的连接链路;
判断单元503,用于确定对应同一代理节点的被标记的连接链路的条数是否大于设定阈值;
若是,处理单元504,用于将对应的同一代理节点确定为故障代理节点,并停止与所述故障代理节点的通信。
进一步地,所述侦测单元502还用于将被标记的连接链路从所述连接池转移至预设的不可用服务链表中;
所述判断单元503还用于:确定所述不可用服务链表中对应同一代理节点的连接链路条数是否大于设定阈值。
所述侦测单元502还用于:通过所述侦测线程侦测所述不可用服务链表中的连接链路是否恢复正常;
若是,所述处理单元504还用于:将恢复正常的连接链路从所述不可用服务链表转移至所述恢复正常的连接链路对应的连接池中;所述判断单元503还用于判断当所述故障代理节点对应的恢复正常的连接链路大于设定阈值时,所述处理单元504恢复所述故障代理节点的通信。
进一步地,所述侦测单元502具体用于:运行侦测线程,所述侦测线程执行如下动作:
从所述连接池中轮询获取每条连接链路;
针对获取的每条连接链路,向每条连接链路发起心跳检测;
若心跳检测成功,则确定所述连接链路正常,否则将所述连接链路确定为发生故障的连接链路。
进一步地,对于所述中间件来说,还包括:读写处理单元505:用于接收应用发送的读写请求;
所述处理单元504还用于:根据各代理节点的工作状态,确定所述读写请求对应的代理节点;利用所述读写请求对应的代理节点的连接池中的连接链路将所述读写请求发送给对应的代理节点;若发送失败,则将所述读写请求对应的连接链路从所述读写请求对应的代理节点的连接池中转移至预设的不可用服务链表中。
进一步地,所述Redis服务器包括Redis主服务器和Redis从服务器;该系统还包括:
针对连接同一个Redis主服务器的各代理节点,所述代理节点向共同连接的主服务器发送心跳检测;
若各代理节点心跳检测失败,则代理节点的主从切换单元506从所述各代理节点中确定第一代理节点进行主从服务器的切换,所述第一代理节点为所述各代理节点中的任意一个;
当所述第一代理节点的Redis主服务器和Redis从服务器切换成功之后,将切换之后的Redis主服务器的IP地址通知至连接所述主服务器的其余的代理节点,以使所述其余的代理节点完成主从切换。
进一步地,还包括配置更新单元507,用于更新各代理节点的内存参数和配置文件的配置信息,其中,所述内存参数包含的主服务器和从服务器的属性信息与所述配置文件的配置信息中主服务器和从服务器的属性信息一致。
其中,所述主服务器和从服务器的属性信息包括:主服务器的IP地址、主服务器的端口信息、从服务器的IP地址、从服务器的端口信息。
综上所述,本发明实施例中间件建立与所述每个代理节点通信的连接池,其中,所述连接池中包含所述中间件与所述每个代理节点通信的各条连接链路,一方面,中间件通过发起侦测线程侦测所述连接池中的连接链路,并将发生故障的连接链路从所述连接池转移至预设的不可用服务链表中,当所述中间件确定所述不可用服务链表中对应任意一个代理节点的连接链路条数大于设定阈值时,将对应的代理节点确定为故障代理节点并隔离,以使所述中间件停止与所述故障代理节点的通信。也就是说,对于任意一个代理节点来说,若中间件主动检测到与该代理节点对应连接的设定数量的连接链路均失效,则证明该代理节点发生故障,因此主动将该代理节点定义为故障代理节点,隔离掉与该故障代理节点的通信。从而实现了自动隔离故障节点的功能,保证了中间件与代理节点之间的业务处理不受影响。同时中间件的侦测线程还检测不可用服务链表中的连接链路是否恢复正常,将恢复正常的连接链路转移至连接池中。另外,代理节点内部通过集成脚本和监听的功能,使得主从切换的过程更加便捷,不需要在切换之后再重启代理节点,提高了系统运行的效率。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (16)

1.一种实现Redis集群高可用的方法,其特征在于,所述集群包括中间件、至少两个与所述中间件连接的代理节点,与所述代理节点连接的Redis服务器,该方法包括:
所述中间件为每个代理节点建立用于通信的连接池,其中,每个代理节点的连接池中配置了中间件与代理节点间的多条连接链路;
所述中间件通过发起侦测线程侦测每个代理节点的连接池中的连接链路,并标记发生故障的连接链路;
所述中间件确定对应同一代理节点的被标记的连接链路的条数是否大于设定阈值;
若是,则所述中间件将对应的同一代理节点确定为故障代理节点,并停止与所述故障代理节点的通信。
2.如权利要求1所述的方法,其特征在于,所述标记发生故障的连接链路之后,还包括:
所述中间件将被标记的连接链路从所述连接池转移至预设的不可用服务链表中;
所述中间件确定对应同一代理节点的被标记的连接链路的条数是否大于设定阈值,包括:
所述中间件确定所述不可用服务链表中对应同一代理节点的连接链路条数是否大于设定阈值。
3.如权利要求2所述的方法,其特征在于,还包括:
所述中间件通过所述侦测线程侦测所述不可用服务链表中的连接链路是否恢复正常;
若是,则所述中间件将恢复正常的连接链路从所述不可用服务链表转移至所述恢复正常的连接链路对应的连接池中;
当所述故障代理节点对应的恢复正常的连接链路大于设定阈值时,所述中间件恢复所述故障代理节点的通信。
4.权利要求1所述的方法,其特征在于,所述中间件通过发起侦测线程侦测每个代理节点的连接池中的连接链路,包括:
所述中间件运行侦测线程,所述侦测线程执行如下动作:
从所述连接池中轮询获取每条连接链路;
针对获取的每条连接链路,向每条连接链路发起心跳检测;
若心跳检测成功,则确定所述连接链路正常,否则将所述连接链路确定为发生故障的连接链路。
5.如权利要求1所述的方法,其特征在于,还包括:
所述中间件接收应用发送的读写请求;
所述中间件根据各代理节点的工作状态,确定所述读写请求对应的代理节点;
利用所述代理节点的连接池中的连接链路将所述读写请求发送给所述对应的代理节点;
若发送失败,则所述中间件将所述读写请求对应的连接链路从所述连接池中转移至预设的不可用服务链表中。
6.如权利要求1~4所述的方法,其特征在于,所述Redis服务器包括Redis主服务器和Redis从服务器;
该方法还包括:
针对连接同一个Redis主服务器的各代理节点,所述各代理节点向共同连接的主服务器发送心跳检测;
若心跳检测失败,则从所述各代理节点中确定第一代理节点进行主从服务器的切换,所述第一代理节点为所述各代理节点中的任意一个;
当所述第一代理节点的Redis主服务器和Redis从服务器切换成功之后,所述第一代理节点将切换之后的Redis主服务器的IP地址通知至连接所述主服务器的其余的代理节点,以使所述其余的代理节点完成主从切换。
7.如权利要求6所述的方法,其特征在于,所述当切换成功之后,包括:
所述各代理节点更新各自的内存参数和配置文件的配置信息,其中,所述内存参数包含的主服务器和从服务器的属性信息与所述配置文件的配置信息中主服务器和从服务器的属性信息一致。
8.如权利要求7所述的方法,其特征在于,所述主服务器和从服务器的属性信息包括:主服务器的IP地址、主服务器的端口信息、从服务器的IP地址、从服务器的端口信息。
9.一种实现Redis集群高可用的系统,其特征在于,所述系统包括中间件、至少两个与所述中间件连接的代理节点,与所述代理节点连接的Redis服务器,所述中间件包括:
连接池生成单元,用于为每个代理节点建立用于通信的连接池,其中,每个代理节点的连接池中配置了中间件与代理节点间的多条连接链路;
侦测单元,用于通过发起侦测线程侦测每个代理节点的连接池中的连接链路,并标记发生故障的连接链路;
判断单元,用于确定对应同一代理节点的被标记的连接链路的条数是否大于设定阈值;
若是,处理单元,用于将对应的同一代理节点确定为故障代理节点,并停止与所述故障代理节点的通信。
10.如权利要求9所述的系统,其特征在于,所述侦测单元还用于将被标记的连接链路从所述连接池转移至预设的不可用服务链表中;
所述判断单元还用于:确定所述不可用服务链表中对应同一代理节点的连接链路条数是否大于设定阈值。
11.如权利要求10所述的系统,其特征在于,所述侦测单元还用于:通过所述侦测线程侦测所述不可用服务链表中的连接链路是否恢复正常;
若是,所述处理单元还用于:将恢复正常的连接链路从所述不可用服务链表转移至所述恢复正常的连接链路对应的连接池中;
所述判断单元还用于判断当所述故障代理节点对应的恢复正常的连接链路大于设定阈值时,所述处理单元恢复所述故障代理节点的通信。
12.权利要求9所述的系统,其特征在于,所述侦测单元具体用于:运行侦测线程,所述侦测线程执行如下动作:
从所述连接池中轮询获取每条连接链路;
针对获取的每条连接链路,向每条连接链路发起心跳检测;
若心跳检测成功,则确定所述连接链路正常,否则将所述连接链路确定为发生故障的连接链路。
13.如权利要求9所述的系统,其特征在于,还包括:读写请求处理单元:用于接收应用发送的读写请求;
所述处理单元还用于:根据各代理节点的工作状态,确定所述读写请求对应的代理节点;利用所述读写请求对应的代理节点的连接池中的连接链路将所述读写请求发送给对应的代理节点;若发送失败,则将所述读写请求对应的连接链路从所述读写请求对应的代理节点的连接池中转移至预设的不可用服务链表中。
14.如权利要求9~13所述的系统,其特征在于,所述Redis服务器包括Redis主服务器和Redis从服务器;
针对连接同一个Redis主服务器的各代理节点,各代理节点向共同连接的主服务器发送心跳检测;
所述代理节点还包括:
若各代理节点心跳检测失败,主从切换单元,用于从所述各代理节点中确定第一代理节点进行主从服务器的切换,所述第一代理节点为所述各代理节点中的任意一个;当所述第一代理节点的Redis主服务器和Redis从服务器切换成功之后,将切换之后的Redis主服务器的IP地址通知至连接所述主服务器的其余的代理节点,以使所述其余的代理节点完成主从切换。
15.如权利要求14所述的系统,其特征在于,还包括配置更新单元,用于更新各代理节点的内存参数和配置文件的配置信息,其中,所述内存参数包含的主服务器和从服务器的属性信息与所述配置文件的配置信息中主服务器和从服务器的属性信息一致。
16.如权利要求15所述的系统,其特征在于,所述主服务器和从服务器的属性信息包括:主服务器的IP地址、主服务器的端口信息、从服务器的IP地址、从服务器的端口信息。
CN201610248471.3A 2016-04-20 2016-04-20 一种实现Redis集群高可用的方法及系统 Active CN105933407B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610248471.3A CN105933407B (zh) 2016-04-20 2016-04-20 一种实现Redis集群高可用的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610248471.3A CN105933407B (zh) 2016-04-20 2016-04-20 一种实现Redis集群高可用的方法及系统

Publications (2)

Publication Number Publication Date
CN105933407A true CN105933407A (zh) 2016-09-07
CN105933407B CN105933407B (zh) 2019-12-06

Family

ID=56838676

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610248471.3A Active CN105933407B (zh) 2016-04-20 2016-04-20 一种实现Redis集群高可用的方法及系统

Country Status (1)

Country Link
CN (1) CN105933407B (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106603319A (zh) * 2017-03-02 2017-04-26 腾讯科技(深圳)有限公司 一种故障处理的方法、管理服务器以及逻辑服务器
CN106685817A (zh) * 2016-12-27 2017-05-17 中国移动通信集团江苏有限公司 一种用于盒端设备流量切换的方法和装置
CN107343034A (zh) * 2017-06-26 2017-11-10 杭州铭师堂教育科技发展有限公司 基于QConf的Redis高可用系统及方法
CN108183961A (zh) * 2018-01-04 2018-06-19 中电福富信息科技有限公司 一种基于Redis的分布式缓存方法
CN108206843A (zh) * 2016-12-16 2018-06-26 北京金山云网络技术有限公司 一种集群访问方法及装置
CN108234170A (zh) * 2016-12-15 2018-06-29 北京神州泰岳软件股份有限公司 一种服务器集群的监控方法和装置
CN109407980A (zh) * 2018-09-29 2019-03-01 武汉极意网络科技有限公司 基于Redis集群的数据存储系统
CN110224871A (zh) * 2019-06-21 2019-09-10 深圳前海微众银行股份有限公司 一种Redis集群的高可用方法及装置
CN110569303A (zh) * 2019-08-19 2019-12-13 杭州衣科信息技术有限公司 一种适用于多种云环境的MySQL应用层高可用系统及方法
CN111435942A (zh) * 2019-01-14 2020-07-21 北京京东尚科信息技术有限公司 redis集群访问方法、系统、中间件、介质及设备
CN112463419A (zh) * 2021-01-26 2021-03-09 北京轻松筹信息技术有限公司 基于中间件的主备节点工作方法及装置、电子设备
CN115550424A (zh) * 2022-12-02 2022-12-30 苏州万店掌网络科技有限公司 一种数据缓存方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040033779A1 (en) * 2002-08-14 2004-02-19 Ntt Docomo, Inc. Communication system and method thereof
CN101183377A (zh) * 2007-12-10 2008-05-21 华中科技大学 一种基于消息中间件的高可用性数据库集群
CN102231681A (zh) * 2011-06-27 2011-11-02 中国建设银行股份有限公司 一种高可用集群计算机系统及其故障处理方法
CN102394914A (zh) * 2011-09-22 2012-03-28 浪潮(北京)电子信息产业有限公司 集群脑裂处理方法和装置
CN104408071A (zh) * 2014-10-30 2015-03-11 北京思特奇信息技术股份有限公司 一种基于集群管理器的分布式数据库高可用方法及系统
CN104809510A (zh) * 2015-05-21 2015-07-29 武汉大学 一种提供票务支持的票池中间件的构建、购票及锁票方法
CN105357090A (zh) * 2015-11-10 2016-02-24 中国建设银行股份有限公司 外连总线服务系统的负载均衡方法及设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040033779A1 (en) * 2002-08-14 2004-02-19 Ntt Docomo, Inc. Communication system and method thereof
CN101183377A (zh) * 2007-12-10 2008-05-21 华中科技大学 一种基于消息中间件的高可用性数据库集群
CN102231681A (zh) * 2011-06-27 2011-11-02 中国建设银行股份有限公司 一种高可用集群计算机系统及其故障处理方法
CN102394914A (zh) * 2011-09-22 2012-03-28 浪潮(北京)电子信息产业有限公司 集群脑裂处理方法和装置
CN104408071A (zh) * 2014-10-30 2015-03-11 北京思特奇信息技术股份有限公司 一种基于集群管理器的分布式数据库高可用方法及系统
CN104809510A (zh) * 2015-05-21 2015-07-29 武汉大学 一种提供票务支持的票池中间件的构建、购票及锁票方法
CN105357090A (zh) * 2015-11-10 2016-02-24 中国建设银行股份有限公司 外连总线服务系统的负载均衡方法及设备

Cited By (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108234170B (zh) * 2016-12-15 2021-06-22 北京神州泰岳软件股份有限公司 一种服务器集群的监控方法和装置
CN108234170A (zh) * 2016-12-15 2018-06-29 北京神州泰岳软件股份有限公司 一种服务器集群的监控方法和装置
CN108206843A (zh) * 2016-12-16 2018-06-26 北京金山云网络技术有限公司 一种集群访问方法及装置
CN108206843B (zh) * 2016-12-16 2021-06-04 北京金山云网络技术有限公司 一种集群访问方法及装置
CN106685817A (zh) * 2016-12-27 2017-05-17 中国移动通信集团江苏有限公司 一种用于盒端设备流量切换的方法和装置
CN106685817B (zh) * 2016-12-27 2020-05-12 中国移动通信集团江苏有限公司 一种用于盒端设备流量切换的方法和装置
CN106603319B (zh) * 2017-03-02 2020-10-09 腾讯科技(深圳)有限公司 一种故障处理的方法、管理服务器以及逻辑服务器
CN106603319A (zh) * 2017-03-02 2017-04-26 腾讯科技(深圳)有限公司 一种故障处理的方法、管理服务器以及逻辑服务器
CN107343034A (zh) * 2017-06-26 2017-11-10 杭州铭师堂教育科技发展有限公司 基于QConf的Redis高可用系统及方法
CN108183961A (zh) * 2018-01-04 2018-06-19 中电福富信息科技有限公司 一种基于Redis的分布式缓存方法
CN109407980A (zh) * 2018-09-29 2019-03-01 武汉极意网络科技有限公司 基于Redis集群的数据存储系统
CN111435942A (zh) * 2019-01-14 2020-07-21 北京京东尚科信息技术有限公司 redis集群访问方法、系统、中间件、介质及设备
CN111435942B (zh) * 2019-01-14 2023-04-18 北京京东尚科信息技术有限公司 redis集群访问方法、系统、中间件、介质及设备
CN110224871A (zh) * 2019-06-21 2019-09-10 深圳前海微众银行股份有限公司 一种Redis集群的高可用方法及装置
WO2020253596A1 (zh) * 2019-06-21 2020-12-24 深圳前海微众银行股份有限公司 一种Redis集群的高可用方法及装置
CN110224871B (zh) * 2019-06-21 2022-11-08 深圳前海微众银行股份有限公司 一种Redis集群的高可用方法及装置
CN110569303A (zh) * 2019-08-19 2019-12-13 杭州衣科信息技术有限公司 一种适用于多种云环境的MySQL应用层高可用系统及方法
CN112463419A (zh) * 2021-01-26 2021-03-09 北京轻松筹信息技术有限公司 基于中间件的主备节点工作方法及装置、电子设备
CN115550424B (zh) * 2022-12-02 2023-03-14 苏州万店掌网络科技有限公司 一种数据缓存方法、装置、设备及存储介质
CN115550424A (zh) * 2022-12-02 2022-12-30 苏州万店掌网络科技有限公司 一种数据缓存方法、装置、设备及存储介质

Also Published As

Publication number Publication date
CN105933407B (zh) 2019-12-06

Similar Documents

Publication Publication Date Title
CN105933407A (zh) 一种实现Redis集群高可用的方法及系统
US10095576B2 (en) Anomaly recovery method for virtual machine in distributed environment
US10764119B2 (en) Link handover method for service in storage system, and storage device
CN106330475B (zh) 一种通信系统中管理主备节点的方法和装置及高可用集群
CN102882704B (zh) 一种issu的软重启升级过程中的链路保护方法和设备
CN112181660A (zh) 一种基于服务器集群的高可用方法
CN107508694B (zh) 一种集群内的节点管理方法及节点设备
CN104038376A (zh) 一种管理真实服务器的方法、装置及lvs集群系统
CN103795553A (zh) 基于监控的主、备服务器切换
CN105227385A (zh) 一种故障处理的方法及系统
CN102891833B (zh) 网络容灾方法和系统
CN103036701A (zh) 一种跨网段的n+1备用方法及装置
CN101453744B (zh) 业务控制方法及装置
CN111385134B (zh) 接入设备动态迁移方法及设备接入平台
CN111338858A (zh) 一种双机房的容灾方法及装置
CN109189854B (zh) 提供持续业务的方法及节点设备
CN110674192A (zh) 一种Redis高可用VIP漂移方法、终端及存储介质
CN101924661A (zh) 告警的处理方法及装置
WO2016070530A1 (zh) 主备设备的运行处理方法及系统
CN108259325B (zh) 路由维护方法和路由设备
CN104794026A (zh) 一种集群实例多数据源绑定的故障转移方法
CN103414591A (zh) 一种端口故障恢复时的快速收敛方法和系统
CN114598594B (zh) 一种多集群下应用故障的处理方法、系统、介质和设备
US8111625B2 (en) Method for detecting a message interface fault in a communication device
CN113596195B (zh) 公共ip地址管理方法、装置、主节点及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant