CN112835748A - 基于scada系统的多中心冗余仲裁方法及系统 - Google Patents

基于scada系统的多中心冗余仲裁方法及系统 Download PDF

Info

Publication number
CN112835748A
CN112835748A CN201911156289.5A CN201911156289A CN112835748A CN 112835748 A CN112835748 A CN 112835748A CN 201911156289 A CN201911156289 A CN 201911156289A CN 112835748 A CN112835748 A CN 112835748A
Authority
CN
China
Prior art keywords
node
message
state
active node
heartbeat
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.)
Pending
Application number
CN201911156289.5A
Other languages
English (en)
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.)
Shanghai Baosight Software Co Ltd
Original Assignee
Shanghai Baosight Software 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 Shanghai Baosight Software Co Ltd filed Critical Shanghai Baosight Software Co Ltd
Priority to CN201911156289.5A priority Critical patent/CN112835748A/zh
Publication of CN112835748A publication Critical patent/CN112835748A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • G06F11/2025Failover techniques using centralised failover control functionality
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • G06F9/526Mutual exclusion algorithms

Abstract

本发明提供了一种基于scada系统的多中心冗余仲裁方法及系统,包括:服务器分配序列号步骤:对服务器会根据优先级分配序列号;主备切换步骤:根据服务器序列号的优先级进行活动节点的切换,选择优先级较高的服务器作为当前的活动节点;同时所有非活动节点会对接收心跳进行计数,延时则向所有节点发起投票请求,进行投票,选择新的活动节点。本发明利用可靠第三方进行仲裁的方式,使得多网卡服务器在冗余网卡下线的时候能够判断出是本机掉线而不是活动节点下线,从而维持非活动节点,避免因为冗余状态的改变导致相关服务通过剩余的网卡对其他服务器的应用产生影响。

Description

