CN107819556B - 一种服务状态切换方法及装置 - Google Patents

一种服务状态切换方法及装置 Download PDF

Info

Publication number
CN107819556B
CN107819556B CN201610818126.9A CN201610818126A CN107819556B CN 107819556 B CN107819556 B CN 107819556B CN 201610818126 A CN201610818126 A CN 201610818126A CN 107819556 B CN107819556 B CN 107819556B
Authority
CN
China
Prior art keywords
service
time
state
moment
identifier
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.)
Active
Application number
CN201610818126.9A
Other languages
English (en)
Other versions
CN107819556A (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.)
Beijing Kingsoft Cloud Network Technology Co Ltd
Beijing Kingsoft Cloud Technology Co Ltd
Original Assignee
Beijing Kingsoft Cloud Network Technology Co Ltd
Beijing Kingsoft Cloud Technology 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 Beijing Kingsoft Cloud Network Technology Co Ltd, Beijing Kingsoft Cloud Technology Co Ltd filed Critical Beijing Kingsoft Cloud Network Technology Co Ltd
Priority to CN201610818126.9A priority Critical patent/CN107819556B/zh
Publication of CN107819556A publication Critical patent/CN107819556A/zh
Application granted granted Critical
Publication of CN107819556B publication Critical patent/CN107819556B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L1/00Arrangements for detecting or preventing errors in the information received
    • H04L1/22Arrangements for detecting or preventing errors in the information received using redundant apparatus to increase reliability
    • 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/0663Performing the actions predefined by failover planning, e.g. switching to standby network elements

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Telephonic Communication Services (AREA)

Abstract

本发明实施例公开了一种服务状态切换方法及装置,应用于配置有目标服务的设备。该方法包括:读取目标数据库中记录的第一标识以及第一时刻;然后判断第一标识与目标服务的第二标识是否相同;如果相同,判断第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换目标服务的服务状态为备用状态;若为否,更新第一时刻为当前时刻;如果不相同,判断第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换目标服务的服务状态为主用状态,更新第一时刻为当前时刻,更新第一标识为第二标识。应用本方案切换服务的服务状态时,不需要额外部署Zookeeper,减少了额外部署Zookeeper所消耗的资源。

Description

