一种双网冗余消息总线交叉故障下的消息传输方法
技术领域
本发明涉及一种应用于电力调度自动化系统架构上,可以实现双网冗余消息总线交叉故障状态下消息传输的实现方法,属于电力调度自动化领域。
背景技术
在调度自动化系统中,消息总线作为一个重要的通信中间件模块,实现了系统在不同进程之间、不同机器之间互相传递消息与数据的功能。消息总线扮演着一种消息路由的角色,通过对底层的通信机制进行封装,上层应用程序不需要考虑消息如何被转发,只需要向消息总线发出消息,消息总线拥有一套完备的路由机制来决定消息传输方向。消息总线通常提供多种消息传输模式,如点对点的消息传输模式和点对多点的发布订阅模式。
调度自动化系统对安全性、稳定性和可靠性要求较高,因此在系统构建时通常采用双网冗余配置。系统中的服务器节点及工作站节点一般都配置两块网卡,分别连接到两个网络中。这样,当某个节点的一块网卡或连接到网络中的一条线路出现故障时,可由另一块网卡接管与系统中其它节点的通信工作。调度自动化系统中的消息总线需要对双网冗余功能提供支持,要求在一个网络故障的情况下,消息总线能够从另一个网络发送和接收消息。
调度自动化系统对消息总线有着更一般的依赖与需求,它要求消息总线在任意一些节点故障或退出后,不能影响剩余节点之间消息通信,所以调度自动化系统中的消息总线一般采用对等设计,即系统中每个节点都作为消息总线的代理节点,能够转发消息。
在调度自动化系统中,可能出现网络的交叉故障。如系统中的两个节点,其中节点A的一号网卡出现故障,节点B的二号网卡出现故障,为了使节点A与节点B在这种情况下能够互相通信,通常采用互连线路使系统中的一、二号网络相连,并配合网卡聚合或网址漂移技术来解决。以网卡聚合为例,操作系统把本机节点上两块网卡聚合,形成一块虚拟网卡,并配置IP地址,在出现交叉故障时,两个节点的虚拟网卡把数据发送接收任务委派给没有故障的网卡,这两块物理网卡经过两个网络互连线路传送消息。但是,一、二号网络互连并配合网卡聚合或网址漂移技术存在一些限制:首先要求两个网络在物理上必须互连,然而在一些特殊的情况下,该条件不能满足,如变电站系统;其次,在交叉故障情况下,两个节点未发生故障的网卡需要使用同一网段的IP地址才能互相通信,网卡聚合与网址漂移技术实现在交叉故障情况下将通信的两块网卡IP地址切换至同一网段的功能。
发明内容
本发明的目的是提供一种更通用的双网冗余消息总线交叉故障情况下的消息传输实现方法。
为了解决上述技术问题,本发明披露了双网冗余消息总线交叉故障下的消息传输方法,为一种交互心跳与邻接信息动态生成消息转发表进行交叉故障的节点之间消息转发的机制,其特征在于,包括以下步骤:
1)消息总线以对等方式实现,所有运行消息总线节点没有主从之分,不存在核心节点;所有节点具有同等能力,都可以作为消息代理服务器,发起通信会话,进行消息转发。任意节点的退出,不影响剩余节点的消息传递;
2) 每个节点的两块网卡使用独立的IP地址,其中所有节点一号网的IP可以互相连通,但不要求必须在同一网段;所有节点的二号网的IP也可以互相连通,同时不要求必须在同一网段,即节点间的互连可以经过三层路由实现;
3)每个运行消息总线的节点都部署节点状态跟踪监视程序,实现对系统中节点的活动状态、网卡状态以及订阅状态的监测,该程序通过定期在两块网卡上向其它节点发送心跳报文;
心跳报文内容包括:发送该心跳报文的系统ID、节点ID、节点名以及该节点对消息订阅信息;
4)每个运行消息总线的节点接收网络上其它节点发送的心跳报文,对报文进行解析,并在本地共享内存中存储网络中其它节点运行情况,最终形成节点直接邻接表,存储在共享内存中;
在本地共享内存中存储的网络中其它节点运行情况包括:系统名、节点名、节点在线情况、节点网卡名、节点网卡连通情况、节点消息通道订阅情况,其中系统名用于区分网络上同时运行的不同系统;
5) 每个运行消息总线的节点定期交换能够直接到达的邻接信息,并且在邻接信息变化时,发送邻接变化报文通知其它节点更新;每个节点接收邻接状态信息,在共享内存中建立节点间接邻接表;
6)应用程序发送消息时,首先将消息交付给本机的后台消息总线服务,后台的消息总线服务具有缓存重发机制,实现向需要该消息的节点转发;
7) 本机的消息总线根据直接邻接表与间接邻接表,形成消息节点转发表。在向其它节点转发消息时,查找消息节点转发表,如果能够直接连通,就将消息交付给能够直接连通的对端节点;如果存在交叉故障,本机无法与对端节点直接交互信息,则根据消息节点转发表,按照定义的优先级,选取一个中间代理节点;
8)本机节点将需要转发的消息及目标节点信息发送给中间代理节点,由中间代理节点将消息转发给目标节点。
所述消息总线节点之间交互两类报文,一类是心跳报文,一种是链路直接连接状态报文。
消息总线节点在共享内存中存储以下三张表结构:直接邻接表、间接邻接表、消息节点转发表。
步骤7)中,在交叉故障状态下,转发节点存在优先级,由优先级最高的节点转发,如果优先级最高的节点出现故障,则由次一优先级节点转发,并且发送的消息报文带有防止重复接收的计数。
步骤2)中,一、二号网为双网级联状态或非级联状态,并且使用消息总线的节点的网络经过三层网络相连。
本发明所达到的有益效果:
采用本发明的方法,解决了以前双网冗余消息总线在处理交叉故障问题时面临的物理网络交叉连接以及IP地址配置的限制,满足电力调度自动化系统双网冗余及容灾备用的需求。同时,符合现有的网络传输结构, 构建起来更加灵活方便。
附图说明
图1为本发明的调度自动化系统网络架构示意图;
图2为本发明的交叉故障状态下消息转发示意图;
图3为本发明的数据流程示意图。
具体实施方式
下面是本发明的一个优选实施例,包括了采用本发明的方法实现的一个具体的调度自动化系统中双网冗余消息总线在交叉故障状态下消息传输过程。本发明的其它的特征、目的和优点也可以从实施例的说明中看出。自动化系统网络架构如图1所示,系统中包括一系列的应用服务器及维护工作站,这些服务器或工作站节点都配置两块网卡,分别与A、B网的交换机相连,A、B网采用独立的工作网段,并且两台交换机之间互相不级联。
这些服务器和工作站之间需要交互消息数据,所有的节点运行消息总线服务。在配置时,这些节点需要配置在同一个系统中。消息总线的后台心跳与链路管理模块在所有节点间交互节点信息与链路邻接信息,每个使用消息总线的节点在共享内存中形成直接邻接表与间接邻接表信息,并根据这两张邻接表信息,形成消息转发表,数据转发流程如图3所示。
在网络状态都正常时,服务器A要发送消息给服务器B时,因为两台服务器之间的A网与B网都能够直接连通,消息总线通过检查消息转发表获得这一信息,于是消息直接由服务器A交付给服务器B。 系统出现单点故障时,如服务器A的B网无法与交换机连通,但是服务器A与服务器B仍然可以通过A网直接互通,消息仍然由服务器A通过A网直接交付给服务器B,服务器B上的消息总线接收到服务器发送来的消息,根据进程对消息的需求情况,将消息发送给需要该消息的进程。
若服务器A到B网交换机无法连通,服务器B到A网交换机也无法连通,如图2所示,即服务器A与服务器B之间出现交叉故障,服务器A与服务器B不能够直接相连,但是服务器C仍然与服务器A和B都能连通,C服务器能够收到服务器A与服务器B的心跳报文,所以直接邻接表中服务器A与服务器B都处于Active状态,服务器C与服务器A交换直接邻接信息,服务器A判断出与服务器B经过服务器C间接相邻,并更换消息节点转发表。当有消息需要从服务器A发送给服务器B时,把消息交给服务器C转发,经过图上虚线路径,发送给服务器B。
本发明按照优选实施例进行了说明,应当理解上述实施例不以任何形式限定本发明,凡采用等同替换或等效变换的形式所获得的技术方案,均落在本发明的保护范围之内。