分布式缓存的故障处理方法及装置与流程

文档序号:11959594阅读:415来源:国知局
分布式缓存的故障处理方法及装置与流程

本公开涉及分布式缓存技术领域,特别涉及一种分布式缓存的故障处理方法及装置。



背景技术:

随着互联网流量的日益增大,单台缓存服务器面临大规模数据访问时,常常造成负荷过重而导致过高的响应延迟的缺陷,现有的解决方案中大都采用分布式缓存技术来实现大规模的数据缓存和访问。分布式缓存技术通过一致性哈希算法将数据相对均衡的分布于多个缓存服务器中,而redis(键-值类型的存储系统)作为一种分布式缓存存储系统,由于数据的高效同步和简单的操作命令,得到了广泛的使用。

目前,redis一般装设有主缓存服务器和从缓存服务器。主缓存服务器中的redis缓存实例主要负责读写操作,而从缓存服务器中的redis缓存实例只对通过主缓存服务器中redis缓存实例读写的数据进行备份操作,这对于主缓存服务器而言,存在着较大压力。

当主缓存服务器因故障宕机时,无法实现主从缓存服务器的自动切换,只能依靠人工干预,而在维护人员不在现场等特殊情况时则造成业务停滞,从而无法实现redis缓存实例的高可用性,大大降低了redis的抗风险能力。



技术实现要素:

为了解决相关技术中存在的无法实现redis缓存实例的高可用性,redis缓存的抗风险能力较低的问题,本公开提供了一种分布式缓存的故障处理方法及装置。

一种分布式缓存的故障处理方法,其特征在于,所述方法包括:

监控分布式缓存中运行的主缓存实例,得到故障的主缓存实例;

将所述主缓存实例的从缓存实例替代所述故障的主缓存实例,相应更新所述从缓存实例和故障的主缓存实例之间的主从状态;

监听所述主从状态的更新,根据所述主从状态的更新修改代理配置中进行缓存数据访问的服务地址。

一种分布式缓存的故障处理装置,其特征在于,所述装置包括:

故障监控模块,用于监控分布式缓存中运行的主缓存实例,得到故障的主缓存实例;

故障处理模块,用于将所述主缓存实例的从缓存实例替代所述故障的主缓存实例,相应更新所述从缓存实例和故障的主缓存实例之间的主从状态;

代理配置修改模块,用于监听所述主从状态的更新,根据所述主从状态的更新修改代理配置中进行缓存数据访问的服务地址。

本公开的实施例提供的技术方案可以包括以下有益效果:

分布式缓存的运行中,监控运行的主缓存实例,得到故障的主缓存实例,将从缓存实例替代故障的主缓存实例,相应更新从缓存实例和故障的主缓存实例之间的主从状态,监听主从状态的更新,根据主从状态的更新修改代理配置中进行缓存数据访问的服务地址,从而使得后续所进行的数据读取是通过修改后的服务地址实现的,进而即便主缓存实现出现故障也不会对缓存数据的读写造成影响,在主缓存实例出现故障时,自动将从缓存实例替代出现故障的主缓存实例,实现了缓存实例的高可用性,大大提高了redis的抗风险能力。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并于说明书一起用于解释本发明的原理。

图1是根据一示例性实施例示出的一种分布式缓存的故障处理方法的流程图;

图2是图1对应实施例的监控分布式缓存中运行的主缓存实例,得到故障的主缓存实例步骤的流程图;

图3是图1对应实施例的触发故障处理操作,使主缓存实例的从缓存实例替代故障的主缓存实例,相应更新从缓存实例和故障的主缓存实例之间的主从状态步骤的流程图;

图4是图3对应实施例的根据所述从缓存实例信息选定从缓存实例步骤的流程图;

图5是图4对应实施例的在所述正常从缓存实例集合中,选定从缓存实例步骤的流程图;

图6是分布式缓存的故障处理的一个具体应用场景图;