一种服务状态切换方法及装置
技术领域
本发明涉及计算机技术领域,特别涉及一种服务状态切换方法及装置。
背景技术
服务(server),从硬件的角度而言,指的是物理上存在的服务器;从软件的角度上说,指的是具备服务器端功能的电脑软件,服务通常与客户端(client)相连接,客户端通过访问服务来获取相应的服务内容,例如访问数据库等;客户端获取某项服务内容时,为了防止对应该项服务内容的服务出现故障或其它无法向客户端提供服务内容的现象,现有技术中,通常会设置至少两个服务提供同一服务内容,这些服务的状态可以分为:主用状态和备用状态,处于主用状态的服务称为主服务(active server),处于备用状态的服务称为备用服务(standby server)。
客户端获取服务内容时,由主服务实时地为客户端提供服务内容,当主服务不能继续提供服务内容时,备用服务切换自身状态为主用状态以成为新的主服务,并由此新的主服务继续为用户提供对应的服务内容,上述这种备用状态与主用状态的切换称为主备切换。
现有技术中,主备切换的方法一般是通过ZooKeeper(一个分布式的、开放源码的分布式应用程序协调服务)实现的,比如HDFS(Hadoop Distributed File System,Hadoop分布式文件***)、YARN(Yet Another Resource Negotiator,另一种资源协调者)服务;现有技术通过在ZooKeeper上创建znode节点作为锁,获取到锁的服务成为主服务,未获得锁的服务作为备用服务。主服务定期更新znode节点,继续持有锁,当主服务出现故障与ZooKeeper失去连接时,znode节点不再被更新,则备用服务获取到锁并自动切换自身服务状态,成为新的主服务。
现有技术中服务的服务状态的切换需要依赖预先部署的ZooKeeper,否则无法实现服务状态的切换。因此,设计一种不需要部署ZooKeeper就可以实现服务的服务状态的切换方法是十分必要的。
发明内容
本发明实施例公开了一种服务状态切换方法及装置,以在没有部署ZooKeeper的情况下,实现服务的服务状态的切换。技术方案如下:
为达上述目的,第一方面,本发明实施例提供了一种服务状态切换方法,应用于配置有目标服务的设备,所述方法包括:
读取目标数据库中记录的第一标识以及第一时刻,其中,所述第一标识为处于主用状态的服务的标识,所述第一时刻为处于主用状态的服务的当前服务周期起始时刻;
判断所述第一标识与所述目标服务的第二标识是否相同;
如果相同,判定所述目标服务的服务状态为主用状态,并判断所述第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换所述目标服务的服务状态为备用状态;若为否,更新所述第一时刻为当前时刻;
如果不相同,判定所述目标服务的服务状态为备用状态,并判断所述第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换所述目标服务的服务状态为主用状态,更新所述第一时刻为当前时刻,更新所述第一标识为所述第二标识,其中,所述第二预设时长不小于所述第一预设时长。
优选的,所述服务状态切换方法还包括:
根据本地记录的服务状态,判断所述目标服务的服务状态是否为主用状态;
若为是,判断所述目标服务与所述目标数据库的网络连接是否断开;
如果断开,对比本地记录的第二时刻与当前时刻,若所述第二时刻与当前时刻的时间差超过所述第一预设时长,切换所述目标服务的服务状态为备用状态,其中,所述第二时刻为处于主用状态的服务的当前服务周期起始时刻;
如果未断开,执行所述读取目标数据库中记录的第一标识以及第一时刻;
所述判断所述第一时刻与当前时刻的时间差是否超过第一预设时长的判断结果为否,或者所述判断所述第一时刻与当前时刻的时间差是否超过第二预设时长的判断结果为是时,所述服务状态切换方法还包括:
更新所述第二时刻为当前时刻。
优选的,所述根据本地记录的服务状态,判断所述目标服务的服务状态是否为主用状态,包括:
根据预设的第一时间周期和本地记录的服务状态,周期性地判断所述目标服务的服务状态是否为主用状态;其中,所述第一时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第一时间周期之和。
优选的,所述读取目标数据库中记录的第一标识以及第一时刻,包括:
基于预设的第二时间周期,周期性地读取所述目标数据库中记录的第一标识以及第一时刻,其中,所述第二时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第二时间周期之和。
优选的,所述目标数据库中未记录有主服务的第一标识以及第一时刻时,所述服务状态切换方法还包括:
将所述第二标识作为所述第一标识,将当前时刻作为所述第一时刻,写入所述目标数据库;
切换所述目标服务的服务状态为主用状态。
优选的,所述第一标识以及所述第二标识均包括:对应服务的端口信息以及设备的IP地址信息。
第二方面,本发明实施例提供了一种服务状态切换装置,应用于配置有目标服务的设备,所述服务状态切换装置包括:
读取模块,用于读取目标数据库中记录的第一标识以及第一时刻,其中,所述第一标识为处于主用状态的服务的标识,所述第一时刻为处于主用状态的服务的当前服务周期起始时刻;
第一判断模块,用于判断所述第一标识与所述目标服务的第二标识是否相同;
第一处理模块,用于在所述第一判断模块的判断结果为是的情况下,判定所述目标服务的服务状态为主用状态,并判断所述第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换所述目标服务的服务状态为备用状态;若为否,更新所述第一时刻为当前时刻;
第二处理模块,用于在所述第一判断模块的判断结果为否的情况下,判定所述目标服务的服务状态为备用状态,并判断所述第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换所述目标服务的服务状态为主用状态,更新所述第一时刻为当前时刻,更新所述第一标识为所述第二标识,其中,所述第二预设时长不小于所述第一预设时长。
优选的,所述服务状态切换装置还包括:
第二判断模块,用于根据本地记录的服务状态,判断所述目标服务的服务状态是否为主用状态;
第三判断模块,用于在所述第二判断模块的判断结果为是的情况下,判断所述目标服务与所述目标数据库的网络连接是否断开;如果未断开,触发所述读取模块;如果断开,对比本地记录的第二时刻与当前时刻,若所述第二时刻与当前时刻的时间差超过所述第一预设时长,切换所述目标服务的服务状态为备用状态,其中,所述第二时刻为处于主用状态的服务的当前服务周期起始时刻;
所述第一处理模块中所述判断所述第一时刻与当前时刻的时间差是否超过第一预设时长的判断结果为否时,或者所述第二处理模块中所述判断所述第一时刻与当前时刻的时间差是否超过第二预设时长的判断结果为是时,所述装置还包括:
更新模块,用于更新所述第二时刻为当前时刻。
优选的,所述第二判断模块,具体用于:
根据预设的第一时间周期和本地记录的服务状态,周期性地判断所述目标服务的服务状态是否为主用状态;其中,所述第一时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第一时间周期之和。
优选的,所述读取模块,具体用于:
基于预设的第二时间周期,周期性地读取所述目标数据库中记录的第一标识以及第一时刻,其中,所述第二时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第二时间周期之和。
优选的,所述目标数据库中未记录有主服务的第一标识以及第一时刻时,所述服务状态切换装置还包括:
写入模块,用于将所述第二标识作为所述第一标识,将当前时刻作为所述第一时刻,写入所述目标数据库;
切换模块,用于切换所述目标服务的服务状态为主用状态。
优选的,所述第一标识以及所述第二标识均包括:对应服务的端口信息以及设备的IP地址信息。
由以上可见,本发明实施例提供的方案中,首先读取目标数据库中记录的第一标识以及第一时刻;然后判断第一标识与目标服务的第二标识是否相同;如果相同,判定目标服务的服务状态为主用状态,并判断第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换目标服务的服务状态为备用状态;若为否,更新第一时刻为当前时刻;如果不相同,判定目标服务的服务状态为备用状态,并判断第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换目标服务的服务状态为主用状态,更新第一时刻为当前时刻,更新第一标识为第二标识。
与现有技术相比,本发明实施例提供的方案中,对应于同一服务内容的两个服务可以将该目标数据库中存储的第一标识与自身对应的第二标识做对比,进而判断该目标服务当前是主服务还是备用服务;当该目标服务处于主用状态时,如果第一时刻与当前时刻的时间差超过第一预设时长,则该目标服务切换自身状态为备用状态,当该目标服务处于备用状态时,如果第一时刻与当前时刻的时间差超过第二预设时长,则该目标服务切换自身状态为主用状态;目标服务的服务状态的切换可以依据目标数据库中的相应记录,并不需要额外部署Zookeeper,也就不需要专门的管理员维护Zookeeper,减少了额外部署Zookeeper所消耗的资源;而且,对应同一服务内容的两个服务分别所在的设备之间不需要相互通信连接,就可以保证针对于同一服务内容的两个服务不会在同一时段内都处于主用状态,同时减少此通信连接所消耗的资源。
当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种服务状态切换方法的第一种流程示意图;
图2为本发明实施例提供的一种服务状态切换方法的第二种流程示意图;
图3为本发明实施例中,在目标数据库中未记录有当前主服务的第一标识以及第一时刻的情况下,目标服务切换服务状态的方法所对应的流程示意图;
图4为本发明实施例提供的一种服务状态切换装置的第一种结构示意图;
图5为本发明实施例提供的一种服务状态切换装置的第二种结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面首先从与现有技术对比的角度对本发明进行简单介绍。
在现有技术中,为了完成服务的服务状态的切换,除了配置对应服务内容的两个服务外,还会部署一个ZooKeeper,而且此处的两个服务分别对应的两个设备均需要与该ZooKeeper保持连接,以保证此处的两个服务与该ZooKeeper的网络连接。
如前述所言,现有技术通过在ZooKeeper上创建znode节点作为锁,获取到锁的服务成为主服务,未获得锁的服务作为备用服务。主服务定期更新znode节点,继续持有锁,当主服务出现宕机等故障而与ZooKeeper失去连接时,znode节点不再被更新,则备用服务获取到锁并自动切换自身服务状态,成为新的主服务。
由以上可见,现有技术中服务的服务状态的切换需要依赖预先部署的ZooKeeper,否则无法实现服务状态的切换,而部署额外的ZooKeeper势必会造成资源的浪费。
应用本发明实施例提供的方案时,首先读取目标数据库中记录的第一标识以及第一时刻;然后判断第一标识与目标服务的第二标识是否相同;如果相同,判定目标服务的服务状态为主用状态,并判断第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换目标服务的服务状态为备用状态;若为否,更新第一时刻为当前时刻;如果不相同,判定目标服务的服务状态为备用状态,并判断第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换目标服务的服务状态为主用状态,更新第一时刻为当前时刻,更新第一标识为第二标识。
与现有技术相比,本发明实施例提供的方案中,对应于同一服务内容的两个服务可以将该目标数据库中存储的第一标识与自身对应的第二标识做对比,进而判断该目标服务当前是主服务还是备用服务;当该目标服务处于主用状态时,如果第一时刻与当前时刻的时间差超过第一预设时长,则该目标服务切换自身状态为备用状态,当该目标服务处于备用状态时,如果第一时刻与当前时刻的时间差超过第二预设时长,则该目标服务切换自身状态为主用状态;目标服务的服务状态的切换可以依据目标数据库中的相应记录,并不需要额外部署Zookeeper,也就不需要专门的管理员维护Zookeeper,减少了额外部署Zookeeper所消耗的资源。
下面再通过具体实施例对本发明进行详细介绍。
本发明实施例提供的一种服务状态切换方法,应用于配置有目标服务的设备。应该说明的是,此处的目标服务可以是指具有服务功能的软件,另外,该配置有目标服务的设备可以直接是服务器,由服务器向客户端提供服务内容。
应该强调的是,本发明实施例是应用于设置有该目标服务的设备上,而配置主备切换模式就必须要配置两个服务,也就是说,需要两个配置有目标服务的设备,此处的两个目标服务在工作的过程中,可以是一个作为主服务,另一个作为备用服务。
如图1所示的本发明实施例提供的一种服务状态切换方法的第一种流程示意图,该方法包括:
S101:读取目标数据库中记录的第一标识以及第一时刻。其中,该第一标识为处于主用状态的服务的标识,该第一时刻为处于主用状态的服务的当前服务周期起始时刻。
该目标数据库中存储有关于上述第一标识以及第一时刻的记录,例如在该目标数据库中创建一个数据库表,并以服务内容的名称为主键,将上述第一标识以及第一时刻记录在该数据库表中。该设备访问该目标数据库时,会基于服务内容的名称找到对应的数据库表,进而读取上述第一标识以及第一时刻。
在本发明实施例中,该第一标识对应当前处于主用状态的服务;而第一时刻则对应当前时刻主服务的当前服务周期的起始时刻,应该说明,某一主服务的服务周期的起始时刻包括:该主服务由备用状态切换为主用状态时对应的时刻,另外,该主服务的某一服务周期结束前,该主服务进入下一个服务周期时对应的时刻。
例如,上述设备在读取目标数据库时,该目标数据库中记录的第一标识为X,第一时刻为2016年9月1日10时20分30秒,表明当前时刻的主服务对应的标识为X,并且该主服务的当前服务周期的开始时间为2016年9月1日10时20分30秒。
S102:判断第一标识与目标服务的第二标识是否相同。
两个服务各自都设置有标识,在本发明实施例中,为了保证标识的唯一性,第一标识以及第二标识均可以包括:对应服务的端口信息以及设备的IP地址信息,可以理解,当目标服务是具有服务端功能的软件时,在对应的设备上启动该目标服务时,该目标服务会占用一个端口,该端口号即可以为上述端口信息。例如,某一目标服务对应的IP地址以及端口号分别为:36.7.72.139以及8888,则此时该目标服务的第二标识信息可以为“36.7.72.139:8888”。
如果该第一标识与该第二标识相同,执行S103:判定目标服务的服务状态为主用状态,并判断第一时刻与当前时刻的时间差是否超过第一预设时长。
当该第一标识与该第二标识相同时,表明该目标服务为主服务,在本发明实施例中,目标服务与该数据库保持正常的通信连接时,若目标数据库中的数据库表中记录的该第一标识与该第二标识相同,进而判断该目标服务为主服务后,直接判断第一时刻与当前时刻的时间差是否超过第一预设时长。
应该说明,此处的第一预设时长可以对应为一个租约的时长,上述主服务的服务周期可以对应为一个租约,本发明实施例就是通过该目标数据库中记录的第一标识来实现锁的功能,锁对应的有效期限就是根据该租约来限定的。
例如,该第一预设时长为1分钟,当前时刻该目标数据库中记录的第一时刻为:2016年8月30日1时0分40秒,若当前时刻为2016年8月30日1时1分45秒,表示第一时刻与当前时刻的时间差超过了第一预设时长;换言之,即设定主服务的一个租约为2016年8月30日1时0分40秒至2016年8月30日1时1分40秒,若当前时刻为2016年8月30日1时1分45秒,表示已过当前的租约。
如果该第一时刻与当前时刻的时间差超过第一预设时长,执行S1031:切换目标服务的服务状态为备用状态。
如果该第一时刻与当前时刻的时间差未超过第一预设时长,执行S1032:更新该第一时刻为当前时刻。
此时,虽然目标服务作为主服务,其当前所对应的服务周期并未结束,但是可以进行步骤S1032,以使得主服务进入下一个服务周期,该目标服务不改变自身的服务状态。例如:该目标数据库中记录的第一时刻为:2014年8月10日9时1分25秒,第一预设时长为2分钟,当前时刻为:2014年8月10日9时2分25秒,此时该第一时刻与当前时刻的时间差未超过2分钟,则仅需要更新该目标数据库中的第一时刻为:2014年8月10日9时2分25秒。
如果该第一标识与该第二标识不相同,执行S104:判定目标服务的服务状态为备用状态,并判断第一时刻与当前时刻的时间差是否超过第二预设时长;其中,该第二预设时长不小于该第一预设时长。
显然的,如果该第一时刻与当前时刻的时间差未超过第二预设时长,则不做任何操作,保持目标服务的服务状态仍然为备用状态。
如果该第一时刻与当前时刻的时间差超过第二预设时长,执行S1041:切换目标服务的服务状态为主用状态,更新该第一时刻为当前时刻,更新该第一标识为该第二标识。
例如,目标数据库中记录的第一时刻为:2016年9月10日2时54分0秒,记录的第一标识为36.7.72.148:6666,第二预设时长为1分钟,当前时刻为:2016年9月10日2时55分30秒,目标服务的第二标识为36.7.72.139:8888,此时第一时刻与当前时刻的时间差已超过第二预设时长,则该目标服务首先切换自身服务状态为主用状态,然后更新目标数据库中的第一时刻为:2016年9月10日2时55分30秒,更新第一标识为:36.7.72.139:8888。
另外,应该说明的是,主备切换模式中,对应于同一服务内容的两个服务不能同时处于主用状态,所以如果第二预设时长小于该第一预设时长,很有可能出现当前的主服务仍然在正常运行,备用服务却切换为另一个主服务。
例如,该目标数据库中记录的第一时刻为:2015年8月18日8时24分8秒,第一预设时长为2分钟,第二预设时长为1分钟,假设当前时刻为:2015年8月18日8时25分38秒,当前时刻对应于同一服务内容的主服务x和备用服务y同时读取了该目标数据库,由于第一时刻与当前时刻的时间差未超过第一预设时长2分钟,但是超过了第二预设时长1分钟,此时主服务x仅是会更新目标数据库中存储的第一时刻,不改变自身服务状态,但是备用服务y会切换自身服务状态为主用状态,此时,对应于同一服务内容的两个服务同时处于主用状态。
本发明实施例中,为了保证目标服务能够及时地切换自身的服务状态,上述读取目标数据库中记录的第一标识以及第一时刻(S101),可以包括:
基于预设的第二时间周期,周期性地读取目标数据库中记录的第一标识以及第一时刻,其中,第二时间周期小于第一预设时长,第二预设时长不小于第一预设时长与第二时间周期之和。
可以理解的是,如果当前的主服务出现故障,与上述目标数据库断开了网络连接,同时也不能继续为客户端提供服务内容,作为备用服务的目标服务所在设备没有及时地读取数据库,就不会及时地切换该目标服务成为新的主服务,进而由新的主服务为客户端提供服务内容。
但是如果该作为备用服务的目标服务所在设备以小于第一预设时长的第二时间周期,周期性地进行前述S101的步骤,就能及时切换该目标服务成为新的主服务,进而由新的主服务为客户端提供服务内容。
例如:目标数据库中记录的第一时刻为2013年1月18日2时35分20秒,第一预设时长为2分钟,假设主服务在2013年1月18日2时36分30秒时断开了与目标数据库的网络连接,同时也不能继续为客户端提供服务内容;但是作为备用服务的目标服务所在设备在2013年1月18日3时0分30秒才执行步骤S101,并且成功切换该目标服务为主服务,可以理解,在2013年1月18日2时36分30秒至2013年1月18日3时0分30秒这一时间段内客户端无法获取到服务内容。
但是,如果如果该作为备用服务的目标服务所在设备以1分钟为时间间隔,周期性地执行前述S101的步骤,第二预设时长为2分5秒,同上例,假设该设备在2013年1月18日2时36分20秒时执行前述S101的步骤,此时由于第一时刻与该时刻的时间差未超过第二预设时长,该目标服务仍然为备用服务,间隔1分钟后,当前时刻为2013年1月18日2时37分20秒,此时第一时刻与当前时刻的时间差已超过第二预设时长,该目标服务切换成为新的主服务,可以理解,仅在2013年1月18日2时36分30秒至2013年1月18日2时37分20秒这一较短时间段内客户端无法获取到服务内容。
另一方面,如果主服务未出现任何故障,与目标数据库的网络连接正常,同时也可以正常的向客户端提供服务内容,但是,由于没有及时地更新目标数据库中的第一时刻,有可能出现:从该第一时刻起经过第二预设时长后,备用服务切换为主服务,造成对应于同一服务内容的两个服务均处于主用状态。
例如,目标数据库中记录的第一时刻为2013年1月18日2时35分20秒,第一预设时长为1分钟,第二预设时长为1分10秒,假设从2013年1月18日2时35分20秒后至2013年1月18日2时37分00秒的时间内,主服务所在的设备始终没有执行步骤S101,继而没有更新第一时刻,并且该主服务始终可以向服务端提供服务内容;在2013年1月18日2时37分00秒时,当前的备用服务所在设备执行了步骤S101,并进行后续步骤,显然的,第一时刻与当前时刻的时间差超过了第二预设时长,则该备用服务同样会切换成主服务,此时,对应于同一服务内容的两个服务均处于主用状态。
但是,如果如果该作为主服务的目标服务所在设备以40秒为时间间隔,周期性地执行前述S101的步骤,也就是说,主服务未出现故障的情况下,主服务所在设备每间隔40秒就会执行一次更新第一时刻为当前时刻的操作,可以理解,在此情况下,保证备用服务所在设备每次读取该目标数据库时,该第一时刻与对应的当前时刻的时间差不会超过40秒,即不超过前述第二预设时长1分10秒,所以该备用服务不会切换自身状态为主用状态。
另外,应该注意的是,即使主服务未出现故障,仍然可以执行上述更新该第一时刻为当前时刻(S1032),但是并不表示主服务一定可以成功更改该第一时刻为当前时刻。
假设主服务在从第一时刻开始的第一预设时长内并没有成功执行S1032,主服务必然也没有切换自身服务状态为备用状态,再假设主服务在从第一时刻开始经过第一预设时长后对应的第三时刻执行了步骤S1032,但是,没有更新成功,显然的主服务不会切换自身的服务状态,此时,下一次执行步骤S101的时间将会是从第三时刻后经过第二预设周期所对应的第四时刻,并且在该第四时刻时主服务才会切换自身状态为备用状态,如果在第三时刻至第四时刻之间,备用服务执行了切换自身状态为主用状态,此时,同一服务内容的两个服务均处于主用状态。
可以说,从第三时刻至第四时刻的时段是一个宽限期,在宽限期内,由两个服务构成的***处于一种jeopardy(危险)状态,在此时段内,可能会出现两个服务均处于主用状态的现象。
所以此处的第二预设时长不小于第一预设时长与第二时间周期之和,同样是为了保证不会在同一时刻对应于同一服务内容的两个服务均处于主用状态的现象,当然,优选的,该第二预设预设时长直接等于第一预设时长与第二时间周期之和。
例如,该第一时刻为2015年9与3日7时10分5秒,第一预设时长为1分钟,第二周期为20秒,假设从2015年9与3日7时10分5秒至2015年9与3日7时11分5秒的时段内,主服务执行步骤S1032,但是没有成功完成更新操作,并且在2015年9与3日7时11分5秒执行了步骤S1032,但是依然没有更新成功,显然的,再经过20秒后,主服务才会执行切换自身状态为备用状态的操作,所以,对应的备用服务应该在2015年9与3日7时11分5秒开始后的20秒内,不能执行切换自身状态为主用状态的操作,所以第二预设预设时长不应小于第一预设时长与第二时间周期之和。
应该说明的是,对应同一服务内容的两个服务在最开始布置的时候,两个服务都处于备用状态,同时,该目标数据库中也未记录有当前主服务的第一标识以及第一时刻,如图3所示,此时该方法还包括:
S301:将目标服务的第二标识作为该第一标识,将当前时刻作为该第一时刻,写入目标数据库。
在目标数据库中未记录有该第一标识以及该第一时刻的情况下,需要在该目标数据库中写入关于第一标识以及该第一时刻的记录,同时将第二标识赋值给该第一标识,将当前时刻赋值给该第一时刻。
S302:切换目标服务的服务状态为主用状态。
可以理解,本发明实施例中,在目标数据库中未记录有该第一标识以及该第一时刻的情况下,两个同时处于备用状态的服务,最先将目标服务的第二标识作为该第一标识,并将当前时刻作为该第一时刻写入目标数据库的服务,可以切换自身服务状态为主用状态。
本领域技术人员公知的是,服务处于备用状态时,其对应的端口是关闭的,所以主服务切换自身状态为备用状态时,需要关闭主服务对应的端口。应该说明的是,在现有技术中,客户端基于域名访问主服务时,由于自身没有存有主服务的IP地址和端口信息,所以客户端会向Zookeeper发送请求,获取到当前的主服务的IP地址和端口信息,进而访问主服务以获得相应的服务内容。
本发明实施例中,客户端基于域名访问主服务时,客户端向网络端广播该域名,网络端基于该域名查找对应的IP地址和端口信息,由于备用服务的端口处于关闭状态,所以网络端仅会向客户端反馈当前主服务对应的IP地址和端口信息,以使客户端基于当前主服务对应的IP地址和端口信息,访问主服务,显然的,在本发明实施例中,客户端不需要做任何修改。
可以理解,本发明实施例利用了数据库锁机制,使用数据库表作为锁来实现目标服务的服务状态的切换,通过锁的租约获取和更新来实现主备服务的切换。本领域技术人员公知的是,利用SELECT FOR UPDATE(一种手工加锁语句)对数据库表上锁,对同一数据库表进行操作的事务,必须等到其他事务数据COMMIT(释放)后才能执行。
该数据库表就是存储有该第一时刻和第一标识的数据库表,每个租约就是从第一时刻开始后的第一预设时长内所对应的时间段。该目标数据库可以是常见的数据库,例如mysql数据库。
例如在数据库中建立一个数据库表,具体的数据库表结构如下表1所示。
表1
Filed Type Null Key Default
service_name varchar(36) NO PRI NULL
active_server_ip_port varchar(36) YES NULL
last_active_time datetime YES NULL
表中,“service_name”表示服务内容的名称,其对应的数据类型为“varchar(字符型)”,最大字符长度为36个字节,服务内容的名称不可以为空,而且,服务内容的名称为数据库表的主键,服务内容的名称对应的默认值不可以为空;“active_server_ip_port”表示上述第一标识,在本发明实施例中可以以主服务的IP地址以及端口地址来表示,第一标识对应的数据类型为“varchar(字符型)”,最大字符长度为36个字节,第一标识可以为空,而且,第一标识对应的默认值可以为空;“last_active_time”表示上述第一时刻,其对应的数据类型“datetime(日期时间)”,第一时刻可以为空,第一时刻对应的默认值可以为空。
此外,主备切换模式中,对应于同一服务内容的两个服务不允许在同一时段内都处于主用状态。故:
在现有技术中,为了防止原来的主服务是假死,例如原来的主服务只是与Zookeeper的网络连接出现问题,但原来的主服务仍可以对客户端提供服务内容,此时新切换的主服务需要对原来的主服务进行fence(栅栏)操作,确保其不再提供服务内容,保证两个服务中仅存在一个主服务。为了保证对应于同一服务内容的两个服务中最多仅存一个主服务,需要两个服务分别所处的设备之间通信连接,以保证fence操作可以实现。
而在本发明实施例中,对应同一服务内容的两个服务分别所在的设备之间不需要相互通信连接,就可以保证针对于同一服务内容的两个服务不会在同一时段内都处于主用状态,同时减少此通信连接所消耗的资源。
由以上可见,本发明实施例提供的方案中,首先读取目标数据库中记录的第一标识以及第一时刻;然后判断第一标识与目标服务的第二标识是否相同;如果相同,判定目标服务的服务状态为主用状态,并判断第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换目标服务的服务状态为备用状态;若为否,更新第一时刻为当前时刻;如果不相同,判定目标服务的服务状态为备用状态,并判断第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换目标服务的服务状态为主用状态,更新第一时刻为当前时刻,更新第一标识为第二标识。
与现有技术相比,本发明实施例提供的方案中,对应于同一服务内容的两个服务可以将该目标数据库中存储的第一标识与自身对应的第二标识做对比,进而判断该目标服务当前是主服务还是备用服务;当该目标服务处于主用状态时,如果第一时刻与当前时刻的时间差超过第一预设时长,则该目标服务切换自身状态为备用状态,当该目标服务处于备用状态时,如果第一时刻与当前时刻的时间差超过第二预设时长,则该目标服务切换自身状态为主用状态;目标服务的服务状态的切换可以依据目标数据库中的相应记录,并不需要额外部署Zookeeper,也就不需要专门的管理员维护Zookeeper,减少了额外部署Zookeeper所消耗的资源;而且,对应同一服务内容的两个服务分别所在的设备之间不需要相互通信连接,就可以保证针对于同一服务内容的两个服务不会在同一时段内都处于主用状态,同时减少此通信连接所消耗的资源。
相对于图1,如图2所示的一种服务状态切换方法的第二种流程示意图,该方法还包括:
S201:根据本地记录的服务状态,判断目标服务的服务状态是否为主用状态。
可以理解的是,配置有目标服务的设备可以很容易获知当前服务是否处于主用状态,例如,该目标服务对应的端口是否处于打开状态,或者,其上的目标服务是否向外提供服务内容,该设备基于自身的记录的信息判断该目标服务是否处于主用状态可以通过现有技术实现,本发明实施例在此不再赘述。
在本发明实施例中,上述根据本地记录的服务状态,判断目标服务的服务状态是否为主用状态,可以是:
根据预设的第一时间周期和本地记录的服务状态,周期性地判断目标服务的服务状态是否为主用状态;其中,所述第一时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第一时间周期之和。
应该说明的是,此处的第一时间周期的作用与前述第二时间周期的作用相同,并且,优选的,该第一时间周期与第二时间周期设置为相同的值。
另外,上述第一时间周期以及第二时间周期可以基于实际情况设计,在设备性能允许的情况下,应将第一时间周期以及第二时间周期设置的尽可能小。
若S201的判断结果为否,执行S101:读取目标数据库中记录的第一标识以及第一时刻。
若S201的判断结果为是,执行S202:判断目标服务与目标数据库的网络连接是否断开。
如果目标服务与目标数据库的网络连接断开,执行S203:对比本地记录的第二时刻与当前时刻,若该第二时刻与当前时刻的时间差超过第一预设时长,切换目标服务的服务状态为备用状态。其中,该第二时刻为处于主用状态的服务的当前服务周期起始时刻。
应该区别的是,该第二时刻记录在目标服务中,即记录在目标服务所在的设备中;而第一时刻则记录在该目标数据库中。另外,应该强调的是,在本发明的所有实施例中,第一时刻以及第二时刻都可以采用时间戳,前述更新第一时刻为当前时刻可以直接是更新对应的时间戳。
显然的,如果目标服务作为主服务与目标数据库的网络连接断开,也就无法成功执行步骤S101,也就必然不能执行更新第一时刻的操作,目标服务始终处于主服务状态,而目标服务相对的另一个服务必然会在某一时刻切换为主服务,出现两个服务均处于主用状态的现象。
但是,在本发明实施例中,可以通过步骤S201~S203将主服务切换为备用服务,所以,步骤S201~S203的操作可以避免在主服务与目标数据库网络断开的情况下,出现两个服务均处于主用状态的现象。
如果目标服务与目标数据库的网络连接未断开,执行上述述读取目标数据库中记录的第一标识以及第一时刻(S101)。
为了保证第二时刻的及时更新,上述判断第一时刻与当前时刻的时间差是否超过第一预设时长的判断结果为否,或者上述判断第一时刻与当前时刻的时间差是否超过第二预设时长的判断结果为是时,该方法还包括:
S105:更新该第二时刻为当前时刻。
例如:目标服务x当前处于主用状态,前述第一时间周期和第二时间周期均为1分钟,第一时刻为2015年9与3日7时11分5秒,显然,第二时刻也是2015年9与3日7时11分5秒,假设第一预设时长是2分钟,如果目标服务x在2015年9与3日7时11分50秒与目标数据库的网络连接断开,即表示此后目标服务x所在的设备无法读取该目标数据库;但是,目标服务x所在的设备可以判断该第二时刻与当前时刻的时间差是否超过第一预设时长,假设目标服务x所在的设备在2015年9与3日7时13分45秒执行了操作:判断该第二时刻与当前时刻的时间差是否超过第一预设时长,此时,由于判断该第二时刻与当前时刻的时间差超过第一预设时长,所以会切换目标服务x的服务状态为备用状态。
由以上可见,本发明实施例提供的方案中,首先读取目标数据库中记录的第一标识以及第一时刻;然后判断第一标识与目标服务的第二标识是否相同;如果相同,判定目标服务的服务状态为主用状态,并判断第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换目标服务的服务状态为备用状态;若为否,更新第一时刻为当前时刻;如果不相同,判定目标服务的服务状态为备用状态,并判断第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换目标服务的服务状态为主用状态,更新第一时刻为当前时刻,更新第一标识为第二标识。
与现有技术相比,本发明实施例提供的方案中,对应于同一服务内容的两个服务可以将该目标数据库中存储的第一标识与自身对应的第二标识做对比,进而判断该目标服务当前是主服务还是备用服务;当该目标服务处于主用状态时,如果第一时刻与当前时刻的时间差超过第一预设时长,则该目标服务切换自身状态为备用状态,当该目标服务处于备用状态时,如果第一时刻与当前时刻的时间差超过第二预设时长,则该目标服务切换自身状态为主用状态;目标服务的服务状态的切换可以依据目标数据库中的相应记录,并不需要额外部署Zookeeper,也就不需要专门的管理员维护Zookeeper,减少了额外部署Zookeeper所消耗的资源;而且,对应同一服务内容的两个服务分别所在的设备之间不需要相互通信连接,就可以保证针对于同一服务内容的两个服务不会在同一时段内都处于主用状态,同时减少此通信连接所消耗的资源。
下面通过一个具体的实例,来对本发明进行简单介绍。
对于一个名称为“ABCDEFG”的服务内容,其对应有两个服务:x和y,服务x的对应的第二标识为154.125.2.8:7777,服务y的对应的第二标识为154.125.2.136:8888,前述第一时间周期和第二时间周期均为30秒,第一预设时长为1分钟,第二预设时长为1分30秒。
最开始的时候,服务x和y均处于备用状态,而后,服务x在目标数据库中建立主键为“ABCDEFG”数据库表,并将自身的第二标识为154.125.2.8:7777和当前时刻2015年9月30日14时1分55秒分别作为第一标识和第一时刻写入到目标数据库中,此时服务x变为主服务。
假设在2015年9月30日14时20分55秒时,服务x将第一时刻更新为2015年9月30日14时20分55秒,而后始终不能成功更新第一时刻,那么至2015年9月30日14时21分55秒后,如在2015年9月30日14时22分05秒时,服务x再次读取数据库,此时由于第一时刻与当前时刻的时间差已超过第一预设时长,则切换服务x的服务状态为备用状态。
同时,在至2015年9月30日14时22分25秒后,如在2015年9月30日14时22分30秒时,服务y基于服务内容的名称“ABCDEFG”找到对应的数据库表,然后读取其中的第一时刻和第一标识,由于第一时刻与当前时刻的时间差已超过第二预设时长,则切换服务y的服务状态为主用状态。
可以理解,对应于同一服务内容的两个服务均应用本发明提供的方案时,可以自动实现主备切换。
相应于图1,如图4所示,本发明实施例提供的一种服务状态切换装置,应用于配置有目标服务的设备,所述装置包括:
读取模块110,用于读取目标数据库中记录的第一标识以及第一时刻,其中,所述第一标识为处于主用状态的服务的标识,所述第一时刻为处于主用状态的服务的当前服务周期起始时刻;
第一判断模块120,用于判断所述第一标识与所述目标服务的第二标识是否相同;
第一处理模块130,用于在所述第一判断模块的判断结果为是的情况下,判定所述目标服务的服务状态为主用状态,并判断所述第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换所述目标服务的服务状态为备用状态;若为否,更新所述第一时刻为当前时刻;
第二处理模块140,用于在所述第一判断模块的判断结果为否的情况下,判定所述目标服务的服务状态为备用状态,并判断所述第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换所述目标服务的服务状态为主用状态,更新所述第一时刻为当前时刻,更新所述第一标识为所述第二标识,其中,所述第二预设时长不小于所述第一预设时长。
在实际应用时,具体的,所述读取模块110,具体用于:
基于预设的第二时间周期,周期性地读取所述目标数据库中记录的第一标识以及第一时刻,其中,所述第二时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第二时间周期之和。
具体的,所述第一标识以及所述第二标识均包括:对应服务的设备的IP地址信息以及端口信息。
另外,应该说明,在所述目标数据库中未记录有主服务的第一标识以及第一时刻时,所述装置还包括写入模块和切换模块(图中未示出):
写入模块,用于将所述第二标识作为所述第一标识,将当前时刻作为所述第一时刻,写入所述目标数据库;
切换模块,用于切换所述目标服务的服务状态为主用状态。
由以上可见,本发明实施例提供的方案中,首先读取目标数据库中记录的第一标识以及第一时刻;然后判断第一标识与目标服务的第二标识是否相同;如果相同,判定目标服务的服务状态为主用状态,并判断第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换目标服务的服务状态为备用状态;若为否,更新第一时刻为当前时刻;如果不相同,判定目标服务的服务状态为备用状态,并判断第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换目标服务的服务状态为主用状态,更新第一时刻为当前时刻,更新第一标识为第二标识。
与现有技术相比,本发明实施例提供的方案中,对应于同一服务内容的两个服务可以将该目标数据库中存储的第一标识与自身对应的第二标识做对比,进而判断该目标服务当前是主服务还是备用服务;当该目标服务处于主用状态时,如果第一时刻与当前时刻的时间差超过第一预设时长,则该目标服务切换自身状态为备用状态,当该目标服务处于备用状态时,如果第一时刻与当前时刻的时间差超过第二预设时长,则该目标服务切换自身状态为主用状态;目标服务的服务状态的切换可以依据目标数据库中的相应记录,并不需要额外部署Zookeeper,也就不需要专门的管理员维护Zookeeper,减少了额外部署Zookeeper所消耗的资源;而且,对应同一服务内容的两个服务分别所在的设备之间不需要相互通信连接,就可以保证针对于同一服务内容的两个服务不会在同一时段内都处于主用状态,同时减少此通信连接所消耗的资源。
相应于图2,如图5所示,本发明实施例提供的一种服务状态切换装置,还可以包括:
第二判断模块210,用于根据本地记录的服务状态,判断所述目标服务的服务状态是否为主用状态。如果第二判断模块210的判断结果为否,直接触发上述读取模块110。
第三判断模块220,用于在所述第二判断模块210的判断结果为是的情况下,判断所述目标服务与所述目标数据库的网络连接是否断开;如果未断开,触发所述读取模块110;如果断开,对比本地记录的第二时刻与当前时刻,若所述第二时刻与当前时刻的时间差超过所述第一预设时长,切换所述目标服务的服务状态为备用状态,其中,所述第二时刻为处于主用状态的服务的当前服务周期起始时刻;
所述第一处理模块130中所述判断所述第一时刻与当前时刻的时间差是否超过第一预设时长的判断结果为否时,或者所述第二处理模块140中所述判断所述第一时刻与当前时刻的时间差是否超过第二预设时长的判断结果为是时,所述装置还包括:
更新模块150,用于更新所述第二时刻为当前时刻。
具体的,所述第二判断模块210,具体用于:
根据预设的第一时间周期和本地记录的服务状态,周期性地判断所述目标服务的服务状态是否为主用状态;其中,所述第一时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第一时间周期之和。
由以上可见,本发明实施例提供的方案中,首先读取目标数据库中记录的第一标识以及第一时刻;然后判断第一标识与目标服务的第二标识是否相同;如果相同,判定目标服务的服务状态为主用状态,并判断第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换目标服务的服务状态为备用状态;若为否,更新第一时刻为当前时刻;如果不相同,判定目标服务的服务状态为备用状态,并判断第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换目标服务的服务状态为主用状态,更新第一时刻为当前时刻,更新第一标识为第二标识。
与现有技术相比,本发明实施例提供的方案中,对应于同一服务内容的两个服务可以将该目标数据库中存储的第一标识与自身对应的第二标识做对比,进而判断该目标服务当前是主服务还是备用服务;当该目标服务处于主用状态时,如果第一时刻与当前时刻的时间差超过第一预设时长,则该目标服务切换自身状态为备用状态,当该目标服务处于备用状态时,如果第一时刻与当前时刻的时间差超过第二预设时长,则该目标服务切换自身状态为主用状态;目标服务的服务状态的切换可以依据目标数据库中的相应记录,并不需要额外部署Zookeeper,也就不需要专门的管理员维护Zookeeper,减少了额外部署Zookeeper所消耗的资源;而且,对应同一服务内容的两个服务分别所在的设备之间不需要相互通信连接,就可以保证针对于同一服务内容的两个服务不会在同一时段内都处于主用状态,同时减少此通信连接所消耗的资源。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:ROM/RAM、磁碟、光盘等。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