基于scada系统的多中心冗余仲裁方法及系统
技术领域
本发明涉及监控系统的冗余判断领域,具体地,涉及一种基于scada系统的多中心冗余仲裁方法及系统。
背景技术
随着工业自动化的高速发展,对生产设备的可靠性提出了更高的要求,人们希望通过提高硬件可靠性的同时,有更加可靠的解决方案来满足对工业通信控制领域中控制系统可靠性的要求,而基于网络控制的冗余热备系统是目前较为可靠的控制系统。此系统多采用两台服务器,一台服务器器作为主服务器器,另外一个作为从台服务器器。正常情况下,由主服务器器执行程序,控制I/O设备,从服务器器不断监测主服务器器状态。如果主服务器器出现故障,从服务器器立即接管对I/O的控制,继续执行程序,从而实现对系统冗余热备控制。
然而基于两台服务器的冗余设计,仍然存在隐患,为了保证通信网络的稳定可靠,人们开发了三个服务器及以上的冗余设计(例如谷歌的ETCD算法),其主服务器的选择,即选主模式如下:
一组服务节点构成一个集群,并且有一个主节点来对外提供服务。当集群初始化,或者主节点挂掉后,需要进行选主。集群中每个节点,任意时刻处于Leader,Follower,Candidate这三个角色之一。选举特点如下:
当集群初始化时候,每个节点都是Follower角色;
集群中存在至多1个有效的主节点,通过心跳与其他节点同步数据;
当Follower在一定时间内没有收到来自主节点的心跳,会将自己角色改变为Candidate,并发起一次选主投票;当收到包括自己在内超过半数节点赞成后,选举成功;当收到票数不足半数选举失败,或者选举超时。若本轮未选出主节点,将进行下一轮选举(出现这种情况,是由于多个节点同时选举,所有节点均为获得过半选票)。
Candidate节点收到来自主节点的信息后,会立即终止选举过程,进入Follower角色。
为了避免陷入选主失败循环,每个节点未收到心跳发起选举的时间是一定范围内的随机值,这样能够避免2个节点同时发起选主。
由于投票制在某些情况下会造成永远选不出的Leader的问题(比如所有服务器间的心跳都不通的情况),因此需要一种新的方法确定Leader服务器。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种基于scada系统的多中心冗余仲裁方法、系统。
根据本发明提供的一种基于scada系统的多中心冗余仲裁方法,包括:
服务器分配序列号步骤:对服务器会根据优先级分配序列号;
主备切换步骤:根据服务器序列号的优先级进行活动节点的切换,选择优先级较高的服务器作为当前的活动节点;同时所有非活动节点会对接收心跳进行计数,延时则向所有节点发起投票请求,进行投票,选择新的活动节点。
优选地,所述服务器序列号从1开始,数字越小优先级越高,优先级越高的服务器在主备切换时越可能成为活动节点;
所有服务器分为四种状态:
活动节点:只有处于活动节点状态的服务器会提供服务;
非活动节点:处于非活动节点状态的服务器不提供服务;
竞选者:当非活动节点发起投票后成为竞选者,根据竞选结果转换成其他状态,不提供服务;
锁定:当非活动节点收到投票请求后变成锁定状态,根据竞选结果转换成其他状态,不提供服务;
所有服务器之间消息类型如下:
心跳消息,用于非活动节点确认活动节点状态;
心跳回复消息,用于活动节点确认是否有心跳冲突;
投票请求消息,用于询问其他节点是否同意这次选举;
投票请求回复消息,用于赞同或者反对某节点发起的选举;
通知消息,用于通知其他节点改变当前认为的活动节点序列号。
优选地,所述主备切换步骤包括:
心跳信息发送步骤:活动节点通过TCP协议向其他所有服务器发送心跳消息,所述心跳信息内容包含当前活动节点的序列号及发送心跳消息的序列号;
节点序列比对步骤:所有节点收到心跳消息后,将消息的活动节点序列号和本地认为的活动节点的序列号进行比对,选择优先级较高的作为当前的活动节点;
节点竞选步骤:所有非活动节点均对接收心跳进行计数,初始为0,若在第一预设时长内没有收到任何心跳消息,则计数加1,当计数达到预设计数阈值时,非活动节点认为活动节点下线,在等待第二预设时长乘以本机序列号的时间后,向所有节点发起投票请求,本机状态置为竞选者;
投票结果等待步骤:在服务器状态变为竞选者之后,等待投票结果,符合预设情况时结束等待;
节点状态变更步骤:服务器在竞选者状态下结束等待后,判断是否收到投票请求回复消息且无任何反对消息:若是,则将状态置为活动节点,进入通知消息发送步骤继续执行;否则,则状态置为非活动节点;
通知消息发送步骤:竞选者成为活动节点之后,向其余所有节点发送通知消息,内容为成为活动节点的序列号;
活动节点状态变更步骤:当活动节点收到通知消息时,会判断本机与消息内容的序列号的优先级,若消息内容更高,则本机状态置为非活动节点并且将认为的活动节点序列号改为消息内容,若本机优先级更高,则状态不改,并且回复通知消息,内容为本机序列号;
竞选者或锁定状态变更步骤:服务器在竞选者或锁定状态下收到通知消息时,将状态置为非活动节点,并将认为的活动节点序号改为消息内容中的序列号;
非活动节点状态变更步骤:服务器在非活动节点状态下收到通知消息时,判断本机的活动节点序列号与通知消息内容中的序列号进行优先级比较,若消息内容中的更高,则将本机的活动节点序列号改为为消息内容,若本机的活动节点优先级更高,则只回复通知消息,内容为本机的活动节点序列号;
计数判断步骤:非活动节点收到投票请求后,判断节点竞选步骤的计数是否达到预设计数阈值,若已经达则回复同意,回复同意后自身状态置为锁定状态;若还未达到,则回复不同意;
锁定状态下收到所有的投票请求都会回复不同意,收到任何心跳消息都会将状态置为非活动节点,根据心跳消息内容改变本地认为的活动节点序列号,若从变为锁定状态开始第四预设时长内未收到任何心跳消息,则状态重新置为非活动节点,心跳计数清零。
优选地,所述投票结果等待步骤:
所述预设情况包括:
有任一节点回复反对投票消息;
回复投票消息数等于所有节点数减1;
等待时间达到了第三预设时长;
收到了更高优先级的节点发来的投票请求,此时回复同意并进入锁定状态;
收到了任一机器的心跳消息;
收到了任一机器的通知消息。
优选地,所述节点状态变更步骤;
服务器在竞选者状态下结束等待后,若收到投票请求回复消息且无任何反对消息,则将状态置为活动节点,进入通知消息发送步骤继续执行;
若收到过投票请求回复消息且有大于等于1个反对消息,则将状态置为非活动节点;
若没有收到任何投票回复则向可靠第三方节点发送ping请求:若ping通,则将状态置为活动节点;若ping不通,状态置为非活动节点。
优选地,所述节点序列比对步骤:
所有节点收到心跳消息后,会首先将消息的活动节点序列号和本地认为的活动节点的序列号进行比对:
如果一致则回复心跳,内容为当前认为的活动节点和发送心跳回复消息的序列号;如果不一致,则比较优先级:若收到的心跳消息中包含的活动节点优先级更高,则改变本地认为的活动节点为心跳消息中的活动节点序列号,之后发送心跳回复消息;
若收到的心跳消息中包含的活动节点优先级更低,则会回复消息请求心跳发送方改变当前认为的活动节点。
根据本发明提供的一种基于scada系统的多中心冗余仲裁系统,包括:
服务器分配序列号模块:对服务器会根据优先级分配序列号;
主备切换模块:根据服务器序列号的优先级进行活动节点的切换,选择优先级较高的服务器作为当前的活动节点;同时所有非活动节点会对接收心跳进行计数,延时则向所有节点发起投票请求,进行投票,选择新的活动节点。
优选地,所述服务器序列号从1开始,数字越小优先级越高,优先级越高的服务器在主备切换时越可能成为活动节点;
所有服务器分为四种状态:
活动节点:只有处于活动节点状态的服务器会提供服务;
非活动节点:处于非活动节点状态的服务器不提供服务;
竞选者:当非活动节点发起投票后成为竞选者,根据竞选结果转换成其他状态,不提供服务;
锁定:当非活动节点收到投票请求后变成锁定状态,根据竞选结果转换成其他状态,不提供服务;
所有服务器之间消息类型如下:
心跳消息,用于非活动节点确认活动节点状态;
心跳回复消息,用于活动节点确认是否有心跳冲突;
投票请求消息,用于询问其他节点是否同意这次选举;
投票请求回复消息,用于赞同或者反对某节点发起的选举;
通知消息,用于通知其他节点改变当前认为的活动节点序列号。
优选地,所述主备切换模块包括:
心跳信息发送模块:活动节点通过TCP协议向其他所有服务器发送心跳消息,所述心跳信息内容包含当前活动节点的序列号及发送心跳消息的序列号;
节点序列比对模块:所有节点收到心跳消息后,将消息的活动节点序列号和本地认为的活动节点的序列号进行比对,选择优先级较高的作为当前的活动节点;
节点竞选模块:所有非活动节点均对接收心跳进行计数,初始为0,若在第一预设时长内没有收到任何心跳消息,则计数加1,当计数达到预设计数阈值时,非活动节点认为活动节点下线,在等待第二预设时长乘以本机序列号的时间后,向所有节点发起投票请求,本机状态置为竞选者;
投票结果等待模块:在服务器状态变为竞选者之后,等待投票结果,符合预设情况时结束等待;
节点状态变更模块:服务器在竞选者状态下结束等待后,判断是否收到投票请求回复消息且无任何反对消息:若是,则将状态置为活动节点,调用通知消息发送模块;否则,则状态置为非活动节点;
通知消息发送模块:竞选者成为活动节点之后,向其余所有节点发送通知消息,内容为成为活动节点的序列号;
活动节点状态变更模块:当活动节点收到通知消息时,会判断本机与消息内容的序列号的优先级,若消息内容更高,则本机状态置为非活动节点并且将认为的活动节点序列号改为消息内容,若本机优先级更高,则状态不改,并且回复通知消息,内容为本机序列号;
竞选者或锁定状态变更模块:服务器在竞选者或锁定状态下收到通知消息时,将状态置为非活动节点,并将认为的活动节点序号改为消息内容中的序列号;
非活动节点状态变更模块:服务器在非活动节点状态下收到通知消息时,判断本机的活动节点序列号与通知消息内容中的序列号进行优先级比较,若消息内容中的更高,则将本机的活动节点序列号改为为消息内容,若本机的活动节点优先级更高,则只回复通知消息,内容为本机的活动节点序列号;
计数判断模块:非活动节点收到投票请求后,判断节点竞选模块的计数是否达到预设计数阈值,若已经达则回复同意,回复同意后自身状态置为锁定状态;若还未达到,则回复不同意;
锁定状态下收到所有的投票请求都会回复不同意,收到任何心跳消息都会将状态置为非活动节点,根据心跳消息内容改变本地认为的活动节点序列号,若从变为锁定状态开始第四预设时长内未收到任何心跳消息,则状态重新置为非活动节点,心跳计数清零。
优选地,所述投票结果等待模块:
所述预设情况包括:
有任一节点回复反对投票消息;
回复投票消息数等于所有节点数减1;
等待时间达到了第三预设时长;
收到了更高优先级的节点发来的投票请求,此时回复同意并进入锁定状态;
收到了任一机器的心跳消息;
收到了任一机器的通知消息;
所述节点状态变更模块;
服务器在竞选者状态下结束等待后,若收到投票请求回复消息且无任何反对消息,则将状态置为活动节点,调用通知消息发送模块;
若收到过投票请求回复消息且有大于等于1个反对消息,则将状态置为非活动节点;
若没有收到任何投票回复则向可靠第三方节点发送ping请求:若ping通,则将状态置为活动节点;若ping不通,状态置为非活动节点;
所述节点序列比对模块:
所有节点收到心跳消息后,会首先将消息的活动节点序列号和本地认为的活动节点的序列号进行比对:
如果一致则回复心跳,内容为当前认为的活动节点和发送心跳回复消息的序列号;如果不一致,则比较优先级:若收到的心跳消息中包含的活动节点优先级更高,则改变本地认为的活动节点为心跳消息中的活动节点序列号,之后发送心跳回复消息;
若收到的心跳消息中包含的活动节点优先级更低,则会回复消息请求心跳发送方改变当前认为的活动节点。
与现有技术相比,本发明具有如下的有益效果:
1、本发明解决了现有技术中由于投票制在某些情况下会造成永远选不出的Leader的问题。
2、本发明的优先级设定可以使得使用者根据服务器性能设置非活动节点变成活动节点的先后顺序,从而能够充分的利用硬件设备的性能。
3、本发明利用可靠第三方进行仲裁的方式,使得多网卡服务器在冗余网卡下线的时候能够判断出是本机掉线而不是活动节点下线,从而维持非活动节点,避免因为冗余状态的改变导致相关服务通过剩余的网卡对其他服务器的应用产生影响。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明提供的非活动节点在心跳不通时的流程示意图。
图2为本发明提供的状态机示意图。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
根据本发明提供的一种基于scada系统的多中心冗余仲裁方法,包括:
服务器分配序列号步骤:对服务器会根据优先级分配序列号;
主备切换步骤:根据服务器序列号的优先级进行活动节点的切换,选择优先级较高的服务器作为当前的活动节点;同时所有非活动节点会对接收心跳进行计数,延时则向所有节点发起投票请求,进行投票,选择新的活动节点。
具体地,所述服务器序列号从1开始,数字越小优先级越高,优先级越高的服务器在主备切换时越可能成为活动节点;
所有服务器分为四种状态:
活动节点:只有处于活动节点状态的服务器会提供服务;
非活动节点:处于非活动节点状态的服务器不提供服务;
竞选者:当非活动节点发起投票后成为竞选者,根据竞选结果转换成其他状态,不提供服务;
锁定:当非活动节点收到投票请求后变成锁定状态,根据竞选结果转换成其他状态,不提供服务;
所有服务器之间消息类型如下:
心跳消息,用于非活动节点确认活动节点状态;
心跳回复消息,用于活动节点确认是否有心跳冲突;
投票请求消息,用于询问其他节点是否同意这次选举;
投票请求回复消息,用于赞同或者反对某节点发起的选举;
通知消息,用于通知其他节点改变当前认为的活动节点序列号。
具体地,所述主备切换步骤包括:
心跳信息发送步骤:活动节点通过TCP协议向其他所有服务器发送心跳消息,所述心跳信息内容包含当前活动节点的序列号及发送心跳消息的序列号;
节点序列比对步骤:所有节点收到心跳消息后,将消息的活动节点序列号和本地认为的活动节点的序列号进行比对,选择优先级较高的作为当前的活动节点;
节点竞选步骤:所有非活动节点均对接收心跳进行计数,初始为0,若在第一预设时长内没有收到任何心跳消息,则计数加1,当计数达到预设计数阈值时,非活动节点认为活动节点下线,在等待第二预设时长乘以本机序列号的时间后,向所有节点发起投票请求,本机状态置为竞选者;
投票结果等待步骤:在服务器状态变为竞选者之后,等待投票结果,符合预设情况时结束等待;
节点状态变更步骤:服务器在竞选者状态下结束等待后,判断是否收到投票请求回复消息且无任何反对消息:若是,则将状态置为活动节点,进入通知消息发送步骤继续执行;否则,则状态置为非活动节点;
通知消息发送步骤:竞选者成为活动节点之后,向其余所有节点发送通知消息,内容为成为活动节点的序列号;
活动节点状态变更步骤:当活动节点收到通知消息时,会判断本机与消息内容的序列号的优先级,若消息内容更高,则本机状态置为非活动节点并且将认为的活动节点序列号改为消息内容,若本机优先级更高,则状态不改,并且回复通知消息,内容为本机序列号;
竞选者或锁定状态变更步骤:服务器在竞选者或锁定状态下收到通知消息时,将状态置为非活动节点,并将认为的活动节点序号改为消息内容中的序列号;
非活动节点状态变更步骤:服务器在非活动节点状态下收到通知消息时,判断本机的活动节点序列号与通知消息内容中的序列号进行优先级比较,若消息内容中的更高,则将本机的活动节点序列号改为为消息内容,若本机的活动节点优先级更高,则只回复通知消息,内容为本机的活动节点序列号;
计数判断步骤:非活动节点收到投票请求后,判断节点竞选步骤的计数是否达到预设计数阈值,若已经达则回复同意,回复同意后自身状态置为锁定状态;若还未达到,则回复不同意;
锁定状态下收到所有的投票请求都会回复不同意,收到任何心跳消息都会将状态置为非活动节点,根据心跳消息内容改变本地认为的活动节点序列号,若从变为锁定状态开始第四预设时长内未收到任何心跳消息,则状态重新置为非活动节点,心跳计数清零。
具体地,所述投票结果等待步骤:
所述预设情况包括:
有任一节点回复反对投票消息;
回复投票消息数等于所有节点数减1;
等待时间达到了第三预设时长;
收到了更高优先级的节点发来的投票请求,此时回复同意并进入锁定状态;
收到了任一机器的心跳消息;
收到了任一机器的通知消息。
具体地,所述节点状态变更步骤;
服务器在竞选者状态下结束等待后,若收到投票请求回复消息且无任何反对消息,则将状态置为活动节点,进入通知消息发送步骤继续执行;
若收到过投票请求回复消息且有大于等于1个反对消息,则将状态置为非活动节点;
若没有收到任何投票回复则向可靠第三方节点发送ping请求:若ping通,则将状态置为活动节点;若ping不通,状态置为非活动节点。
具体地,所述节点序列比对步骤:
所有节点收到心跳消息后,会首先将消息的活动节点序列号和本地认为的活动节点的序列号进行比对:
如果一致则回复心跳,内容为当前认为的活动节点和发送心跳回复消息的序列号;如果不一致,则比较优先级:若收到的心跳消息中包含的活动节点优先级更高,则改变本地认为的活动节点为心跳消息中的活动节点序列号,之后发送心跳回复消息;
若收到的心跳消息中包含的活动节点优先级更低,则会回复消息请求心跳发送方改变当前认为的活动节点。
根据本发明提供的一种基于scada系统的多中心冗余仲裁系统,包括:
服务器分配序列号模块:对服务器会根据优先级分配序列号;
主备切换模块:根据服务器序列号的优先级进行活动节点的切换,选择优先级较高的服务器作为当前的活动节点;同时所有非活动节点会对接收心跳进行计数,延时则向所有节点发起投票请求,进行投票,选择新的活动节点。
具体地,所述服务器序列号从1开始,数字越小优先级越高,优先级越高的服务器在主备切换时越可能成为活动节点;
所有服务器分为四种状态:
活动节点:只有处于活动节点状态的服务器会提供服务;
非活动节点:处于非活动节点状态的服务器不提供服务;
竞选者:当非活动节点发起投票后成为竞选者,根据竞选结果转换成其他状态,不提供服务;
锁定:当非活动节点收到投票请求后变成锁定状态,根据竞选结果转换成其他状态,不提供服务;
所有服务器之间消息类型如下:
心跳消息,用于非活动节点确认活动节点状态;
心跳回复消息,用于活动节点确认是否有心跳冲突;
投票请求消息,用于询问其他节点是否同意这次选举;
投票请求回复消息,用于赞同或者反对某节点发起的选举;
通知消息,用于通知其他节点改变当前认为的活动节点序列号。
具体地,所述主备切换模块包括:
心跳信息发送模块:活动节点通过TCP协议向其他所有服务器发送心跳消息,所述心跳信息内容包含当前活动节点的序列号及发送心跳消息的序列号;
节点序列比对模块:所有节点收到心跳消息后,将消息的活动节点序列号和本地认为的活动节点的序列号进行比对,选择优先级较高的作为当前的活动节点;
节点竞选模块:所有非活动节点均对接收心跳进行计数,初始为0,若在第一预设时长内没有收到任何心跳消息,则计数加1,当计数达到预设计数阈值时,非活动节点认为活动节点下线,在等待第二预设时长乘以本机序列号的时间后,向所有节点发起投票请求,本机状态置为竞选者;
投票结果等待模块:在服务器状态变为竞选者之后,等待投票结果,符合预设情况时结束等待;
节点状态变更模块:服务器在竞选者状态下结束等待后,判断是否收到投票请求回复消息且无任何反对消息:若是,则将状态置为活动节点,调用通知消息发送模块;否则,则状态置为非活动节点;
通知消息发送模块:竞选者成为活动节点之后,向其余所有节点发送通知消息,内容为成为活动节点的序列号;
活动节点状态变更模块:当活动节点收到通知消息时,会判断本机与消息内容的序列号的优先级,若消息内容更高,则本机状态置为非活动节点并且将认为的活动节点序列号改为消息内容,若本机优先级更高,则状态不改,并且回复通知消息,内容为本机序列号;
竞选者或锁定状态变更模块:服务器在竞选者或锁定状态下收到通知消息时,将状态置为非活动节点,并将认为的活动节点序号改为消息内容中的序列号;
非活动节点状态变更模块:服务器在非活动节点状态下收到通知消息时,判断本机的活动节点序列号与通知消息内容中的序列号进行优先级比较,若消息内容中的更高,则将本机的活动节点序列号改为为消息内容,若本机的活动节点优先级更高,则只回复通知消息,内容为本机的活动节点序列号;
计数判断模块:非活动节点收到投票请求后,判断节点竞选模块的计数是否达到预设计数阈值,若已经达则回复同意,回复同意后自身状态置为锁定状态;若还未达到,则回复不同意;
锁定状态下收到所有的投票请求都会回复不同意,收到任何心跳消息都会将状态置为非活动节点,根据心跳消息内容改变本地认为的活动节点序列号,若从变为锁定状态开始第四预设时长内未收到任何心跳消息,则状态重新置为非活动节点,心跳计数清零。
具体地,所述投票结果等待模块:
所述预设情况包括:
有任一节点回复反对投票消息;
回复投票消息数等于所有节点数减1;
等待时间达到了第三预设时长;
收到了更高优先级的节点发来的投票请求,此时回复同意并进入锁定状态;
收到了任一机器的心跳消息;
收到了任一机器的通知消息;
所述节点状态变更模块;
服务器在竞选者状态下结束等待后,若收到投票请求回复消息且无任何反对消息,则将状态置为活动节点,调用通知消息发送模块;
若收到过投票请求回复消息且有大于等于1个反对消息,则将状态置为非活动节点;
若没有收到任何投票回复则向可靠第三方节点发送ping请求:若ping通,则将状态置为活动节点;若ping不通,状态置为非活动节点;
所述节点序列比对模块:
所有节点收到心跳消息后,会首先将消息的活动节点序列号和本地认为的活动节点的序列号进行比对:
如果一致则回复心跳,内容为当前认为的活动节点和发送心跳回复消息的序列号;如果不一致,则比较优先级:若收到的心跳消息中包含的活动节点优先级更高,则改变本地认为的活动节点为心跳消息中的活动节点序列号,之后发送心跳回复消息;
若收到的心跳消息中包含的活动节点优先级更低,则会回复消息请求心跳发送方改变当前认为的活动节点。
下面通过优选例,对本发明进行更为具体地说明。
优选例1:
为达到秒级主备切换速度,保证至少一台服务器处于活动状态,且同时能按照优先级切换,本发明采用以下实现方式。
所有服务器只会处于四种状态,活动节点(Leader):只有处于活动节点的服务器会提供服务;非活动节点(Follower):不提供服务;竞选者(Candidate):当非活动节点发起投票后成为竞选者,根据竞选结果转换成其他状态,不提供服务;锁定(Lock):当非活动节点收到投票请求后变成锁定状态,根据竞选结果转换成其他状态,不提供服务。
所有服务器会根据优先级分配序列号,从1开始,数字越小优先级越高,优先级越高的服务器在主备切换时越有可能成为活动节点。
所有服务器之间消息类型如下:心跳消息,主要用于非活动节点确认活动节点状态;心跳回复消息,主要用于活动节点确认是否有心跳冲突;投票请求消息,询问其他节点是否同意这次选举;投票请求回复消息,赞同或者反对某节点发起的选举;通知消息,主要用于通知其他节点改变当前认为的活动节点序列号。
活动节点会通过TCP协议向其他所有服务器发送心跳消息,内容包含当前活动节点的序列号及发送心跳消息的序列号。
所有节点收到心跳消息后,会首先将消息的活动节点序列号和本地认为的活动节点的序列号进行比对,如果一致则回复心跳,内容为当前认为的活动节点和发送心跳回复消息的序列号。如果不一致,则比较优先级,当收到的心跳消息中包含的活动节点优先级更高,则改变本地认为的的活动节点为心跳消息中的活动节点序列号,之后发送心跳回复消息。当收到的心跳消息中包含的活动节点优先级更低,则会回复消息请求心跳发送方改变当前认为的活动节点。
所有非活动节点都会对接收心跳进行计数,若200ms内没有收到任何心跳消息,则计数加1,当计数达到5时,非活动节点认为活动节点下线,在等待50ms乘以本机序列号的时间后,向所有节点发起投票请求,本机状态置为竞选者。如图1所示,为本发明提供的非活动节点在心跳不通时的流程示意图。
如图2所示,为本发明提供的状态机示意图。
在成为竞选者之后等待投票结果,符合以下情况时结束等待:有任一节点回复反对投票消息;回复投票消息数等于所有节点数减1;等待时间达到了500ms;收到了更高优先级的节点发来的投票请求(此时回复同意并进入锁定状态);收到了任一机器的心跳消息;收到了任一机器的通知消息。
在竞选者状态下结束等待后,若收到过投票回复且无任何反对消息,则将状态置为活动节点,若收到过投票回复且有大于等于1个反对消息,则将状态置为非活动节点,若没有收到任何投票回复则向可靠第三方节点发送ping请求,若ping通,状态置为活动节点,若ping不通,状态置为非活动节点。Ping是操作系统中的一个命令,用于检测目标机器和本机的网络是否连通,ping请求就是调用此命令,检测与第三方的网络情况。
在竞选者成为活动节点之后,会向其余所有节点发送通知消息,内容为成为活动节点的序列号。
当活动节点收到通知消息时,会判断本机与消息内容的序列号的优先级,若消息内容更高,则本机状态置为非活动节点并且将认为的活动节点序列号改为消息内容,若本机优先级更高,则状态不改,并且回复通知消息,内容为本机序列号。
当在竞选者或锁定状态下收到通知消息时,将状态置为非活动节点,并将认为的活动节点序号改为消息内容中的序列号。
当在非活动节点状态下收到通知消息时,会判断本机认为的活动节点序列号与通知消息内容中的序列号进行优先级比较,若消息内容中的更高,则将本机认为的活动节点序列号改为为消息内容,若本机认为的活动节点优先级更高,则只回复通知消息,内容为本机认为的活动节点序列号。
非活动节点收到投票请求后,判断计数是否达到5,若已经达则回复同意,若还未达到5则回复不同意,回复同意后自身状态置为锁定。
锁定状态下收到所有的投票请求都会回复不同意,收到任何心跳消息都会将状态置为非活动节点,根据心跳消息内容改变本地认为的活动节点序列号,若从变为锁定状态开始200ms未收到任何心跳消息,则状态重新置为非活动节点,心跳计数清零。
在本申请的描述中,需要理解的是,术语“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本申请和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本申请的限制。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。