图7是根据一示例性实施例示出的一种分布式缓存的故障处理装置的框图;

图8是图7对应实施例示出的故障监控模块的框图;

图9是图7对应实施例示出的故障处理模块的框图;

图10是图9对应实施例示出的从缓存选定子模块的框图;

图11是图10对应实施例示出的选定单元的框图。

具体实施方式

这里将详细地对示例性实施例执行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

图1是根据一示例性实施例示出的一种分布式缓存的故障处理方法的流程图。如图1所示,该分布式缓存的故障处理方法可以包括以下步骤。

在步骤S110中,监控分布式缓存中运行的主缓存实例,得到故障的主缓存实例。

分布式缓存部署于机器中,通过机器中运行的实例来实现分布式缓存的主缓存实例。在一示例性实施例中,所指的机器为缓存服务器,一个或者多个缓存服务器形成用以实现数据缓存的服务器框架。

主缓存实例是运行于缓存服务器中的redis进程。通过主缓存实例实现对缓存数据的读写操作。

在主缓存实例的运行过程中,可能因存在故障导致该主缓存实例停止运行,进而影响对应的缓存数据的读写操作。此时,通过部署于机器中的主从监控哨兵对缓存服务器中所有的主缓存实例进行监控,在主缓存实例出现故障时自动进行维护,以便缓存数据的读写顺利进行。

主从监控哨兵是根据主从监控哨兵的状态数据对各主缓存实例进行监控的,状态数据中包含各个主缓存实例信息及对应的从缓存实例信息。根据状态数据,主从监控哨兵对主缓存实例进行监控。

在步骤S120中,主缓存实例的从缓存实例替代故障的主缓存实例,相应更新从缓存实例和故障的主缓存实例之间的主从状态。

缓存服务器中,还运行着与主缓存实例对应的从缓存实例,从缓存实例用于对主缓存实例处理的数据进行备份操作。

当某个主缓存实例出现故障时,主从监控哨兵就会使该故障的主缓存实例的从缓存实例替代该故障的从缓存实例,即将从缓存实例变更为新的主缓存实例,将故障的主缓存实例变更为从缓存实例,随之更新主从监控哨兵的状态数据。

例如,缓存服务器中,主缓存实例为缓存实例A,缓存实例A地从缓存实例为缓存实例a,当监控到缓存实例A出现故障时,主从监控哨兵就会使缓存实例a替代缓存实例A,将缓存实例a由从缓存实例变更为主缓存实例,将缓存实例A由主缓存实例变更为从缓存实例。

在步骤S130中,监听主从状态的更新,根据主从状态的更新修改代理配置中进行缓存数据访问的服务地址。

首先需要进行说明的是,存储了代理配置的缓存出口代理被部署于一机器中,该机器将作为与缓存服务器进行数据交互的接口。

代理配置是缓存出口代理中的配置文件,代理配置中的服务地址为指向缓存服务器中缓存数据的地址,根据代理配置中的服务地址,实现对缓存数据的读写操作。

进一步的,还在机器中部署了代理监控客户端,代理监控客户端用于进行主从监控哨兵的监控和代理配置的更新。

具体的,主从监控哨兵对主缓存实例和从缓存实例的主从状态进行变更后,代理监控客户端监听到主从监控哨兵的变更操作,就会相应地修改代理配置中进行缓存数据访问的服务地址,进而通过新的服务地址指向的主缓存实例进行缓存数据的读写操作。

通过如上所述的方法,在主缓存实例出现故障时,能够自动采用对应的从缓存实例替代该故障的主缓存实例,实现了缓存实例的高可用性,大大提高了redis的抗风险能力。

图2是根据一示例性实施例示出的对步骤S110的细节的描述。该步骤S110可以包括以下步骤。

在步骤S111中,根据预置的时间间隔向主缓存实例发送信息请求。