Claims (12)

1.一种服务状态切换方法,应用于配置有目标服务的设备,其特征在于,所述方法包括:
读取目标数据库中记录的第一标识以及第一时刻,其中,所述第一标识为处于主用状态的服务的标识,所述第一时刻为处于主用状态的服务的当前服务周期起始时刻;
判断所述第一标识与所述目标服务的第二标识是否相同;
如果相同,判定所述目标服务的服务状态为主用状态,并判断所述第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换所述目标服务的服务状态为备用状态;若为否,更新所述第一时刻为当前时刻;
如果不相同,判定所述目标服务的服务状态为备用状态,并判断所述第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换所述目标服务的服务状态为主用状态,更新所述第一时刻为当前时刻,更新所述第一标识为所述第二标识,其中,所述第二预设时长不小于所述第一预设时长。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据本地记录的服务状态,判断所述目标服务的服务状态是否为主用状态;
若为是,判断所述目标服务与所述目标数据库的网络连接是否断开;
如果断开,对比本地记录的第二时刻与当前时刻,若所述第二时刻与当前时刻的时间差超过所述第一预设时长,切换所述目标服务的服务状态为备用状态,其中,所述第二时刻为处于主用状态的服务的当前服务周期起始时刻;
如果未断开,执行所述读取目标数据库中记录的第一标识以及第一时刻;
所述判断所述第一时刻与当前时刻的时间差是否超过第一预设时长的判断结果为否,或者所述判断所述第一时刻与当前时刻的时间差是否超过第二预设时长的判断结果为是时,所述方法还包括:
更新所述第二时刻为当前时刻。
3.根据权利要求2所述的方法,其特征在于,所述根据本地记录的服务状态,判断所述目标服务的服务状态是否为主用状态,包括:
根据预设的第一时间周期和本地记录的服务状态,周期性地判断所述目标服务的服务状态是否为主用状态;其中,所述第一时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第一时间周期之和。
4.根据权利要求1所述的方法,其特征在于,所述读取目标数据库中记录的第一标识以及第一时刻,包括:
基于预设的第二时间周期,周期性地读取所述目标数据库中记录的第一标识以及第一时刻,其中,所述第二时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第二时间周期之和。
5.根据权利要求1所述的方法,其特征在于,所述目标数据库中未记录有主服务的第一标识以及第一时刻时,所述方法还包括:
将所述第二标识作为所述第一标识,将当前时刻作为所述第一时刻,写入所述目标数据库;
切换所述目标服务的服务状态为主用状态。
6.根据权利要求1~5任一项所述的方法,其特征在于,所述第一标识以及所述第二标识均包括:对应服务的端口信息以及设备的IP地址信息。
7.一种服务状态切换装置,应用于配置有目标服务的设备,其特征在于,所述装置包括:
读取模块,用于读取目标数据库中记录的第一标识以及第一时刻,其中,所述第一标识为处于主用状态的服务的标识,所述第一时刻为处于主用状态的服务的当前服务周期起始时刻;
第一判断模块,用于判断所述第一标识与所述目标服务的第二标识是否相同;
第一处理模块,用于在所述第一判断模块的判断结果为是的情况下,判定所述目标服务的服务状态为主用状态,并判断所述第一时刻与当前时刻的时间差是否超过第一预设时长;若为是,切换所述目标服务的服务状态为备用状态;若为否,更新所述第一时刻为当前时刻;
第二处理模块,用于在所述第一判断模块的判断结果为否的情况下,判定所述目标服务的服务状态为备用状态,并判断所述第一时刻与当前时刻的时间差是否超过第二预设时长;若为是,切换所述目标服务的服务状态为主用状态,更新所述第一时刻为当前时刻,更新所述第一标识为所述第二标识,其中,所述第二预设时长不小于所述第一预设时长。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
第二判断模块,用于根据本地记录的服务状态,判断所述目标服务的服务状态是否为主用状态;
第三判断模块,用于在所述第二判断模块的判断结果为是的情况下,判断所述目标服务与所述目标数据库的网络连接是否断开;如果未断开,触发所述读取模块;如果断开,对比本地记录的第二时刻与当前时刻,若所述第二时刻与当前时刻的时间差超过所述第一预设时长,切换所述目标服务的服务状态为备用状态,其中,所述第二时刻为处于主用状态的服务的当前服务周期起始时刻;
所述第一处理模块中所述判断所述第一时刻与当前时刻的时间差是否超过第一预设时长的判断结果为否时,或者所述第二处理模块中所述判断所述第一时刻与当前时刻的时间差是否超过第二预设时长的判断结果为是时,所述装置还包括:
更新模块,用于更新所述第二时刻为当前时刻。
9.根据权利要求8所述的装置,其特征在于,所述第二判断模块,具体用于:
根据预设的第一时间周期和本地记录的服务状态,周期性地判断所述目标服务的服务状态是否为主用状态;其中,所述第一时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第一时间周期之和。
10.根据权利要求7所述的装置,其特征在于,所述读取模块,具体用于:
基于预设的第二时间周期,周期性地读取所述目标数据库中记录的第一标识以及第一时刻,其中,所述第二时间周期小于所述第一预设时长,所述第二预设时长不小于所述第一预设时长与所述第二时间周期之和。
11.根据权利要求7所述的装置,其特征在于,所述目标数据库中未记录有主服务的第一标识以及第一时刻时,所述装置还包括:
写入模块,用于将所述第二标识作为所述第一标识,将当前时刻作为所述第一时刻,写入所述目标数据库;
切换模块,用于切换所述目标服务的服务状态为主用状态。
12.根据权利要求7~11任一项所述的装置,其特征在于,所述第一标识以及所述第二标识均包括:对应服务的端口信息以及设备的IP地址信息。
CN201610818126.9A 2016-09-12 2016-09-12 一种服务状态切换方法及装置 Active CN107819556B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610818126.9A CN107819556B (zh) 2016-09-12 2016-09-12 一种服务状态切换方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610818126.9A CN107819556B (zh) 2016-09-12 2016-09-12 一种服务状态切换方法及装置