Claims (10)

1.一种基于scada系统的多中心冗余仲裁方法,其特征在于,包括:
服务器分配序列号步骤:对服务器会根据优先级分配序列号;
主备切换步骤:根据服务器序列号的优先级进行活动节点的切换,选择优先级较高的服务器作为当前的活动节点;同时所有非活动节点会对接收心跳进行计数,延时则向所有节点发起投票请求,进行投票,选择新的活动节点。
2.根据权利要求1所述的基于scada系统的多中心冗余仲裁方法,其特征在于,所述服务器序列号从1开始,数字越小优先级越高,优先级越高的服务器在主备切换时越可能成为活动节点;
所有服务器分为四种状态:
活动节点:只有处于活动节点状态的服务器会提供服务;
非活动节点:处于非活动节点状态的服务器不提供服务;
竞选者:当非活动节点发起投票后成为竞选者,根据竞选结果转换成其他状态,不提供服务;
锁定:当非活动节点收到投票请求后变成锁定状态,根据竞选结果转换成其他状态,不提供服务;
所有服务器之间消息类型如下:
心跳消息,用于非活动节点确认活动节点状态;
心跳回复消息,用于活动节点确认是否有心跳冲突;
投票请求消息,用于询问其他节点是否同意这次选举;
投票请求回复消息,用于赞同或者反对某节点发起的选举;
通知消息,用于通知其他节点改变当前认为的活动节点序列号。
3.根据权利要求2所述的基于scada系统的多中心冗余仲裁方法,其特征在于,所述主备切换步骤包括:
心跳信息发送步骤:活动节点通过TCP协议向其他所有服务器发送心跳消息,所述心跳信息内容包含当前活动节点的序列号及发送心跳消息的序列号;
节点序列比对步骤:所有节点收到心跳消息后,将消息的活动节点序列号和本地认为的活动节点的序列号进行比对,选择优先级较高的作为当前的活动节点;
节点竞选步骤:所有非活动节点均对接收心跳进行计数,初始为0,若在第一预设时长内没有收到任何心跳消息,则计数加1,当计数达到预设计数阈值时,非活动节点认为活动节点下线,在等待第二预设时长乘以本机序列号的时间后,向所有节点发起投票请求,本机状态置为竞选者;
投票结果等待步骤:在服务器状态变为竞选者之后,等待投票结果,符合预设情况时结束等待;
节点状态变更步骤:服务器在竞选者状态下结束等待后,判断是否收到投票请求回复消息且无任何反对消息:若是,则将状态置为活动节点,进入通知消息发送步骤继续执行;否则,则状态置为非活动节点;
通知消息发送步骤:竞选者成为活动节点之后,向其余所有节点发送通知消息,内容为成为活动节点的序列号;
活动节点状态变更步骤:当活动节点收到通知消息时,会判断本机与消息内容的序列号的优先级,若消息内容更高,则本机状态置为非活动节点并且将认为的活动节点序列号改为消息内容,若本机优先级更高,则状态不改,并且回复通知消息,内容为本机序列号;
竞选者或锁定状态变更步骤:服务器在竞选者或锁定状态下收到通知消息时,将状态置为非活动节点,并将认为的活动节点序号改为消息内容中的序列号;
非活动节点状态变更步骤:服务器在非活动节点状态下收到通知消息时,判断本机的活动节点序列号与通知消息内容中的序列号进行优先级比较,若消息内容中的更高,则将本机的活动节点序列号改为为消息内容,若本机的活动节点优先级更高,则只回复通知消息,内容为本机的活动节点序列号;
计数判断步骤:非活动节点收到投票请求后,判断节点竞选步骤的计数是否达到预设计数阈值,若已经达则回复同意,回复同意后自身状态置为锁定状态;若还未达到,则回复不同意;
锁定状态下收到所有的投票请求都会回复不同意,收到任何心跳消息都会将状态置为非活动节点,根据心跳消息内容改变本地认为的活动节点序列号,若从变为锁定状态开始第四预设时长内未收到任何心跳消息,则状态重新置为非活动节点,心跳计数清零。
4.根据权利要求3所述的基于scada系统的多中心冗余仲裁方法,其特征在于,所述投票结果等待步骤:
所述预设情况包括:
有任一节点回复反对投票消息;
回复投票消息数等于所有节点数减1;
等待时间达到了第三预设时长;
收到了更高优先级的节点发来的投票请求,此时回复同意并进入锁定状态;
收到了任一机器的心跳消息;
收到了任一机器的通知消息。
5.根据权利要求3所述的基于scada系统的多中心冗余仲裁方法,其特征在于,所述节点状态变更步骤;
服务器在竞选者状态下结束等待后,若收到投票请求回复消息且无任何反对消息,则将状态置为活动节点,进入通知消息发送步骤继续执行;
若收到过投票请求回复消息且有大于等于1个反对消息,则将状态置为非活动节点;
若没有收到任何投票回复则向可靠第三方节点发送ping请求:若ping通,则将状态置为活动节点;若ping不通,状态置为非活动节点。
6.根据权利要求3所述的一种基于scada系统的多中心冗余仲裁方法,其特征在于,所述节点序列比对步骤:
所有节点收到心跳消息后,会首先将消息的活动节点序列号和本地认为的活动节点的序列号进行比对:
如果一致则回复心跳,内容为当前认为的活动节点和发送心跳回复消息的序列号;如果不一致,则比较优先级:若收到的心跳消息中包含的活动节点优先级更高,则改变本地认为的活动节点为心跳消息中的活动节点序列号,之后发送心跳回复消息;
若收到的心跳消息中包含的活动节点优先级更低,则会回复消息请求心跳发送方改变当前认为的活动节点。
7.一种基于scada系统的多中心冗余仲裁系统,其特征在于,包括:
服务器分配序列号模块:对服务器会根据优先级分配序列号;
主备切换模块:根据服务器序列号的优先级进行活动节点的切换,选择优先级较高的服务器作为当前的活动节点;同时所有非活动节点会对接收心跳进行计数,延时则向所有节点发起投票请求,进行投票,选择新的活动节点。
8.根据权利要求7所述的基于scada系统的多中心冗余仲裁系统,其特征在于,所述服务器序列号从1开始,数字越小优先级越高,优先级越高的服务器在主备切换时越可能成为活动节点;
所有服务器分为四种状态:
活动节点:只有处于活动节点状态的服务器会提供服务;
非活动节点:处于非活动节点状态的服务器不提供服务;
竞选者:当非活动节点发起投票后成为竞选者,根据竞选结果转换成其他状态,不提供服务;
锁定:当非活动节点收到投票请求后变成锁定状态,根据竞选结果转换成其他状态,不提供服务;
所有服务器之间消息类型如下:
心跳消息,用于非活动节点确认活动节点状态;
心跳回复消息,用于活动节点确认是否有心跳冲突;
投票请求消息,用于询问其他节点是否同意这次选举;
投票请求回复消息,用于赞同或者反对某节点发起的选举;
通知消息,用于通知其他节点改变当前认为的活动节点序列号。
9.根据权利要求8所述的基于scada系统的多中心冗余仲裁系统,其特征在于,所述主备切换模块包括:
心跳信息发送模块:活动节点通过TCP协议向其他所有服务器发送心跳消息,所述心跳信息内容包含当前活动节点的序列号及发送心跳消息的序列号;
节点序列比对模块:所有节点收到心跳消息后,将消息的活动节点序列号和本地认为的活动节点的序列号进行比对,选择优先级较高的作为当前的活动节点;
节点竞选模块:所有非活动节点均对接收心跳进行计数,初始为0,若在第一预设时长内没有收到任何心跳消息,则计数加1,当计数达到预设计数阈值时,非活动节点认为活动节点下线,在等待第二预设时长乘以本机序列号的时间后,向所有节点发起投票请求,本机状态置为竞选者;
投票结果等待模块:在服务器状态变为竞选者之后,等待投票结果,符合预设情况时结束等待;
节点状态变更模块:服务器在竞选者状态下结束等待后,判断是否收到投票请求回复消息且无任何反对消息:若是,则将状态置为活动节点,调用通知消息发送模块;否则,则状态置为非活动节点;
通知消息发送模块:竞选者成为活动节点之后,向其余所有节点发送通知消息,内容为成为活动节点的序列号;
活动节点状态变更模块:当活动节点收到通知消息时,会判断本机与消息内容的序列号的优先级,若消息内容更高,则本机状态置为非活动节点并且将认为的活动节点序列号改为消息内容,若本机优先级更高,则状态不改,并且回复通知消息,内容为本机序列号;
竞选者或锁定状态变更模块:服务器在竞选者或锁定状态下收到通知消息时,将状态置为非活动节点,并将认为的活动节点序号改为消息内容中的序列号;
非活动节点状态变更模块:服务器在非活动节点状态下收到通知消息时,判断本机的活动节点序列号与通知消息内容中的序列号进行优先级比较,若消息内容中的更高,则将本机的活动节点序列号改为为消息内容,若本机的活动节点优先级更高,则只回复通知消息,内容为本机的活动节点序列号;
计数判断模块:非活动节点收到投票请求后,判断节点竞选模块的计数是否达到预设计数阈值,若已经达则回复同意,回复同意后自身状态置为锁定状态;若还未达到,则回复不同意;
锁定状态下收到所有的投票请求都会回复不同意,收到任何心跳消息都会将状态置为非活动节点,根据心跳消息内容改变本地认为的活动节点序列号,若从变为锁定状态开始第四预设时长内未收到任何心跳消息,则状态重新置为非活动节点,心跳计数清零。
10.根据权利要求9所述的基于scada系统的多中心冗余仲裁系统,其特征在于,所述投票结果等待模块:
所述预设情况包括:
有任一节点回复反对投票消息;
回复投票消息数等于所有节点数减1;
等待时间达到了第三预设时长;
收到了更高优先级的节点发来的投票请求,此时回复同意并进入锁定状态;
收到了任一机器的心跳消息;
收到了任一机器的通知消息;
所述节点状态变更模块;
服务器在竞选者状态下结束等待后,若收到投票请求回复消息且无任何反对消息,则将状态置为活动节点,调用通知消息发送模块;
若收到过投票请求回复消息且有大于等于1个反对消息,则将状态置为非活动节点;
若没有收到任何投票回复则向可靠第三方节点发送ping请求:若ping通,则将状态置为活动节点;若ping不通,状态置为非活动节点;
所述节点序列比对模块:
所有节点收到心跳消息后,会首先将消息的活动节点序列号和本地认为的活动节点的序列号进行比对:
如果一致则回复心跳,内容为当前认为的活动节点和发送心跳回复消息的序列号;如果不一致,则比较优先级:若收到的心跳消息中包含的活动节点优先级更高,则改变本地认为的活动节点为心跳消息中的活动节点序列号,之后发送心跳回复消息;
若收到的心跳消息中包含的活动节点优先级更低,则会回复消息请求心跳发送方改变当前认为的活动节点。
CN201911156289.5A 2019-11-22 2019-11-22 基于scada系统的多中心冗余仲裁方法及系统 Pending CN112835748A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911156289.5A CN112835748A (zh) 2019-11-22 2019-11-22 基于scada系统的多中心冗余仲裁方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911156289.5A CN112835748A (zh) 2019-11-22 2019-11-22 基于scada系统的多中心冗余仲裁方法及系统

