具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例提供了一种分布式数据库系统的故障检测方法,可选地,在本申请实施例中,上述的故障检测方法可以应用于如图1所示的管理服务器101、代理服务器102、主数据库服务器103和备用数据库服务器104所构成的硬件环境中。其中,可以在所述管理服务器101上安装监控程序,所述代理服务器102至少有两个,可以在每个代理服务器102上分别安装有目标代理接入程序,所述主数据库服务器103和所述备用数据库104组成一个主备集群,所述主数据库服务器103上可以设有主数据库,所述备用数据库服务器104上可以设有备用数据库。
如图1所示,管理服务器101、代理服务器102、主数据库服务器103和备用数据库服务器104之间分别通过网络进行连接,上述网络包括但不限于:广域网、城域网或局域网。
作为一个可能的实施方式,管理服务器101、代理服务器102、主数据库服务器103和备用数据库服务器104均可以是区块链系统中的节点设备,能够将获取到以及生成的信息共享给区块链系统中的其他节点设备,实现多个节点设备之间的信息共享。区块链系统中的多个节点设备可以配置有同一条区块链,该区块链由多个区块组成,并且前后相邻的区块具有关联关系,使得任一区块中的数据被篡改时都能通过下一区块检测到,从而能够避免区块链中的数据被篡改,保证区块链中数据的安全性和可靠性。
作为一个可能的实施方式,所述分布式数据库系统可以是分布式云存储系统,分布式云存储系统是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
目前,分布式云存储系统的存储方法为:创建逻辑卷,在创建逻辑卷时,就为每个逻辑卷分配物理存储空间,该物理存储空间可能是某个存储设备或者某几个存储设备的磁盘组成。客户端在某一逻辑卷上存储数据,也就是将数据存储在文件系统上,文件系统将数据分成许多部分,每一部分是一个对象,对象不仅包含数据而且还包含数据标识(ID,IDentity)等额外的信息,文件系统将每个对象分别写入该逻辑卷的物理存储空间,且文件系统会记录每个对象的存储位置信息,从而当客户端请求访问数据时,文件系统能够根据每个对象的存储位置信息让客户端对数据进行访问。
分布式云存储系统为逻辑卷分配物理存储空间的过程,具体为:按照对存储于逻辑卷的对象的容量估量(该估量往往相对于实际要存储的对象的容量有很大余量)和独立冗余磁盘阵列(RAID,Redundant Array of Independent Disk)的组别,预先将物理存储空间划分成分条,一个逻辑卷可以理解为一个分条,从而为逻辑卷分配了物理存储空间。
以下以监控程序为执行主体对本申请实施例提供的一种分布式数据库系统的故障检测方法进行说明,如图2所示,所述方法包括:
步骤S201:周期性地从代理接入程序集合中确定至少两个目标代理接入程序;
在本申请实施例中,所述监控程序是指模拟用户的请求,对分布式数据库系统中的各个数据库节点的服务进行监控的程序,例如,所述监控程序可以用于检测数据库节点的服务是否存活、服务质量是否正常等。
所述代理接入程序集合中包括至少两个代理接入程序,每个代理接入程序都可以在接收到监控程序发送的服务探测请求后将该服务探测请求转发至各个数据库节点,所述代理接入程序还可以接收各个数据库节点响应于所述服务探测请求返回的反馈信息,并可以根据反馈信息生成与所述服务探测请求对应的探测回包,并向所述监控程序发送所述探测回包,以供所述监控程序根据所述探测回包分析各个数据库节点的服务是否存活、服务质量是否正常等。
步骤S203:在当前探测周期内,触发各个所述目标代理接入程序分别对数据库节点进行探测,得到当前探测周期内的至少两个第一探测结果;
在本申请实施例中,所述数据库节点可以是指主数据库节点,也可以是指备用数据节点。
所述监控程序在确定所述目标代理接入程序后,触发各个所述目标代理接入程序分别对同一数据库节点进行探测。例如,在当前探测周期内,所述监控程序从代理接入程序集合中选择两个目标代理接入程序,所述监控程序通过两个目标代理接入程序分别对主数据节点A进行探测,也即,对于同一主数据节点A进行两次探测,从而可以得到两个第一探测结果。
每个所述第一探测结果可以用于表征在当前探测周期内,任一所述目标代理接入程序针对某一数据库节点的探测是成功还是失败。
所述第一探测结果的数量与所述目标代理接入程序的数量一致,例如,针对某个数据库节点,监控程序选择了两个目标代理接入程序对该数据库节点进行探测,那么在当前探测周期内,相应也会得到两个第一探测结果。
步骤S205:在至少两个所述第一探测结果满足预设失败条件时,判定当前探测周期内针对所述数据库节点的目标探测结果为失败;
在本申请实施例中,所述预设失败条件可以是指探测结果为成功的第一探测结果在所有得到的第一探测结果中所占的比例小于等于预设成功比例;或者,可以是指探测结果为失败的第一探测结果在所有得到的第一探测结果中所占的比例大于等于预设失败比例。
具体的,在某一探测周期内,针对某一数据库节点,所述监控程序共得到5个第一探测结果,其中,有4个第一探测结果为失败,1个探测结果为成功,探测结果为失败的第一探测结果在所有得到的第一探测结果中所占的比例为80%,如果预设失败比例设置为70%,那么,监控程序得到的5个探测结果满足预设失败条件,监控程序可以判定当前探测周期内针对该数据库节点的目标探测结果为失败。
步骤S207:在连续探测到的第一预设数量周期的目标探测结果均为失败时,判定所述数据库节点出现异常;
在本申请实施例中,所述第一预设数量周期可以根据用户需求设置,所述第一预设数量周期的数值设置得越大,代表对探测结果的判断越保守,即不会轻易将数据库节点判断为异常,从而可以避免漏判,即可以避免漏判应该判定为异常的情形,所述第一预设数量周期的数值设置得越小,可以避免误判,即可以避免不该判定为异常却判定为异常的情形。
可以理解的是,通过合理设置所述第一预设数量周期,可以在漏判和误判之间取得平衡,从而可以在避免数据库节点异常漏判的同时最大程度地降低数据库节点异常误判的几率。
具体的,监控程序会周期性地执行步骤S201至步骤S205的步骤,当连续执行几个周期如2个周期(即第一预设数量周期设置为2)后得到的目标探测结果都是失败时,所述监控程序判定所述数据库节点出现异常。
步骤S209:在所述数据库节点连续出现预设次数的异常时,判定所述数据库节点发生故障。
在本申请实施例中,所述预设次数可以根据试验设置,所述预设次数设置得越大,代表对数据库节点发生故障的判断越保守,即不会轻易将数据库节点判断为发生故障,从而可以避免漏判,即可以避免漏判应该判定为故障的情形,所述预设次数的数值设置得越小,可以避免误判,即可以避免不该判定为故障却判定为故障的情形。
可以理解的是,通过合理设置预设次数,可以在漏判和误判之间取得平衡,从而可以在避免数据库节点故障漏判的同时最大程度地降低数据库节点故障误判的几率。
具体的,假设第一预设数量周期设置为2,那么当连续执行2个周期后得到的目标探测结果都为失败,所述监控程序确定所述数据库节点出现异常。当再执行2个周期(即下一轮的2个周期)得到的目标探测结果还都为失败时,说明连续2次判断为异常,如果预设次数设置为2,也即满足了所述数据库节点连续出现预设次数的异常的条件,此时,所述监控程序确定所述数据库节点发生故障;相反,当再执行2个周期(即下一轮的2个周期)得到的目标探测结果不都为失败时(如1个失败1个成功),下一轮探测不会将数据库节点判断为异常,虽然上一轮中将数据库节点判断为异常,但是由于不满足所述数据库节点连续出现预设次数的异常的条件,此时,所述监控程序不会将所述数据库节点诊断为发生故障,也不会发起故障自动切换。
在本申请实施例中,通过周期性地从代理接入程序集合中确定至少两个目标代理接入程序,并在当前探测周期内触发各个所述目标代理接入程序分别对数据库节点进行探测,得到当前探测周期内的至少两个第一探测结果,以及在至少两个所述第一探测结果满足预设失败条件时,判定当前探测周期内针对所述数据库节点的目标探测结果为失败,在连续探测到的第一预设数量周期的目标探测结果均为失败时,判定所述数据库节点出现异常,在所述数据库节点连续出现预设次数的异常时,判定所述数据库节点发生故障。如此,不管在有无数据读写时,只要任一数据库节点发生故障,都可以主动探测到,并且,故障检测的效率较高,对于故障的判断也更为细致,能够最大程度地避免误判及漏判,提高了故障检测的准确性。
在一些实施例中,如图3所示,所述触发各个所述目标代理接入程序分别对数据库节点进行探测,得到当前周期内的至少两个第一探测结果可以包括:
步骤S301:触发各个所述目标代理接入程序分别向所述数据库节点发送服务探测请求,以使所述数据库节点响应于所述服务探测请求执行相应的数据读操作;
步骤S303:判断是否接收到各个所述目标代理接入程序发送的探测回包,所述探测回包为各个所述目标代理接入程序基于所述数据库节点返回的反馈信息确定,所述反馈信息为所述数据库节点在执行所述数据读操作后得到的信息;
步骤S305:若没有接收到某一所述目标代理接入程序发送的探测回包,判定通过相应的所述目标代理接入程序探测得到的第一探测结果为失败。
在本申请实施例中,所述服务探测请求用于请求所述数据库节点执行一次数据读操作,所述数据库节点在接收到所述服务探测请求后,向所述数据库节点的所有工作线程转发该消息,工作线程触发一次数据读操作并将结果反馈给所述目标代理接入程序。
在数据库节点的工作线程成功触发一次数据读操作后,可以将基于数据读操作得到的反馈信息发送给所述目标代理接入程序,所述目标代理接入程序在按时接收到所述反馈信息后,直接将所述反馈信息作为与所述服务探测请求对应的探测回包转发给监控程序,以便监控程序基于探测回包分析得到第一探测结果。
而当所述监控程序没有接收到某一目标代理接入程序发送的探测回包,说明有较大可能数据库节点没有向目标代理接入程序发送反馈信息,此时,所述监控程序可以确定通过该目标代理接入程序探测得到的第一探测结果为失败。
在实际应用中,当某一数据库节点发生机器、进程、网络等物理故障时,该数据库节点很可能没法成功地向目标代理接入线程返回与服务探测请求对应的反馈信息,进而目标代理接入线程也不会向监控程序返回对应的探测回包,而通过上述实施例,可以有效探测出导致数据库节点无法发送数据的相关故障,从而能够探测出更多故障类型导致的数据库节点故障,提高故障探测的有效性。
在一些实施例中,如图4所示,所述触发各个所述目标代理接入程序分别对数据库节点进行探测,得到当前周期内的至少两个第一探测结果还可以包括:
步骤S401:若接收到所述目标代理接入程序发送的探测回包,对所述探测回包进行分析;
步骤S403:若所述探测回包中包括探测超时信息时,判定通过相应的所述目标代理接入程序探测得到的第一探测结果为失败,所述探测超时信息用于表征对应的所述目标代理接入程序在超出预设等待时间后才接收到所述数据库节点发送的反馈信息。
在本申请实施例中,所述探测回包还可以由所述目标代理接入程序根据数据库节点发送的反馈信息自主生成,具体的,在目标代理接入程序在超出预设等待时间后才接收到数据库节点发送的反馈信息时(即反馈信息出现延时),所述目标代理接入程序会生成一个与所述服务探测请求对应的包括探测超时信息的探测回包,并将该探测回包发送至监控程序,也即,如果某一个数据库节点超时发送数据,目标代理接入程序会明确给监控程序回包以告知该数据库节点发生超时。
可以理解的是,当监控程序分析出所述探测回包中包括探测超时信息时,可以得知相应的数据库节点发生超时,从而可以确定相应的第一探测结果为失败。
在实际应用中,当某一数据库节点发生过载、请求响应慢等故障时,该数据库节点很可能没法在预设等待时间内向目标代理接入线程返回与服务探测请求对应的探测回包,而通过本申请实施例,可以有效探测出导致数据库节点超时发送数据的相关故障,从而能够探测出更多故障类型导致的数据库节点故障,提高故障探测的有效性。
在一些实施例中,如图5所示,所述方法还可以包括:
步骤S501:周期性地接收各个所述目标代理接入程序上报的读写请求接收数据和请求响应数据,所述读写请求接收数据和请求响应数据为各个所述目标代理接入程序针对同一所述数据库节点进行监测得到;
步骤S503:基于所述读写请求接收数据和所述请求响应数据计算当前探测周期内所述数据库节点的响应错误率;
步骤S505:在连续探测到的第二预设数量周期的所述响应错误率均大于等于预设错误率时,判定所述数据库节点发生故障。
在本申请实施例中,各个所述目标代理接入程序针对同一个所述数据库节点的读写请求接收数据和请求响应数据进行监测。
具体的,对于主数据库节点,所述读写请求接收数据可以包括成功接收到的读请求和成功接收到的写请求,所述请求响应数据可以包括错误的读响应(例如,返回错误码小于0的读响应)和错误的写响应(例如,返回错误码小于0的写响应)。相应的,响应错误率可以包括总响应错误率、写响应错误率和读响应错误率,其中,总响应错误率可以通过以下方式计算,即错误的读响应和错误的写响应的数量之和除以成功接收到的读请求和成功接收到的写请求的数量之和;写响应错误率可以等于错误的写响应除以成功接收到的写请求;读响应错误率可以等于错误的读响应除以成功接收到的读响应。
对于备用数据库节点,所述读写请求接收数据可以包括成功接收到的读请求,所述请求响应数据可以包括错误的读响应(例如,返回错误码小于0的读响应)。相应的,响应错误率可以包括总响应错误率或读响应错误率,其中,总响应错误率和读响应错误率均可以通过以下方式计算,即错误的读响应除以成功接收到的读请求。
在连续探测到的第二预设数量周期的所述响应错误率均大于等于预设错误率时,确定所述数据库节点发生故障,其中,所述第二预设数量周期和所述预设错误率均可以根据试验设置,对于主数据库节点和备用数据库节点,可以分别设置不同的预设错误率。
例如,对于主数据库节点,可以设置预设错误率为80%,当连续第二预设数量周期如3个周期某个主数据库节点的响应错误率大于等于80%,认为该主数据库节点发生故障;对于备用数据库节点,可以设置预设错误率为40%,当连续预设数量周期如3个周期某个备用数据库节点的响应错误率大于等于40%时,认为该备用数据库节点发生故障。
在实际应用中,当某一数据库节点发生请求失败率高等故障时,通过本申请实施例,可以有效探测出相关故障,从而能够探测出更多故障类型导致的数据库节点故障,提高故障探测的有效性;并且,本申请实施例基于第二预设数量周期的响应错误率进行分析,避免了在单个周期的响应错误率不满足条件时(可能因为网络抖动)即认为数据库节点故障,从而避免了故障误报,提高了故障探测的可靠性。
在一些实施例中,如图6所示,在所述确定所述数据库节点发生故障的步骤之前,所述方法还可以包括:
步骤S601:判断每个周期内的请求总数是否均大于等于预设请求数量;
步骤S603:若每个周期内的请求总数均大于等于预设请求数量且连续探测到的第二预设数量周期的响应错误率均大于等于预设错误率,执行所述判定所述数据库节点发生故障的步骤。
在本申请实施例中,所述请求总数即任一数据库节点成功接收到的读请求和写请求的总数,所述预设请求数量可以根据试验设置,通过判断请求总数是否大于等于预设请求数量,可以保证故障探测是基于有统计价值的数据进行的。
例如,当某一数据库节点在一个周期如10s内的请求总数小于预设请求数量如100,则认为该周期内的请求总数过少,其数据不具有统计价值,因此,不会在该周期内判断某一数据库节点的服务是否正常。
在实际应用中,通过判断请求总数是否大于等于预设请求数量,只在请求总数大于等于预设请求数量时才会判断该周期内某一数据库节点的服务是否正常,从而保证了故障探测是基于有统计价值的数据进行的,进而提高了故障探测的可靠性。
在一些实施例中,如图7和图8所示,所述方法还可以包括:
步骤S701:周期性地接收主数据库节点通过心跳上报的第一更新时间,所述第一更新时间为所述主数据库节点最新更新主数据库二进制日志的时间;
步骤S703:周期性地接收备用数据库节点通过心跳上报的第二更新时间,所述第二更新时间为备用数据库节点最新更新备用数据库二进制日志的时间;
步骤S705:在同一探测周期内的所述第一更新时间和所述第二更新时间的时间间隔小于等于预设时间间隔且所述主数据库节点发生故障时,控制所述主数据库节点切换至所述备用数据库节点。
在本申请实施例中,所述第一更新时间具体可以根据最新更新的主数据库二进制日志中记录的事件开始的时间戳确定,所述第二更新时间具体可以根据最新更新的备用数据库日志中记录的事件开始的时间戳确定。
所述预设时间间隔可以根据试验确定,可以理解的是,如果所述预设时间间隔设置得较小,将容易导致主数据库节点在发生故障时无法顺利切换至备用数据库节点;如果预设时间间隔设置较大,将容易导致主数据库节点切换至备用数据库节点时发生数据丢失。通过合理设置所述预设时间间隔,可以保证在主数据库节点发生故障能够顺利地切换至备用数据库节点并能够最大程度地避免数据丢失。
在实际应用中,在主数据库节点被判定为故障时,还需要满足本申请实施例所述的上述条件才能触发自动故障切换,也即,只有在主数据库节点二进制日志的更新时间和备用数据库节点二进制日志的更新时间之间的差距足够小时,才能触发自动故障切换,从而能够避免切换时的大幅回档问题,也即,避免了在将主数据库节点切换至备用数据库节点时丢失主数据库节点中尚未同步给备用数据库节点的数据,从而保证了故障切换的可靠性。
在一些实施例中,在所述监控程序控制所述主数据库节点切换至所述备用数据库节点的步骤(即步骤S705)之前,所述方法还可以包括:在所述第一更新时间和所述第二更新时间的时间间隔小于等于预设时间间隔且所述主数据库节点发生故障时,判断所述备用数据库节点是否在线;若所述备用数据库节点在线,执行所述控制所述主数据库节点切换至所述备用数据库节点的步骤。
在本申请实施例中,当判定所述备用数据库节点在线时,所述监控程序控制所述主数据库节点切换至所述备用数据库节点;相反的,当判定所述备用数据库节点不在线时,所述监控程序禁止所述主数据库节点切换至所述备用数据库节点。
具体的,判断备用数据库节点是否在线的方式可以为:备用数据库节点需要周期性地向所述监控程序发送心跳包,如果监控程序在一个或几个周期内没有接收到备用数据库节点发送的心跳包,说明备用数据库节点不在线。
判断备用数据节点是否在在线的方式还可以为:监控程序周期性地向备用数据库节点发送心跳包,如果监控程序在一个或几个周期内没有接收到所述备用数据库节点发送的针对该心跳包的回包,说明备用数据库节点不在线。
在实际应用中,通过在切换前判断备用数据库节点是否在线,只有在备用数据库节点在线时才进行故障切换,从而保证了故障切换的可靠性。
在一些实施例中,在所述控制所述主数据库节点切换至所述备用数据库节点的步骤(即步骤S705)之后,所述方法还可以包括:计算所述主数据库节点和所述备用数据库节点在预设时间段内的故障切换次数;在预设时间段内的故障切换次数大于等于预设切换次数时,禁止所述主数据库节点和所述备用数据库节点在所述预设时间段内的故障切换。
可以理解的是,在所述主数据库节点发生故障时,需要将所述主数据库节点切换至所述备用数据库节点,所述备用数据库节点将提升为新的主数据库节点,原有的主数据库节点将变为备用数据库节点;进一步地,当新的主数据库节点(即原有的所述备用数据库节点)也发生故障时,其很可能再次切换为备用数据库节点,而新的备用数据库节点(即原有的所述主数据库节点)很可能再次切换为主数据库节点,此时,相当于进行了2次故障切换。
在本申请实施例中,限定了同一对所述主数据库节点和所述备用数据库节点之间,在预设时间段内的切换次数需小于预设切换次数,例如,限定一个小时内来回故障切换次数不超过3次,如果超过3次,则不允许所述主数据库节点和所述备用数据库节点在该时间段内再进行故障切换。在实际应用中,通过限定预设时间段内同一对主数据库节点和备用数据库节点之间切换的次数,可以防止在短时间内多次进行故障切换导致的服务抖动,保证了服务的稳定性。
未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的方法。
本申请实施例还提供了一种分布式数据库系统的故障检测装置900,请参见图9,所述装置900可以包括:
代理接入程序确定模块910,用于周期性地从代理接入程序集合中确定至少两个目标代理接入程序;
探测模块920,用于在当前探测周期内,触发各个所述目标代理接入程序分别对数据库节点进行探测,得到当前探测周期内的至少两个第一探测结果;
目标探测结果判断模块930,用于在至少两个所述第一探测结果满足预设失败条件时,判定当前探测周期内针对所述数据库节点的目标探测结果为失败;
异常判断模块940,用于在连续探测到的第一预设数量周期的目标探测结果均为失败时,判定所述数据库节点出现异常;
故障判断模块950,用于在所述数据库节点连续出现预设次数的异常时,判定所述数据库节点发生故障。
在一些实施例中,所述探测模块可以包括:
服务探测请求发送子模块,用于触发各个所述目标代理接入程序分别向所述数据库节点发送服务探测请求,以使所述数据库节点响应于所述服务探测请求执行相应的数据读操作;
探测回包接收判断子模块,用于判断是否接收到各个所述目标代理接入程序发送的探测回包,所述探测回包为各个所述目标代理接入程序基于所述数据库节点返回的反馈信息确定,所述反馈信息为所述数据库节点在执行所述数据读操作后得到的信息;
第一探测结果判断子模块,用于若没有接收到某一所述目标代理接入程序发送的探测回包,判定通过相应的所述目标代理接入程序探测得到的第一探测结果为失败。
在一些实施例中,所述探测模块还可以包括:
探测回包分析子模块,用于若接收到所述目标代理接入程序发送的探测回包,对所述探测回包进行分析;
第二探测结果判断子模块,用于若所述探测回包中包括探测超时信息时,判定通过相应的所述目标代理接入程序探测得到的第一探测结果为失败,所述探测超时信息用于表征对应的所述目标代理接入程序在超出预设等待时间后才接收到所述数据库节点发送的反馈信息。
在一些实施例中,所述装置还可以包括:
读写请求数据接收模块,用于周期性地接收各个所述目标代理接入程序上报的读写请求接收数据和请求响应数据,所述读写请求接收数据和请求响应数据为各个所述目标代理接入程序针对同一所述数据库节点进行监测得到;
响应错误率计算模块,用于基于所述读写请求接收数据和所述请求响应数据计算当前探测周期内所述数据库节点的响应错误率;
所述故障判断模块还用于在连续探测到的第二预设数量周期的所述响应错误率均大于等于预设错误率时,判定所述数据库节点发生故障。
在一些实施例中,所述装置还可以包括:
请求总数判断模块,用于判断每个周期内的请求总数是否均大于等于预设请求数量;
所述故障判断模块还用于在每个周期内的请求总数均大于等于预设请求数量且连续探测到的第二预设数量周期的响应错误率均大于等于预设错误率,判定所述数据库节点发生故障。
在一些实施例中,所述装置还可以包括:
第一更新时间接收模块,用于周期性地接收主数据库节点通过心跳上报的第一更新时间,所述第一更新时间为所述主数据库节点最新更新主数据库二进制日志的时间;
第二更新时间接收模块,用于周期性地接收备用数据库节点通过心跳上报的第二更新时间,所述第二更新时间为备用数据库节点最新更新备用数据库二进制日志的时间;
故障切换控制模块,用于在同一探测周期内的所述第一更新时间和所述第二更新时间的时间间隔小于等于预设时间间隔且所述主数据库节点发生故障时,控制所述主数据库节点切换至所述备用数据库节点。
在一些实施例中,所述装置还可以包括:
在线状态判断模块,用于在所述第一更新时间和所述第二更新时间的时间间隔小于等于预设时间间隔且所述主数据库节点发生故障时,判断所述备用数据库节点是否在线;
所述故障切换控制模块还用于在所述备用数据库节点在线,控制所述主数据库节点切换至所述备用数据库节点。
在一些实施例中,所述装置还可以包括:
故障切换次数计算模块,用于计算所述主数据库节点和所述备用数据库节点在预设时间段内的故障切换次数;
所述故障切换控制模块还用于在预设时间段内的故障切换次数大于等于预设切换次数时,禁止所述主数据库节点和所述备用数据库节点在所述预设时间段内的故障切换。
本实施例还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行如本实施例上述任一方法。
本实施例还提供了一种电子设备,其结构图请参见图10,该设备1000可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(centralprocessing units,CPU)1022(例如,一个或一个以上处理器)和存储器1032,一个或一个以上存储应用程序1042或数据1044的存储介质1030(例如一个或一个以上海量存储设备)。其中,存储器1032和存储介质1030可以是短暂存储或持久存储。存储在存储介质1030的程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对设备中的一系列指令操作。更进一步地,中央处理器1022可以设置为与存储介质1030通信,在设备1000上执行存储介质1030中的一系列指令操作。设备1000还可以包括一个或一个以上电源1026,一个或一个以上有线或无线网络接口1050,一个或一个以上输入输出接口1058,和/或,一个或一个以上操作系统1041,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。本实施例上述的任一方法均可基于图10所示的设备进行实施。
本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤和顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或中断产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
本实施例中所示出的结构,仅仅是与本申请方案相关的部分结构,并不构成对本申请方案所应用于其上的设备的限定,具体的设备可以包括比示出的更多或更少的部件,或者组合某些部件,或者具有不同的部件的布置。应当理解到,本实施例中所揭露的方法、装置等,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分仅仅为一种逻辑功能的划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元模块的间接耦合或通信连接。
基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请实施例还提供了一种计算机程序产品或计算机程序,所述计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实施方式中提供的故障检测方法。
本领域技术人员还可以进一步意识到,结合本说明书所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但这种实现不应认为超出本申请的范围。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。