Publications (2)

Publication Number Publication Date
CN107819556A CN107819556A (zh) 2018-03-20
CN107819556B true CN107819556B (zh) 2020-04-28

Family

ID=61601114

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610818126.9A Active CN107819556B (zh) 2016-09-12 2016-09-12 一种服务状态切换方法及装置

Country Status (1)

Country Link
CN (1) CN107819556B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111464580B (zh) * 2019-01-22 2022-04-22 阿里巴巴集团控股有限公司 主服务器的选取方法及装置
CN112866314B (zh) * 2019-11-27 2023-04-07 上海哔哩哔哩科技有限公司 分布式主从***中从节点的切换方法、主节点设备和存储介质
CN112860386A (zh) * 2019-11-27 2021-05-28 上海哔哩哔哩科技有限公司 分布式主从***中节点的切换方法
CN113467953B (zh) * 2021-07-16 2023-08-04 腾讯科技(深圳)有限公司 服务状态的切换方法、装置、服务器及存储介质
CN114328034B (zh) * 2022-03-15 2022-06-03 苏州浪潮智能科技有限公司 一种存储设备的控制方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101888268A (zh) * 2009-05-14 2010-11-17 中兴通讯股份有限公司 一种在以太无源光网络实现主干光纤保护的方法和装置
CN101945036A (zh) * 2009-07-08 2011-01-12 中兴通讯股份有限公司 虚拟路由冗余协议主路由器失效的判断方法及一种路由器
CN103036719A (zh) * 2012-12-12 2013-04-10 北京星网锐捷网络技术有限公司 一种基于主备集群服务器的跨地区服务容灾方法及装置
US8732832B2 (en) * 2010-12-02 2014-05-20 Electronics And Telecommunications Research Institute Routing apparatus and method for detecting server attack and network using the same
CN103825777A (zh) * 2014-02-14 2014-05-28 杭州华三通信技术有限公司 一种dmz服务器切换方法和装置
CN104778102A (zh) * 2015-03-27 2015-07-15 深圳市创梦天地科技有限公司 一种主备切换方法及***

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101888268A (zh) * 2009-05-14 2010-11-17 中兴通讯股份有限公司 一种在以太无源光网络实现主干光纤保护的方法和装置
CN101945036A (zh) * 2009-07-08 2011-01-12 中兴通讯股份有限公司 虚拟路由冗余协议主路由器失效的判断方法及一种路由器
US8732832B2 (en) * 2010-12-02 2014-05-20 Electronics And Telecommunications Research Institute Routing apparatus and method for detecting server attack and network using the same
CN103036719A (zh) * 2012-12-12 2013-04-10 北京星网锐捷网络技术有限公司 一种基于主备集群服务器的跨地区服务容灾方法及装置
CN103825777A (zh) * 2014-02-14 2014-05-28 杭州华三通信技术有限公司 一种dmz服务器切换方法和装置
CN104778102A (zh) * 2015-03-27 2015-07-15 深圳市创梦天地科技有限公司 一种主备切换方法及***