信息请求是主从监控哨兵向主缓存实例发送的请求信号,信息请求用于获取主缓存实例的配置信息。主缓存实例接收到主从监控哨兵发送的信息请求后,将对该信息请求进行响应,向主从监控哨兵进行回复,回复内容包括主缓存实例自身的配置信息及对应的从缓存实例信息。

时间间隔是预先设定的,例如,时间间隔预先设置为10秒,则主从监控哨兵每隔10秒向主缓存实例发送信息请求。

在步骤S112中,接收主缓存实例对信息请求的回复,根据回复识别故障的主缓存实例。

正常运行的主缓存实例接收到信息请求后,对该信息请求进行回复,回复内容包括该主缓存实例自身的配置信息和对应的从缓存实例信息。主从监控哨兵根据从缓存实例信息,更新自身的状态数据。

主从监控哨兵根据主缓存实例对信息请求的回复情况,对主缓存实例是否存在故障进行识别。

优选的,对于一主缓存实例,有多个主从监控哨兵对主缓存实例进行监控,多个主从监控哨兵向主缓存实例发送信息请求。

当其中一个主从监控哨兵没有接收到某个主缓存实例的回复时,就会询问其他的主从监控哨兵,如果没有接收到某个主缓存实例回复的主从监控哨兵数量达到预设的数量时,就会认为该主缓存实例出现故障。以此类推,通过此过程便实现了多个主缓存实例的监控。

例如,对主缓存实例进行监控的主从监控哨兵有3个,分别为主从监控哨兵1、主从监控哨兵2和主从监控哨兵3。当有2个或以上的主从监控哨兵没有接收到主缓存实例的回复时,就认为该主缓存实例出现故障。主从监控哨兵1、主从监控哨兵2和主从监控哨兵3分别向主缓存实例A发送信息请求,主从监控哨兵2没有接收到主缓存实例A的回复时,向主从监控哨兵1和主从监控哨兵3进行询问。最后发现,只有主从监控哨兵3接收到缓存实例A的回复,主从监控哨兵1和主从监控哨兵2没有接收到主缓存实例A的回复,则认为主缓存实例A出现故障。

也可以根据预设时间期间内,主缓存实例没有对主从监控哨兵进行回复,则认为主缓存实例存在故障,还可以是其他的故障标准。

例如,主从监控哨兵对主缓存实例A进行监控的,主从监控哨兵每隔10秒向主缓存实例A发送信息请求,若超过30秒没有接收到主缓存实例A的回复,则认为主缓存实例A出现故障。

通过如上所述的方法,向各主缓存实例发送信息请求,根据主缓存实例对信息请求的回复,自动识别故障的主缓存实例,为自动进行主从实例的切换提供了方便。

图3是根据一示例性实施例示出的对步骤S120的细节的描述。该步骤S120可以包括以下步骤。

在步骤S121中,获取为故障的主缓存实例预设的从缓存实例信息。

主缓存实例的从缓存实例信息是通过主缓存实例对信息请求的回复内容进行获取的。

主缓存实例对信息请求的回复内容中,包括该主缓存实例自身的配置信息,以及对应的从缓存实例信息。

在步骤S122中,根据从缓存实例信息选定从缓存实例。

一个主缓存实例对应的从缓存实例可以是一个,也可以是多个。

当一个主缓存实例只有一个对应的从缓存实例时,直接确定该从缓存实例,以便进行主从缓存实例变更;当一个主缓存实例存在多个对应的从缓存实例时,需选定从缓存实例,以便进行主从缓存实例变更。

在步骤S123中,将选定的从缓存实例替代故障的主缓存实例,相应更新选定的从缓存实例和故障的主缓存实例之间的主从状态。

将选定的从缓存实例作为新的主缓存实例,而故障的主缓存实例作为从缓存实例。在故障解除恢复运行后,故障的主缓存实例作为新的主缓存实例的从缓存实例进行数据备份。