Publications (1)

Publication Number Publication Date
CN112835748A true CN112835748A (zh) 2021-05-25

Family

ID=75922510

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911156289.5A Pending CN112835748A (zh) 2019-11-22 2019-11-22 基于scada系统的多中心冗余仲裁方法及系统

Country Status (1)

Country Link
CN (1) CN112835748A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113726573A (zh) * 2021-08-31 2021-11-30 通号城市轨道交通技术有限公司 冗余网络通信方法、装置、电子设备及存储介质
CN114363111A (zh) * 2022-03-21 2022-04-15 深圳市高斯宝电气技术有限公司 一种基于can协议的通信电源设备并机主从关系的确定方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104933132A (zh) * 2015-06-12 2015-09-23 广州巨杉软件开发有限公司 基于操作序列号的分布式数据库有权重选举方法
WO2016150066A1 (zh) * 2015-03-25 2016-09-29 中兴通讯股份有限公司 一种主节点选举方法、装置及存储系统
CN106789197A (zh) * 2016-12-07 2017-05-31 高新兴科技集团股份有限公司 一种集群选举方法及系统
CN107105032A (zh) * 2017-04-20 2017-08-29 腾讯科技(深圳)有限公司 节点设备运行方法及节点设备
CN109507866A (zh) * 2018-12-07 2019-03-22 天津津航计算技术研究所 一种基于网络地址漂移技术的双机冗余系统及方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016150066A1 (zh) * 2015-03-25 2016-09-29 中兴通讯股份有限公司 一种主节点选举方法、装置及存储系统
CN104933132A (zh) * 2015-06-12 2015-09-23 广州巨杉软件开发有限公司 基于操作序列号的分布式数据库有权重选举方法
CN106789197A (zh) * 2016-12-07 2017-05-31 高新兴科技集团股份有限公司 一种集群选举方法及系统
CN107105032A (zh) * 2017-04-20 2017-08-29 腾讯科技(深圳)有限公司 节点设备运行方法及节点设备
CN109507866A (zh) * 2018-12-07 2019-03-22 天津津航计算技术研究所 一种基于网络地址漂移技术的双机冗余系统及方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113726573A (zh) * 2021-08-31 2021-11-30 通号城市轨道交通技术有限公司 冗余网络通信方法、装置、电子设备及存储介质
CN113726573B (zh) * 2021-08-31 2024-01-05 通号城市轨道交通技术有限公司 冗余网络通信方法、装置、电子设备及存储介质
CN114363111A (zh) * 2022-03-21 2022-04-15 深圳市高斯宝电气技术有限公司 一种基于can协议的通信电源设备并机主从关系的确定方法

