1 高可用性技术
高可用性是指可持续的、具有一致性和完整性的数据访问。高可用性系统通过提高服务器可靠性、磁盘可靠性、应用程序可靠性达到高可用性的要求。可以通过共享磁盘阵列提高磁盘可靠性,使用冗余网络提高网络可靠性,使用合作的服务器提高服务器可靠性,通过应用程序的探测与有效恢复提高应用程序的可靠性。
路由器作为计算机网络的核心设备,其高可用性至关重要。在硬件方面,路由器要有一个很好的体系结构及各种冗余非常完善,关键部件如路由引擎和交换矩阵要有冗余。在软件方面,其自身要强壮,另外在遇到更换硬件、系统升级、增加板卡和改变链路等网络调整时,软件要有能力保证整个网络业务不受局部调整的影响,让整个网络体现出非常高的可用性,保证路由引擎进行不丢包的切换。主引擎发生故障,切换到副引擎时不丢包,平滑切换,否则硬件的冗余就没有意义,是假冗余。另外还要保证平稳重启。当路由重启时,由此产生的路由重新计算和网络范围的路由更新会消耗掉处理资源,并有可能出现黑洞或瞬时转发循环形式的非预期网络行为。而平稳重启会避免这种情况的发生。
根据以上要求,本文提出了一种适用于T比特路由器的主控软件容错系统设计方案。采用硬件冗余与软件容错相结合、热备与双工相结合的工作方式代替传统的容错热备份方案,并根据该方案设计实现了高可用性模块。测试结果表明,采用该设计方案的主控软件系统具有很好的容错性能和故障恢复能力,能够满足T比特路由器对主控软件系统的高可用性要求。
2 基于高性能T比特路由器的主控软件容错系统设计
2.1 主控软件容错系统设计中的基本问题
基于容错需求的考虑,当主控系统出现软硬件故障时路由器仍需要正常工作,故硬件配置采用1+1冗余设计,配备主用(Active)和备用(Standby)两块主控板,构建双主控热备容错系统。当主用主控板发生故障,系统自动进行主备切换,由备用主控板接替主用板工作,保证业务的正常运行。当主用模块发生严重故障或主用复位时,将触发自动倒换方式,及时倒换到备用板。这种1+1冗余设计可扩展到N+1冗余设计。
整个切换过程对用户透明,需要考虑的重点和实现的难点在于主备系统间数据库一致性问题、平滑切换技术的实现和故障监测机制。
(1)数据库一致性问题
路由器主控板上记录了系统实时运行数据,因此正常工作中需要进行实时的系统数据备份,以保证主用和备用上的数据库一致,否则在主备切换时,备用不能正常接替主用。针对该问题,在高可用性模块的设计中,采用了一种双工与热备相结合的不完全热备设计。需要备份的数据主要是系统数据库中的路由表项和转发表表项。
双工与热备相结合的不完全设计是指:双主控板上都运行心跳探测程序用于故障探测,主用主控板上运行路由器正常工作所需要的所有应用程序,而备用主控板上运行部分重要应用程序。这些程序正常工作时与主用主控板上的程序有相同的输入数据,但处理结果并不输出。这样的设计保证了路由器出现故障进行切换时低耗时,减轻了需要备份的数据量,既不像完全双工工作方式那样浪费资源,又避免了热备工作方式的很多不足,性能明显优于纯粹的热备或者双工方式。
数据备份有冷备份和热备份两种。冷备份是在数据库已经正常关闭的情况下,进行完整数据库的备份,是最快和最安全的方法。冷备份的最大问题是必须在数据库关闭的情况下进行,当数据库处于打开状态时,执行数据库文件系统备份是无效的。
热备份是在数据库运行时,采用archivelog mode方式备份数据。有双机镜像和共享磁盘阵列两种方案。双机镜像方案可选择将主数据库服务器上的表、文件、数据库或全部内容通过专用连接通道镜像到备用服务器上,优点是简单、便宜,缺点是降低系统资源。共享磁盘阵列方案为两台主机共用一个磁盘阵列,优点是不降低系统性能,为目前较为流行的主流技术,但要求磁盘阵列具有较高的可靠性。
对于运行在骨干网中的路由器,冷备份显然不适用。因为路由器运行过程中不可能定时关闭数据库来备份数据,更不可能在路由器出现故障时再备份数据。因此采用热备份。鉴于要备份的数据量不大,不必采取双机镜像和共享磁盘阵列方式。在本设计中采用了一种新型的数据热备份方式:将需要备份的数据以日志文件的形式存储,通过TCP传输方法将文件转化为数据流由主用主控板备份到备用主控板上,实现实时备份。面向连接的TCP传输可靠且速度快,丢失文件的概率极小。
(2)切换延时问题
路由器主控系统出现故障时,要能够对用户透明地进行主备切换,就要实现系统间的无缝切换,减少切换过程中的时延并降低数据丢失率。无缝切换是一种完美的切换,包括快速切换和平滑切换两方面。快速切换意味着低延迟,平滑切换就是低的数据包丢失率,无缝切换是两者的结合,即低延迟和低丢失率。对于快速切换,要求在单板掉链之前完成切换过程,使备用主控板接替主用主控板的工作,保证路由器中的各个流程正常工作不受主控故障的影响,使网络正常运行。对于平滑切换,有两点要求:一是切换时,主备用主控板上的数据库是一致的;二是在主备用数据库一致的基础上,备用主控板启用后能在规定的时间内完成备份数据的导入。所谓规定的时间,也包含在切换的总时间内,切换时间=发现故障时间+启用切换时间+故障接管时间。
(3)故障监测机制
系统中的两块主控板,经过主备协商后确定主备地位,一块为Master状态,控制整个系统;另一块为Slave状态,处于备份状态。两块主控板之间通过UDP传输心跳报文交互自身的状态数据,以识别主控的软/硬件故障。路由器正常运行时,主用和备用主控板之间定时发送keepalive报文进行心跳探测,报文内容中包含了自身的状态信息。备用主控板在定时器到期前未收到来自主用主控板的keepalive报文就认为主用主控板失效,进入主备切换,备用主控板成为新主用,自动接管原主用主控板的服务程序,继续提供服务。原主用主控板从故障中恢复或被更换后,会重新发送协商报文,与新主用主控板取得联系,成为新备用主控板,而不必再进行一次切换,节省了系统资源。
2.2 高可用性模块的设计及实现
在主控软件容错系统设计中,采用了两块主控板挂载八块单板。两块主控板之间通过面向无连接的UDP通信机制交互心跳数据,通过面向连接的TCP通信机制传输备份文件数据流;主控板与单板之间通过高速以太网连接。图1给出了该系统的总体结构图。
按照功能的不同,在设计方案中将高可用性模块划分为三个子模块:AS通信模块、AS系统监控模块和AS keepalive模块,如图2所示。
AS通信模块负责主控系统上高可用性模块与系统数据维护模块(SYSDATA)和板间通信模块(BDCOM)间的通信、数据备份和TCP传输。
AS监控模块负责主控软件各个系统进程的监控、维护、管理等核心功能。当某个软件占CPU使用百分比过大时,则认为该主控软件运行不正常,根据该软件的运行规则和重要性选择恢复策略,重启该进程或者进入主备切换。
AS keepalive模块负责两块主控板之间的主备协商,确定主控板的主备地位;在路由器正常运行过程中,定时向对方主控板发送keepalive报文进行心跳探测;针对网络拥塞可能导致的丢包以及CPU排队处理多线程时可能超时处理keepalive报文造成的主用主控板“假死”现象,采用再协商(Re-negotiation)技术,在超时收不到对方主控板发送的keepalive报文时不直接认为对方主控板故障,而是进行一次退避,与对方发送协商报文进行再协商。再协商与初始化过程中的主备协商不完全相同。Re-negotiation技术与通常采用的单纯固定不变的心跳探测技术相比,可以更好地提高系统心跳环境的适应能力和稳定性,更好地保证系统的高可用性。
2.3 AS系统设计的特点
(1)整个AS系统的设计采用层次与模块相结合的结构模型,克服了软、硬件分离和脱节的问题,提高系统的灵活性和可移植性。模型的每一层均可以看作是一个相对独立的系统。在每一层中又按照系统功能,划分不同的功能模块。各个模块之间独立工作,完成不同的功能,降低故障的概率。
(2)硬软件相结合实现主控板的热备份容错。
(3)采用热备与双工相结合的设计,系统切换时间短,平均切换时间为0.8秒。
(4)切换过程中对用户透明,无需重新启动主控板,对故障板支持热插拔,方便维修。
(5)系统工作效率高。整个系统中,各个子模块分工合作,数据备份及传输由AS通信模块通过消息队列和TCP传输完成。主控系统软件的监控和部分软件的出错重启由AS监控模块完成。AS keepalive模块用UDP传输进行主备间的心跳监测通信,且在交互的心跳报文中包含了当前主用和备用主控板的状态数据等,用于更新状态机,避免盲目切换和无效切换。
(6)本设计中数据库实时更新,且一旦备用主控板收到TCP传输的备份文件就导入到本地数据库中,而不是出现故障进行主备切换时再从数据备份文件中读取数据。因此不会产生数据不同步的问题,而且大大地减少了切换时的工作量,加快了切换速度。
本文研究了T比特核心路由器的主控软件结构,设计了高可用性模块。该模块采用热备份模式,通过对主控板的硬件冗余设置,配合软件实现的数据热备份及心跳探测等技术消除T比特路由器中主控单点故障。该模块应用于T比特路由器主控软件系统中,当主用主控板发生故障时,可以快速、准确、平滑地进行主备切换,从而提高了系统的稳定性和可靠性,最终实现路由器的高可用性。