例如,主缓存实例为缓存实例A,从缓存实例为缓存实例a,当缓存实例A出现故障而进行主从缓存实例变更后,缓存实例a成为新的主缓存实例,而缓存实例A成为缓存实例a的从缓存实例,在缓存实例A故障解除恢复运行后,作为缓存实例A的从缓存实例,执行为缓存实例a处理的数据的备份操作。

通过如上所述的方法,根据主缓存实例的回复内容,可以自动获取与该主缓存实例对应的从缓存实例信息,并在主缓存实例出现故障时,选定从缓存实例与该故障的主缓存实例进行主从切换,实现了缓存实例的高可用性,大大提高了redis的抗风险能力。

图4是根据一示例性实施例示出的对步骤S122的细节的描述。该步骤122可以包括以下步骤。

在步骤S1221中,根据从缓存实例信息确定故障的主缓存实例对应的从缓存实例。

根据故障的主缓存实例的从缓存实例信息,获取到与该故障的主缓存实例对应的从缓存实例。

当根据从缓存实例信息,对应的从缓存实例只有一个时,将该从缓存实例作为替换故障的主缓存实例的从缓存实例;当根据从缓存实例信息,对应的从缓存实例有多个时,将从这多个从缓存实例中选定从缓存实例,以便对故障的主缓存实例进行替换。

在步骤S1222中,向从缓存实例发送信息请求。

主从监控哨兵向故障的主缓存实例的从缓存实例发送信息请求,信息请求用于获取从缓存实例对主从监控哨兵的回复内容,以便获知从缓存实例的工作信息。

在步骤S1223中,接收从缓存实例对信息请求的回复,根据回复在从缓存实例中排除异常的从缓存实例,形成正常从缓存实例集合。

异常的从缓存实例可以为出现故障的从缓存实例。主从监控哨兵向故障的主缓存实例的多个从缓存实例发送信息请求,从缓存实例对主从监控哨兵进行回复,回复内容包括从缓存实例自身的配置信息及备份的数据信息。当接收到某个从缓存实例回复内容的主从监控哨兵没有达到预设的数量,则认为该从缓存实例出现故障。

异常的从缓存实例也可以为数据备份异常的从缓存实例。当主从监控哨兵接收到某个从缓存实例的回复内容,获取到该从缓存实例备份数据的最后更新时间超过预设的时间范围,则认为该从缓存实例数据备份出现异常。

例如,预设的时间范围为50秒,从缓存实例1备份数据的最后更新时间里离当前时间间隔为51秒,则认为从缓存实例1备份数据出现异常。

排除异常的从缓存实例后,故障的主缓存实例的从缓存实例中其它可用于主从缓存实例变更的从缓存实例形成正常的从缓存实例集合。

在步骤S1224中,在正常从缓存实例集合中选定从缓存实例。

正常从缓存实例集合中从缓存实例都是正常运行的从缓存实例,可以根据从缓存实例对应的优先级,选定从缓存实例,用于替代故障的主缓存实例。也可以根据从缓存实例的ID数字大小,还可以根据其它的选定方式,选定从缓存实例。

通过如上所述的方法,在主缓存实例出现故障时,自动在该故障的主缓存实例的从缓存实例中排除出现异常的从缓存实例,避免出现将异常的从缓存实例变更为主缓存实例的情况,提高了主缓存实例出现故障时进行故障处理的效率。

图5是根据一示例性实施例示出的对步骤S1224的细节的描述。该步骤S1224可以包括以下步骤。

在步骤S12241中,获取正常从缓存实例集合中从缓存实例对应的优先级。

正常从缓存实例集合中从缓存实例对应的优先级是进行自定义设置的,可以设置对各从缓存实例进行自定义顺位排序,也可以设置按照从缓存实例进行备份数据更新的时间排序,还可以是其他的优先级设置,还可以对各种优先级类别的优先顺序进行排序,在此不做限定。

在步骤S12242中,根据优先级在正常从缓存实例集合中选定从缓存实例。

