山东劳动职业技术学院机械工程系 杜秀芳
ISSU过程中的不兼容升级
山东劳动职业技术学院机械工程系杜秀芳
【摘要】本文介绍了一种高端路由器的在服务升级方案,同时还提出了消息不兼容场景下的在服务升级方案,使运营商客户在版本升级切换时的业务中断时间尽可能短,具有商业价值。
【关键词】ISSU;高可靠性;路由器;软件升级
随着通信技术的发展,4K、LTE等技术对带宽的要求越来越高,广大的网络用户对带宽的需求量越来越大,运行商为了满足用户的需要,从而进行新一轮的技术革新和设备升级,以满足带宽和新业务特性的需求。在更新设备软件的方式上,越来越多的公司都开始支持ISSU技术(In-Service Software Upgrade),利用ISSU技术可以实现在软件升级的过程中,大大减少业务的恢复时间,提高设备的无故障运行时间,从而降低了升级的成本,提高了网络设备的可靠性。本文涉及的设备形态主要是路由器。
1.1HA技术
不间断业务升级技术是在高可靠性技术(HA)的技术上发展起来的,不得不提一下HA技术的实现。如图1所示,在硬件上,HA技术需要系统有两块主控板,用于做1:1的互为备份,处理实际路由事务和转发的板子称为主板(Master),处于备份等待并且可以随时接管主板工作的板子称为备板(Slave)。在主板上部署的进程称为主进程,在备板上部署的进程称为备进程。主进程和备进程是一一对应的,每对主备进程称为一个保护组。HA技术解决的是主备进程和主备板之间的可靠性问题,主要技术点包括系统批量备份、系统实时备份和主备倒换技术。
图1 HA原理
(1)批量备份
系统批量备份的过程如图2所示,在整个设备启动之初,主板先启动,备板向主板注册后,开始做第一次主备板之间的数据同步,具体是通过每个保护组之中的主备进程之间的数据同步来完成。目的是批量获取主板的配置数据和状态数据,以便能够随时恢复主板的业务。批量备份的发起者是HA管理模块,HA管理模块通知主板“备板已经启动成功,可以发起批量备份”,然后主板HA管理模块通知他说管理的各个业务模块向自己的备模块发起备份,所有模块备份结束后,HA管理模块认为整个批量备份过程结束,记录状态。批量备份的实现是通过主板各个进程与备板各个进程的消息实现的。
图2 批量备份过程
(2)实时备份
批量备份完成后,所有主进程进入运行态,处于运行态的主进程还是会不断处理业务(路由更新、拓扑变化等),备进程的数据还是会与主进程不同。如果主进程发生异常,那么备进程升主后还是有一段时间需要恢复数据,而这个过程也是会影响业务处理的。为了减少这个时间,使设备尽快能恢复业务,备进程需要经常性的同步主进程新生成的数据,这个过程称为实时备份。实时备份是由业务的主进程发起的,当主进程的状态数据发生变化的时候,会同时通知备进程接收这部分新数据。这部分数据的同步也是有主备进程之间的消息通信完成的。
(3)主备倒换
当主进程发生异常的时候,可以通过主板重启,同时备板所有进程由备身份升为主身份完成业务的平滑切换,这个过程称为主备倒换。
1.2ISSU实现过程
ISSU的完整过程包括上传升级包、升级前环境检查、运行包替换、升级确认四个过程。
(1)上传升级包
这个过程中由用户通过ftp协议上传升级包到设备的存储空间中,以便升级需要,这个过程需要确保主控板有足够的空间。
(2)升级前环境检查
升级前检查为了检测当前运行环境是否满足升级条件,包括主备板的磁盘空间、各个接口板的磁盘空间、CPU占用率、各个板子的内存剩余空间。只有所有条件都满足升级的最低标准才能正常进行下一步的升级过程。
(3)运行包替换
运行包替换过程的目标是真正把系统中运行的进程以新版本的程序启动,这个过程分为主控板替换过程和接口板替换过程,先进行主控板的替换过程。具体过程如下:
第一步:将升级包解压缩(这个时候升级包只在主控板磁盘上);
第二步:将解压缩后的软件实体(包括可运行程序、脚本和lib等)分发到各个单板;
第三步:主控板的备板以升级包中的程序启动,启动完成后,进行主备程序之间的数据备份,进行主备倒换;
第四步:接口板以新版本程序创建备进程,进行主备程序之间的数据备份,然后进行主备倒换,至此,完成整个系统的主用平面的程序替换,也就是说功能上整个设备已经替换成新版本的程序,后面的就是验证过程。
(4)升级确认
该过程的是目的是验证升级的结果,在这个过程中还是可以回退到老版本的程序。升级确认过程中,需要查看设备运行状态、转发和路由状态、CPU和各个业务功能是否正常,如果一切都正常,那么就可以确认升级。确认升级之后,系统的备平面也会整体替换成新版本的程序,从而整个设备的所有程序都完成了新版本软件的替换。
基于HA技术实现的ISSU的完成依赖于HA技术的可靠,HA技术的主要环节就是数据备份,而数据备份能否成功的关键点是主备模块之间的备份消息能否正确处理。参考上面运行包替换过程中提到的第三步,在备板程序以新版本启动后,开始的备份过程发生的主备双方的版本分别是:主程序旧版本,备程序新版本,所以这个通信过程就是两个版本之间的通信。一般情况下,版本升级的周期是半年以上(通常是一年到两年),版本之间总会有一定的差距,这就会导致新版本的程序在收取老版本消息的时候处理出错。
举例来说,如图3所示,新版本数据包结构发生变化,数据报文新版本相对旧版本增加一个c字段,并且c字段加入的位置放在了a和b之间,这会导致新版本在解析数据包时,会错误的把原来报文中的b当成c来解析,从而导致业务逻辑的错误。这种由新旧版本消息格式变更导致的消息无法正确解析称作消息不兼容,把新版本程序对于旧版本程序的这种差异称作不兼容变更。当在ISSU过程里面的新旧双方发生了消息不兼容,就是新启动的备程序从旧的主程序那边获取了错误的数据(通过备份消息),会导致业务本身的错误,最终导致整个ISSU过程失败。ISSU最容易发生的失败就在于此。
图3 消息格式变化
要解决消息不兼容的问题,分为两个部分:一是基于运行程序的版本号管理,从而能够在ISSU开始之前就能够判断出该次升级的ISSU过程中是否包含着消息不兼容的程序;二是支持在消息不兼容的场景下进行ISSU。
3.1基于运行程序的版本号管理
在大包版本的基础上,对程序本身的文件进行版本编号管理,采用两级版本号管理:X.Y。其中X 和Y为整数,当版本变化时,X和Y的数值依次增大。规定当发生不兼容变更时,X增加1,当版本的程序的变化与之前的版本兼容时,Y增加1。
举例来说,对于程序librm.so,初始版本为1.0,发生了三次版本变更,第一次变更为兼容变更,第二次变更为不兼容变更,第三次变更为兼容变更,则这三次该程序的版本号分别为:librm.so 1.1,librm.so 2.0,librm.so 2.1。
3.2支持消息不兼容下的ISSU
当存在消息不兼容的程序时,采用不备份的方式完成主备程序替换的过程。ISSU过程中的运行包替换过程改进为如下步骤:
第一步:将升级包解压缩(这个时候升级包只在主控板磁盘上);
第二步:将解压缩后的软件实体(包括可运行程序、脚本和lib等)分发到各个单板;
第三步:主控板的备板以升级包中的程序启动,启动完成到初始化阶段完成后,不进行备份,以新版本程序复位不兼容的主进程。对于兼容的进程还是按照之前的方式操作,让不兼容造成的影响降低到进程级别;
第四步:接口板以新版本程序启动程序。
在这种方式下的实现的ISSU是有损的,但是也能保证以最小的损失进行。
本文介绍的技术方案解决了路由器ISSU升级中,消息不兼容场景下的升级问题,缩短了业务中断的时间,能够给电信客服带来实际的商业价值。
参考文献
[1]冯强.金融城域网外联路由器软件版本升级中的关键环节[J].中国金融电脑,2015(10):53-55.
[2]王丽梅.网络路由器升级改造中的技术和管理障碍及其排除[J].电子世界,2014(4):70-71.
[3]周丽平,张亚君.基于Linux系统交换机的进程升级研究[J].杭州电子科技大学学报,2012,32(5):29-32.
[4]张敏狄,郭裕顺.分布式网络设备的业务不中断软件升级系统设计[J].计算机系统应用,2010,19(6): 40-43.
[5]张玉峰,孙知信.基于热备份的主备倒换在高端路由器中的应用[J].计算机技术与发展,2010,20(3): 172-179.
杜秀芳(1982—),女,硕士研究生,初级职称,山东劳动职业技术学院机械工程系专任教师。
作者简介: