王 飞,曹桂均
(中国铁道科学研究院 通信信号研究所,北京 100081)
计算机系统的广泛应用极大地提高了整个社会的生产效率,但与此同时,对计算机系统的依赖也产生了极大的风险,一些内部和外部的故障都会导致系统的破坏、数据的丢失。因此,尽可能地提高系统的可用性就显得尤为重要。双机热备是高可用系统中一个重要的机制,利用故障点转移的方式保障业务的不间断运行是提高系统可用性的一个行之有效的方法。
双机热备使用2台主机作为一个整体共同执行同一服务,其中一台为主用机,另一台为备用机。在正常情况下,同一时刻只有主用机进行逻辑运算、完成与其它设备的信息交换,对外提供服务等任务。双机互相监视对方的运行情况。当主用机出现故障或由于维修等原因退出,不能支持系统正常工作时,运行在主用机上的双机软件会通知备用机,或者通过运行在备用机上双机软件的诊断将自身激活,从而在不需要人工干预的情况下,完成对主用机工作的接管,继续支持关键应用服务。其业务的恢复不是在原服务器,而是在备用服务器,有效防止系统崩溃给企业带来的巨大损失。双机热备示意图如图1所示。
图1 双机热备示意图
从心跳通信的角度分析,双机热备系统的故障分为2种:(1)非心跳通信故障,例如:应用程序故障,网络故障等。主用机发生非心跳通信故障,可以通过心跳通道将自身的故障信息发送给备用机,备用机分析主用机的心跳信息并结合自身的工作状态决定本身是否升为主用机;(2)心跳通信故障,例如,服务器宕机等故障。主用机心跳随着服务器的宕机而失效,备用机一旦检测到主用机心跳失效,双机软件便会将备用机激活,升为主用机。
双机热备系统中双机之间通过心跳线建立通信连接,互发心跳。当联系双机的心跳线断开,本来为一整体、动作协调的系统,就会分裂为2个独立的个体。由于相互之间失去了联系,都以为是对方发生了故障,所以备用机会本能地升为主用机;主用机由于本身工作状态正常,则继续保持主用,从而出现2台机器同时主用的现象,这种现象称为“双主”。双主的出现不符合故障-安全原则,是一种不安全的工作状态。在这种情况下,可能会出现以下问题:
(1)双机争夺系统的共享资源,导致双机都不能正常工作。
(2)双机同时工作,导致系统逻辑混乱或数据损坏。
因此,传统的双机热备系统可以防护系统出现的单点故障,即使同时发生多点故障,系统可以安全地降为备用机。但是,当心跳线发生故障时,传统的双机热备系统没有提供安全、可靠的防护措施,一旦出现双主,将会严重影响系统的正常运行,给系统带来破坏性的影响。
传统的方案是增加心跳线的数量。此方案在商用双机热备系统中有一定范围的应用。冗余的心跳线使系统的双机通信更加强壮,减小心跳故障出现的概率。但冗余的心跳线不能保证心跳通道的绝对安全,依然存在全部断开的风险。并且增加心跳线意味着增加系统的硬件成本,不仅会占用系统的接口资源,还存在成为潜在的故障点,降低系统的可维护性等问题。
另一种方案是启用“磁盘锁”。正在服务的一方锁住共享磁盘,“双主”发生时,让对方完全“抢不走”共享磁盘资源。但使用“磁盘锁”也会有一个不小的问题,如果占用共享盘的一方不主动“解锁”,另一方就永远得不到共享磁盘。现实中假如主用机突然死机或崩溃,就不可能执行解锁命令,备用机也就接管不了共享资源和应用服务,此方案存在降低系统的可用性的风险。
本文针对双机热备系统中存在的“双主”问题,在不改变原有系统结构的前提下,提出一种全新的,完全从软件上解决该问题的方案。
双机热备系统的网络为了提高可靠性,一般设计为双网,分别称为A网、B网。双网通过交换机接到局域网中,所以传递双机心跳信息的物理通道,除了心跳线,还可以把机器的A/B网通道也纳入其中。这样双机内部心跳信息的通道就为心跳线和“A/B网”冗余状态。只要这3个通道有一个能收到对方的心跳,即可视为心跳正常。
系统在多通道冗余的情况下,仍然会出现心跳失效的情况,这时考虑借助于双机之外的第三方。这里采用的是设置远程检测点。分别选取双网上的一台设备或设备的某个端口作为该通道的远程检测点。当某个网络通道心跳失效,这时双机通过该网络通道检查设置的远程检测点,若检测不到则表明断点就出在本端,不仅心跳,对外服务的本端网络链路也断了;若可以检测得到则说明本端连接正常,断点出现在对方。设置远程检测点这种方式简单可靠,其结果可以作为本机主备状态切换的重要参考条件。
为进一步提高双机系统在故障情况下的可用性,双网通道在收到的心跳上加入时间戳。一旦网络通道收不到对方心跳,则记录最后一包心跳的时间戳,若该网络通道的心跳恢复则该时间戳失效。通过比较时间戳可使主机判断自身工作状态。利用双网的双机热备系统示意图如图2所示。
图2 利用双网的双机热备系统示意图
双机热备软件是构建双机热备系统的核心,实现了对整个系统工作状态的监测、心跳信息的收发和逻辑运算等功能。对于双主防护功能的实现主要是依靠双机软件完成的。
双机在通过心跳线互发心跳进行通信的同时,也通过网络通道,将检测到的本机的应用状态(应用程序状态与双网状态)、当前主备状态等信息采用UDP单播的方式给它机发一个自定义格式的心跳。心跳线上的信息与网络上的心跳信息可以相同也可以不同,由心跳线的类型决定。
在心跳有效的情况下,主机上的双机软件通过心跳信息获取对方的工作状态,双机的主备用完全依靠双机软件逻辑判断的结果。在心跳无效的情况下,双机软件并不会简单的认为对方宕机,而是根据心跳的时间戳,选择最后收到心跳的网络,然后去检查对应此网络的远程检测点,若可以检测到,说明对方宕机下线,本机正常在线,可以作为主用机运行。若检测不到则说明本机的网络断了,即使对方宕机,本机也不能正常工作,应工作在备用。双主防护方案如图3所示。
图3 双主机方案示意图
为了验证本方案的有效性,需要对本方案进行测试。本测试模仿系统在实际运行过程中可能发生的故障,重点测试双机热备系统在心跳失效情况下的双机切换功能,并将传统的双机热备方案加入对比测试,测试结果对比见表1。
表1 测试结果对比
测试表明,本方案能够在发生各种故障的情况下进行正确的切换。由于该方案拥有2个冗余的心跳通道,心跳线的单点故障不会对系统造成影响。并且在心跳线故障的情况下,系统发生多点故障,该方案可最大限度地保障系统的可用性。
本方案借助于系统网络和设置远程检测点,拥有更高的可靠性和安全性;不需要增加硬件,不需要对系统结构进行调整,对现有双机热备系统有较强的兼容性。经过测试表明,本方案较好地解决了心跳线故障导致系统出现的双主现象,并且在出现多点故障的情况下,依然可以保障系统正常工作或安全的降为双备机运行,最大限度保证了系统的安全性、可用性和可靠性。同时,增强了双机热备系统在复杂、恶劣环境下的可维护性。
[1] 刘朝英,李 萍. 中国铁路分散自律调度集中[M].北京:中国铁道出版社,2009.
[2] 曹桂均,张 华. 动车基地调度集中系统研究[J].中国铁路,2012(4):55-59.
[3] 吴汶麒. 国外铁路信号新技术[M].北京:中国铁道出版社,2000.