Also Published As

Publication number Publication date
CN107819556A (zh) 2018-03-20

Similar Documents

Publication Publication Date Title
CN107819556B (zh) 一种服务状态切换方法及装置
US20190213175A1 (en) Data migration method and system
WO2017140131A1 (zh) 数据写入、读取方法及装置、云存储***
US7197632B2 (en) Storage system and cluster maintenance
CN108228814B (zh) 数据同步方法及装置
US9146839B2 (en) Method for pre-testing software compatibility and system thereof
US9753954B2 (en) Data node fencing in a distributed file system
CN112463448B (zh) 分布式集群数据库同步方法、装置、设备及存储介质
CN109361525B (zh) 重启分布式部署多服务的方法、装置、控制终端及介质
CN110677280B (zh) 服务节点切换方法、装置、设备及计算机可读存储介质
CN111045745A (zh) 管理配置信息的方法和***
CN110597918A (zh) 一种账户管理方法、装置及计算机可读存储介质
CN102937955A (zh) 一种基于MySQL双存储引擎的内存数据库实现方法
US20120324279A1 (en) Method and Apparatus of Backing up Subversion Repository
CN112865992A (zh) 分布式主从***中主节点的切换方法、装置和计算机设备
CN112860386A (zh) 分布式主从***中节点的切换方法
CN106533751B (zh) 一种sdn控制器集群合并方法及装置
CN110635941A (zh) 一种数据库节点集群故障迁移方法与装置
CN112860787A (zh) 分布式主从***中主节点的切换方法、主节点设备和存储介质
EP2416526B1 (en) Task switching method, server node and cluster system
CN107463390B (zh) 一种软件升级方法及升级服务器
CN107786650B (zh) 一种存储介质和管理策略的同步方法、装置及***
CN112181049B (zh) 集群时间同步方法、装置、***、设备及可读存储介质
CN108009045B (zh) 一种主备数据库故障处理方法及装置
CN111291063B (zh) 主备副本选举方法、***、计算机设备和存储介质

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
GR01 Patent grant
GR01 Patent grant