系统高可靠性的目标是通过提高系统自身的可靠性,减少其对整个网络的影响,进而提升网络的可靠性。新一代网络操作系统通过引入多项新的技术,实现故障隔离、进程级备份、系统级高可用以及不中断业务升级,从而构建了全面的系统高可靠性。
一、 故障隔离
减少故障影响范围,使一部分的故障不影响其他部分的可靠性,对提高整体的可靠性有直接的作用。事实上我们一般看到的系统崩溃等严重故障经常是由于一些非关键故障引起的,如果能够做到故障部分的隔离,将有效提高系统核心部分的可靠性。
要做到故障隔离必须采用模块化的设计,利用Linux系统进程间的隔离,通过合理的进程划分,保证一个进程的异常不会影响其他进程以及内核的运行。但仅仅依靠进程空间的相对独立还不够,网络操作系统作为一个整体,随着其功能发展,系统越来越复杂,经常是多个部分相互配合完成一项工作,而功能之间也会有各种联系。模块化设计还可以保证在相关进程异常时,其他进程仍然可以正常运行。
系统除了实现软件间的故障隔离,另一个重要的工作是明确软、硬件间的清晰界线,让一方的故障不影响另外一方的运行。由于软件的处理比较灵活,因此无论哪方的故障,都由软件完成隔离处理。通常硬件的故障软件可以很好的处理;但反过来,软件故障后再要求自身完成隔离恢复就困难得多。传统的网络操作系统,当软件出现异常时,只能通过重启软、硬件来恢复系统,但新一代的网络操作系统,可以做到在软件重启运行过程中,硬件依然按照原有设置进行网络报文处理,当软件恢复后可以与运行中的硬件继续配合工作,保证硬件不中断运行。
二、 进程级备份
前面已经讲到,模块化的架构设计保证一个进程的故障不影响其它进程的运行,但出现故障的进程本身也需要通过冗余备份、故障检查、自动恢复等技术,快速完成故障的恢复,以提高自身的高可用性(HA)。H3C的新一代网络操作系统Comware采用的是进程级的GR(Graceful Restart 平滑重启)技术,实现进程级的HA。
根据备份方式不同,有单进程GR和主备进程GR两种方式。
单进程的GR。进程运行过程中将必要的数据进行备份,备份数据保存在本地的内存数据库中,当系统发现进程故障时自动重启,进程重新启动后使用备份的数据恢复运行,最后与系统中其他相关进程交互数据,以弥补重启期间可能缺失的变化事件,完成整个恢复过程。这种方式对系统的要求少,占用资源少,一般用在盒式设备的进程或分布式设备线卡的进程上(如图1所示)。
图1 单进程GR
主备进程的GR。提供备份进程的运行,实时接收主进程的状态,以随时准备接替主进程运行。当系统发现主进程故障后自动重启,但无需等待其重启,备进程将升级为“主”进程,直接接替工作。当故障进程重启完成后,将工作在“备”状态,以备进程身份运行。这种方式相对于单进程的GR,恢复时间更短,可用性更高,但占用资源稍多,一般分布式系统的主控板进程使用此方式(如图2所示,active为“主”,standby为“备”)。
图2 主备进程的GR
通过支持进程备份,使得系统中的各进程可以自行进行平滑的重启恢复,而在过去新程序从启动到正常工作需要一段时间,在某些情况下可能会很长。在这段时间内,由于程序还不能够正常工作,无法完成同外界设备的交互,会引起网络上的振荡,造成流量中断。而现在工作在“备”状态的程序“时刻准备着”接替 “主”用程序,一旦发现异常,立即切换工作状态,可以大大缩短切换时间,让外界几乎感觉不到设备曾经“切换过”。这不仅提高了系统可用性,而且不会对网络上其他节点的协议运行造成影响。
三、 系统级高可用性
系统级的高可靠性在网络操作系统中是比较早产生的技术,即同时运行主系统和冗余备份系统,当主系统发生故障时,自动进行倒换,备系统直接接替其工作。原来的主系统重启后,重新以备系统身份运行。
以前,系统级的倒换基本上是解决软件故障的唯一办法,随着进程级GR功能的出现,大部分的软件故障可以通过进程级的GR修复,无需进行整系统的倒换,这样大大减小了需要系统级倒换的场景,提高了整个系统的可用性。这就像医学上新出现的微创手术,有效降低了对人体的整个系统的损伤和影响。
另外随着技术的发展,目前的主备系统与传统意义上的主备系统也有很大区别。例如Comware上实现了控制平面分布式功能,将控制进程的主进程运行在不同的控制单元上,当一个主控单元发生故障时,只有运行在故障控制单元上的主进程才会受到影响。这样大大减小了系统级倒换对整个系统的影响范围(如图3所示)。
图3 控制平面分布式
随着虚拟化技术的发展,网络操作系统可以支持将一个设备虚拟成多个逻辑设备使用,每个控制节点被虚拟成了多个虚拟控制系统,在一个虚拟系统出现故障需要整个系统倒换时,也不会影响其它虚拟设备的运行,进一步减少了系统级倒换对设备的影响。
四、 ISSU不中断业务升级
ISSU(In-Service Software Upgrade)即不中断业务升级。与出现故障的不可预知不同,系统软件升级是一种人为因素,由于全部在操作员的控制下进行,因此只要实现合理,可以做到比出现故障更小的系统冲击。
新一代网络操作系统实现了通过依次升级各板保证升级过程的平稳、可靠进行。通过主控板的交替升级,始终保障至少一个主控系统对整个系统进行控制。如图4所示,首先对备板进行升级,完成后进行主备倒换,同时完成主板及各个接口板的升级,在此过程中均可以进行回退,恢复使用原有版本。如果确定使用新的版本,最后需要进行确认,完成整个升级过程。
图4 ISSU过程
·补丁升级
补丁的升级是对系统影响最小的方式,对系统基本没有影响,但补丁只适用于修改个别缺陷。真正的ISSU应做到版本升级时的不中断业务。
·增量升级
同样受益于模块化的设计,多数情况下的升级并不需要重启整个软件,只需要升级受影响的模块,在系统运行过程中完成软件升级,这样使得上面 ISSU过程中的各个步骤对系统冲击更小,达到更加完美的ISSU。H3C将Comware实现的这种升级称为增量升级,自动比较出升级版本与当前版本的差异,如果差异不涉及核心部分,可以在系统运行过程中直接进行差异部分的升级,否则才进行整个软件的重启升级。在增量升级时即使需要升级的进程正在运行,也可以通过进程级的GR完成进程软件升级。
另外为了方便用户使用,还可以将整个软件系统分为多个软件包,即包含一个基础软件包和多个功能包。这样一般的升级只需要加载功能包,使得升级更有针对性,减少了对系统不必要的影响
·核心部分整版本升级
当然如果升级涉及软件核心部分,每个单板不可避免停止整个软件运行开始运行新版本软件的过程,如何才能保障这个过程中被升级单板的业务不中断?这是ISSU中很关键又是最困难的一点。传统的技术都是尽量将这个时间缩短,但无论缩短到什么程度,硬件转发都要经历一次中断才能完成新老版本软件控制权的交替。以Comware为例,最新采用了一种软重启技术,从根本上解决了这个问题。在软件升级过程中,硬件状态一直保持不变,按照原有转发表项进行数据转发。当新版本软件开始运行后,通过版本间兼容的数据恢复,继续程序的运行,直接接管对硬件的控制。即在整个升级过程中,转发业务一直持续没有间断的进行。更进一步,为了防止升级过程中由于控制程序短暂停止工作,造成不必要的网络动荡,Comware还增加了控制代理功能,在整个系统中选择一个没有正在升级的单板启动控制代理服务,对升级软件中时间敏感的控制逻辑,临时交由代理服务帮助处理。通过以上的软重启技术,使得整个升级过程转发业务不中断,控制协议不震荡。
五、 结束语
通过模块化软件结构以及进程级GR、软重启等新技术的引入,新一代网络操作系统将提供更好的可靠性及ISSU能力。