本发明涉及计算机领域,具体涉及一种备份系统的切换方法。
背景技术:
涉及电力、通信、监控等关键设施系统中,服务的可靠性和连续性至关重要。这些重要系统都需要一定的热备冗余机制,即当服务提供设备出现异常时,能够保证这些系统的正常运行,防止出现灾难性后果。
双机热备系统指两台相同的服务提供设备同时工作,一台为主服务提供设备,简称主机,向外部提供服务;另外一台为备用服务提供设备,简称备机。主机发生故障时,备机接替主机,向外部提供服务。
如何进行主备切换是双机热备系统的核心问题。目前,双机热备系统中的主备切换方法,或是依赖“中心节点”对主备身份进行仲裁和控制;或是使用设备硬件标识预设主备身份优先级,当设备更换以后需要重新配置参数,不利于后期的更新和维护。
技术实现要素:
为了克服现有技术的不足,本发明提供一种双机热备系统中的主备切换方法,不需要中心节点和不需要预设主备身份优先级。
本发明解决其技术问题所采用的技术方案包括以下步骤:
(1)双机分别自检,采集自检信息,包括本机是否健康、主备机身份和id号;
(2)采用心跳包机制,双机互相发送心跳包,心跳包中包含自检信息;
(3)双机分别保存本机自检信息和最后一次收到的他机自检信息;
(4)双机分别检测id号,若双机id号冲突,则进行id号协商;
若双机主备机身份冲突,则进行主备机身份协商;
若主机发现本机不健康、他机健康,则将自身降级为备机,向他机发送升级主机指令;他机收到升级主机指令后,升级为主机;
若备机预设时限内未收到他机的心跳包,则升级为主机。
所述的id号协商,具体包括:
双机分别维护自身的id号和id号冲突数,id号冲突数在软件启动时初始化为随机数,id号仅有两个有效值:id_a(默认id)和id_b;
监测到id号冲突后,本机将id号冲突报文发送给他机,id号冲突报文中包含id号和id号冲突数;
收到id号冲突报文后,若本机的id号冲突数小于他机的id号冲突数,将本机的id号由id_a更改为id_b;若本机的id号冲突数大于他机的id号冲突数,发送id号冲突报文给他机;若本机的id号冲突数等于他机的id号冲突数,重新生成本机的id号冲突数,并发送id号冲突报文给他机。
所述的主备机身份协商,具体包括:
本机与他机均健康时,若本机id号为默认id,则更改本机的主备机身份;
本机不健康,他机健康时,若本机为主机,则本机降级为备机;若本机为备机,本机主备机身份不变;
本机健康,他机不健康时,若本机为备机,则本机升级为主机;若本机为主机,本机主备机身份不变。
本发明的有益效果是:能够实现双机热备系统中的主备切换功能,且具有不需要中心节点和不需要预设主备身份优先级的优点。
附图说明
图1是实施例1所提供的双机热备系统中的主备切换方法的流程示意图;
图2是实施例2所提供的双机热备系统中的主备切换方法中,id号协商的流程示意图;
图3是实施例3所提供的双机热备系统中的主备切换方法中,主备机身份协商的流程示意图。
具体实施方式
下面结合附图和实施例对本发明进一步说明,本发明包括但不仅限于下述实施例。
本发明提供一种双机热备系统中的主备切换方法,包括以下步骤:
双机分别自检,采集自检信息,该信息包括是否健康、主备机身份、id号,其中主备机身份和id号从配置文件中读取;
采用心跳包机制,双机互相发送心跳包,心跳包中包含自检信息;
双机分别保存本机自检信息和最后一次收到的他机自检信息;
若双机id号冲突,则进行id号协商;
若双机主备机身份冲突,则进行主备机身份协商;
若主机发现本机不健康、他机健康,则将自身降级为备机,向他机发送升级主机指令;他机收到升级主机指令后,升级为主机;
若备机预设时限内未收到他机的心跳包,则升级为主机。
所述的id号协商,具体包括:
双机分别维护自身的id号和id号冲突数,id号冲突数在软件启动时初始化为随机数,id号仅有两个有效值:id_a(默认id)和id_b;
监测到id号冲突后,本机将id号冲突报文发送给他机,id号冲突报文中包含id号和id号冲突数;
收到id号冲突报文后,若本机的id号冲突数小于他机的id号冲突数,将本机的id号由id_a更改为id_b;若本机的id号冲突数大于他机的id号冲突数,发送id号冲突报文给他机;若本机的id号冲突数等于他机的id号冲突数,重新生成本机的id号冲突数,并发送id号冲突报文给他机。
所述的主备机身份协商,具体包括:
本机与他机均健康时,若本机id号为默认id,则更改本机的主备机身份;
本机不健康,他机健康时,若本机为主机,则本机降级为备机;若本机为备机,本机主备机身份不变;
本机健康,他机不健康时,若本机为备机,则本机升级为主机;若本机为主机,本机主备机身份不变。
实施例1
图1是本发明实施例1所提供的双机热备系统中的主备切换方法的流程示意图。参见图1所示,本发明实施例所提供的主备切换方法包括:
步骤101:双机分别自检,采集自检信息,该信息包括是否健康、主备机身份、id号,其中主备机身份和id号从配置文件中读取;
步骤102:采用心跳包机制,双机互相发送心跳包,心跳包中包含自检信息;
步骤103:双机分别保存本机自检信息和最后一次收到的他机自检信息;
步骤104:若双机id号冲突,则进行id号协商;
步骤105:若双机主备机身份冲突,则进行主备机身份协商;
步骤106:若主机发现本机不健康、他机健康,则将自身降级为备机,向他机发送升级主机指令;他机收到升级主机指令后,升级为主机;
步骤107:若备机预设时限内未收到他机的心跳包,则升级为主机。
本发明提供的主备切换方法,相比现有技术而言,不依赖于中心节点,双机的地位平等,增强了整个系统的健壮性;通过id号协商和主备机身份协商的方法解决了现有技术需要预设优先级的问题。
本实施例中,双机均接收相同外部设备(双机以外)的数据输入,并通过数据输出的方式向外部提供服务。双机分别自检,采集是否健康、主备机身份、id号等信息:是否健康信息综合本机状态和与外部设备链路状态得出;主备机身份和id号信息从配置文件中读取,这两个信息不会因为设备掉电重启而丢失。双机采用心跳包机制,互相发送自检信息。双机分别保存本机的自检信息和最后一次收到的他机自检信息。如果发现id号冲突,进行id号协商:id号用作当双机主备机身份冲突且健康程度相当时的主备机身份确定。如果发现主备机身份冲突,则进行主备机身份协商。若主机发现本机不健康、他机健康,则将自身降级为备机,向他机发送升级主机指令;他机收到升级主机指令后,升级为主机。若备机预设时限内未收到他机的心跳包,则升级为主机。
本实施例中,若id号冲突和主备机身份冲突同时发生,优先处理id号冲突,进行id号协商,id号协商完毕后,再处理主备机身份冲突,进行主备机身份协商。
本实施例正常运行的前提是双机之间通讯正常。
实施例2
图2是本发明实施例2所提供的双机热备系统中的主备切换方法中,id号协商的流程示意图,参见图2所示,具体包括:
步骤201:双机分别维护自身的id号和id号冲突数,id号冲突数在软件启动时初始化为随机数,id号仅有两个有效值:id_a(默认id)和id_b,;
步骤202:监测到id号冲突后,本机将id号冲突报文发送给他机,id号冲突报文中包含id号和id号冲突数;
步骤203:收到id号冲突报文后,若本机的id号冲突数小于他机的id号冲突数,将本机的id号由id_a更改为id_b;若本机的id号冲突数大于他机的id号冲突数,发送id号冲突报文给他机;若本机的id号冲突数等于他机的id号冲突数,重新生成本机的id号冲突数,并发送id号冲突报文给他机。
本实施例中,双机各自维护id号和id号冲突数:id号仅有两个有效值,id_a和id_b,id_a为默认的id号,一般情况下,id号协商仅在系统初次运行或者更换双机后执行;id号冲突数是一个随机数,设备启动后会自动生成,用来进行id号协商。监测到id号冲突后,本机将id号冲突报文发送给他机,id号冲突报文中包含id号和id号冲突数。接收到id号冲突报文后,本机通过以下流程解决id号冲突:若本机的id号冲突数小于他机的id号冲突数,将本机的id号由id_a更改为id_b;若本机的id号冲突数大于他机的id号冲突数,发送id号冲突报文给他机;若本机的id号冲突数等于他机的id号冲突数,重新生成本机的id号冲突数,并发送id号冲突报文给他机。
例如:id号协商过程(假定双机分别为机器1和机器2):
机器1id为5,id号冲突数为10001;
机器2id为5,id号冲突数为10002;
机器1和机器2均会监测到id号冲突,发送id号冲突报文给对方;
机器1收到来自机器2的id号冲突报文后,发现自身的id号冲突数10001小于机器2的id号冲突数10002,将自身的id由5改成6;
机器2收到来自机器1的id号冲突报文后,发现自身的id号冲突数10002大于机器2的id号冲突数10001,自身id不变;
至此,机器1和机器2的id号冲突已解决。
实施例3
图3是本发明实施例3所提供的双机热备系统中的主备切换方法中,主备机身份协商的流程示意图,参见图3所示,具体包括:
步骤301:本机与他机均健康时,若本机id号为默认id,则更改本机的主备机身份;
步骤302:本机不健康,他机健康时,若本机为主机,则本机降级为备机;若本机为备机,本机主备机身份不变;
步骤303:本机健康,他机不健康时,若本机为备机,则本机升级为主机;若本机为主机,本机主备机身份不变。
本实施例中的主备机身份协商,本机根据本机和他机的健康与否确定自身的主备机身份。
例如:主备机身份协商过程(假定双机分别为机器1和机器2):
机器1id为5(默认id),主备机身份为主机,健康;
机器2id为6,主备机身份为主机,健康;
机器1和机器2均会监测到主备机身份冲突;
机器1发现自身和机器2均健康,且自身id为5,是默认id,则更改自身主备机身份为备机;
机器1发现自身和机器2均健康,且自身id为6,不是默认id,则不做任何操作;
至此,机器1和机器2的主备机身份冲突已解决。