Similar Documents

Publication Publication Date Title
WO2016150066A1 (zh) 一种主节点选举方法、装置及存储系统
CN106330475B (zh) 一种通信系统中管理主备节点的方法和装置及高可用集群
CN102916825A (zh) 一种双机热备系统的管理设备、管理方法及双机热备系统
JPH0683221B2 (ja) データ通信方法及び通信システム
CN108259227B (zh) 一种双机热备联锁系统的数据同步方法
CN112835748A (zh) 基于scada系统的多中心冗余仲裁方法及系统
CN114268532A (zh) 一种基于Raft协议的竞选方法、分布式系统及存储介质
US9942107B2 (en) Computer system including plural computer nodes synchronized with each other
WO2021068919A1 (zh) 基于pbft算法改进的单节点异常主动恢复方法、系统、设备和介质
CN109639512B (zh) 一种vts多传感器信息综合处理系统的热备份方法
CN106331081B (zh) 一种信息同步方法及装置
CN111581287A (zh) 一种数据库管理的控制方法、系统和存储介质
CN114866365A (zh) 仲裁机选举方法、装置、智能设备及计算机可读存储介质
CN116055563A (zh) 基于Raft协议的任务调度方法、系统、电子设备和介质
CN113867915A (zh) 任务调度方法、电子设备及存储介质
CN112865995B (zh) 分布式主从系统
CN111865659A (zh) 主备控制器的切换方法和装置、控制器、网络设备
CN115190052B (zh) 一种长连接的管理方法、系统和控制单元
CN117480067A (zh) 电动车辆充电管理和客户端设备
CN109450757A (zh) 一种CANopen主站的启动方法及其统筹管理器
CN109245979A (zh) 一种CANopen主从站可靠性控制方法及其统筹管理器
Lee et al. The fast bully algorithm: For electing a coordinator process in distributed systems
CN111510336A (zh) 一种网络设备状态管理方法及装置
CN107153594B (zh) 分布式数据库系统的ha组件选主方法及其系统
CN116991591B (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