根据优先级设置,选定排位最前的从缓存实例,作为主从缓存实例变更的从缓存实例。

通过如上所述的方法,在主缓存实例出现故障时,根据对应的优先级设置自动从故障的主缓存实例各从缓存实例中选定出一个从缓存实例,避免出现故障的主缓存实例存在多个从缓存实例时而无法选定的情况,提高了主缓存实例出现故障时进行主从缓存实例切换的效率。

下面结合一个具体的应用场景来详细阐述如上的分布式缓存的故障处理方法。

具体的,如图6所示,主从监控哨兵200对主缓存实例进行监控,当监控到某个主缓存实例出现故障时,就将其对应的从缓存实例替代该故障的主缓存实例,当代理监控客户端300检测到主从监控哨兵200的主从实例替换操作,就对缓存出口代理100中的代理配置文件进行更新,修改代理配置中进行缓存数据访问的服务地址,进而即便主缓存实现出现故障也不会对缓存数据的读写造成影响。从而当主缓存实例出现故障时,自动采用选定出从缓存实例替换该故障主缓存实例,实现了缓存实例的高可用性,提高了redis的抗风险能力。

下述为本公开装置实施例,可以用于执行本上述分布式缓存的故障处理方法实施例。对于本公开装置实施例中未披露的细节,请参照本公开分布式缓存的故障处理方法实施例。

图7是根据一示例性实施例示出的一种分布式缓存的故障处理装置的框图,如图7所示,该分布式缓存的故障处理装置包括但不限于:故障监控模块110、故障处理模块120以及代理配置修改模块130。

故障监控模块110,用于监控分布式缓存中运行的主缓存实例,得到故障的主缓存实例。

故障处理模块120,将主缓存实例的从缓存实例替代故障的主缓存实例,相应更新从缓存实例和故障的主缓存实例之间的主从状态。

代理配置修改模块130,用于监听主从状态的更新,根据主从状态的更新修改代理配置中进行缓存数据访问的服务地址。

上述装置中各个模块的功能和作用的实现过程具体详见上述分布式缓存的故障处理方法中对应步骤的实现过程,在此不再赘述。

可选的,如图8所示,故障监控模块110包括但不限于:信息请求发送子模块111和故障判定子模块112。

信息请求发送子模块111,用于根据预置的时间间隔向主缓存实例发送信息请求。

故障识别子模块112,用于接收主缓存实例对信息请求的回复,根据回复识别故障的主缓存实例。

可选的,如图9所示,故障处理模块120包括但不限于:从缓存获取子模块121、从缓存选定子模块122和主从更新子模块123。

从缓存获取子模块121,用于获取为故障的主缓存实例设定的从缓存实例信息。

从缓存选定子模块122,用于根据从缓存实例信息选定从缓存实例。

主从更新子模块123,用于将选定的从缓存实例替代故障的主缓存实例,相应更新选定的从缓存实例和故障的主缓存实例之间的主从状态。

可选的,如图10所示,从缓存选定子模块122包括但不限于:从缓存获取单元1221、请求发送单元1222、异常排除单元1223和选定单元1224。

从缓存获取单元1221,用于根据从缓存实例信息确定故障的主缓存实例的从缓存实例。

请求发送单元1222,用于向从缓存实例发送信息请求。

异常排除单元1223,用于接收从缓存实例对信息请求的回复,根据回复在从缓存实例中排除异常的从缓存实例,形成正常从缓存实例集合。

选定单元1224,用于在正常从缓存实例集合中,选定从缓存实例。

可选的,如图11所示,选定单元1224包括但不限于:优先级获取子单元12241和从缓存选定子单元12242。

优先级获取子单元12241,用于获取正常从缓存实例集合中从缓存实例对应的优先级。

从缓存选定子单元12242,用于根据优先级在正常从缓存实例集合中选定从缓存实例。

应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围执行各种修改和改变。本发明的范围仅由所附的权利要求来限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1