ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

ISSU技术详解:网络设备如何实现业务不中断升级

ISSU技术详解:网络设备如何实现业务不中断升级 1. 什么是ISSU一次说清这个网络工程师绕不开的升级利器作为一个常年跟网络设备打交道的工程师我几乎每年都要面对“要不要升级设备软件版本”这个灵魂拷问。升级吧怕业务中断、怕兼容性翻车不升级吧新特性用不上老版本的漏洞和Bug又让人心里不踏实。直到把ISSUIn-Service Software Upgrade业务不中断软件升级这套机制彻底吃透我才算真正摆脱了“半夜三点爬起来割接”的噩梦。简单说ISSU就是让设备在运行状态下完成软件版本升级的技术升级过程中业务转发基本不受影响或者仅在极短时间内出现毫秒级丢包。它解决的是传统升级方式里最大的痛点停机窗口。传统做法是把设备重启、加载新版本那业务就全断了如果是核心交换机或骨干路由器这个代价往往无法接受。ISSU的出现就是为了把升级这件事从“高危割接”变成“常规运维”。这篇文章适合谁看如果你是刚入行的网络工程师还在为“升级背锅”而焦虑或者你已经在做运维想搞清楚ISSU底层到底发生了什么、怎么排查问题、怎么设计升级方案我建议你花十分钟把这篇看完。我会把原理、机制、实操流程、踩坑经验一次性讲透不是那种百度一搜一大把的科普文案而是真正能落地到工作中的东西。2. 为什么需要ISSU传统升级方式的“痛”和ISSU的“解”2.1 三种传统升级方式各有各的“坑”先说结论没有ISSU之前设备软件升级基本是三条路每条路都有明显的短板。第一种是整机重启升级。把新版本文件上传到设备修改下次启动的加载文件然后执行重启。这种方式最粗暴也最直接配置不复杂、操作风险相对容易控制但代价是设备上跑的所有业务全部中断。对一台核心设备来说重启一次少则三五分钟多则十几分钟放到业务侧就是大事故。如果你运气不好设备在重启后起不来某个关键业务模块那影响范围还会进一步扩大。第二种是热补丁。热补丁相当于给运行中的软件打“创可贴”在不重启进程、不中断业务的前提下修复特定Bug或临时规避问题。它确实能解决部分问题但热补丁的局限性也很明显只能针对特定缺陷做定点修复没办法帮你升级到带新功能的大版本而且补丁和原版本之间存在严格匹配关系打错补丁反而可能引入新问题。我见过不少同事把热补丁当长期方案结果补丁越积越多版本管理一团乱麻。第三种是主控板主备倒换升级。在双主控架构的设备上先把备主控升级到新版本再触发主备倒换让原来的备主控变成主用并接管业务然后升级原来的主控。这种方式比整机重启好很多对业务的影响通常只有倒换瞬间的几十到几百毫秒但前提是两块主控板必须都是好的、版本兼容性经过验证。而且它解决不了线卡接口板/业务板的版本升级问题——业务报文最终还是靠线卡转发如果线卡进程需要重启照样断流。2.2 ISSU的核心思路把“大爆炸”拆成“无缝接力”ISSU的设计思想其实并不玄乎核心就是**“分步走边升级边接力”**。它把一次软件升级拆成多个阶段每个阶段只影响局部模块并且尽量保证转发面持续工作、控制面快速收敛最终在用户几乎无感知的情况下完成整机软件的版本切换。以框式交换机为例ISSU的典型过程大致是这样的先升级备主控让软件版本具备新能力然后把主用角色切换到升级后的主控接着逐块升级线卡上的软件。每一步都设计成对业务影响最小的方式比如线卡升级时可以利用板间备份或临时切换到其他板卡承担转发。整个过程下来业务层面看到的可能只是个别路由会话重收敛、个别报文延迟抖动而不是“断网”。这个思路对应到生活里有点像“给高速收费站换收费系统”。不关闭整个收费站而是一个车道一个车道地改造改造期间其他车道照常过车改好的车道再逐步开放最终所有车道都换上新的收费系统全程车辆通行不中断。ISSU就是网络世界里的“不停车换系统”。2.3 ISSU的三种主流实现方式不同厂商、不同设备形态下ISSU的具体叫法和实现路径略有差别但主流归纳起来是三种第一种主控倒换型NSF/GR配合。这是最常见的方式适用于双主控设备。升级备主控后通过主备倒换让新版本主控接管控制面同时配合NSFNon-Stopping Forwarding不间断转发或GRGraceful Restart优雅重启机制让邻居设备认为本设备只是经历了“一次快速重启”而非“故障下线”从而保持路由表不重新收敛、转发不中断。这种方式对单台设备来说相当于“换大脑但身体不停工”。第二种进程级ISSU。它更进一步不对整个系统做倒换而是逐个重启需要升级的软件进程。比如只升级某个路由协议进程就单独重启这个进程而且重启后从运行中的其他进程或内存数据库里恢复状态。这个方式对业务中断的影响能做到最小但对软件架构要求很高需要进程之间有良好的状态隔离和恢复能力并不是所有设备都支持。第三种滚动升级型。主要用于堆叠或集群场景。堆叠里有多个成员设备ISSU会逐台升级成员设备升级完一台再升级下一台每台升级期间流量由堆叠中的其他成员接管。这种方式对一个“逻辑设备”来说实现了完全不中断的升级体验代价是需要堆叠里有足够的冗余容量来承担单台升级时的流量压力。这三种方式不是互相排斥的实际方案里经常组合使用。理解它们的关键在于ISSU不是某一个固定操作而是一整套“尽量减少业务影响”的升级方法论具体怎么做取决于设备架构和你愿意承受的复杂度。3. 手把手理解ISSU流程从版本准备到业务恢复3.1 前置检查做不好升级必翻车我见过太多ISSU失败的案例最后复盘时发现问题基本都出在“前置检查没做透”。这些检查琐碎但每一项都直接决定升级能不能成功。第一个必查项是硬件兼容性。别以为新版本一定支持你现网所有板卡尤其是老设备插着早期型号的线卡时新版软件可能已经停止对该板卡的支持。我记得有一次在核心交换机上准备ISSU信心满满上传了新版本结果一致性检查直接报“某块业务板不在支持列表”。幸好是检查阶段拦住了要是真在割接窗口执行到一半才发现那就是妥妥的故障通报。第二个必查项是版本路径支持。ISSU不是任意两个版本之间都能做的厂商通常会规定一条“升级路径”比如从V100R006可以直接ISSU到V100R008但到V100R010就必须先升级到V100R008再继续。跳版本升级往往不被支持因为中间涉及数据库结构变更、协议状态机变化一步到位容易出兼容性问题。这个信息一般在版本文档的“升级注意事项”里写得非常清楚一定要提前确认。第三个必查项是设备冗余状态。如果是双主控两块主控必须都在位、状态都是正常如果是堆叠成员设备之间的堆叠链路要健康、有足够冗余电源、风扇这些环境监控项也必须在正常状态。ISSU过程中任何一个冗余部件出问题都可能让升级过程异常退出甚至导致业务中断这属于“本来可以不发生的次生灾害”。第四个必查项是备份与回退预案。升级前的配置备份、版本文件备份是基本功但很多人忽略“回退预案”。你要提前想清楚如果升级过程中某个阶段失败怎么回退到旧版本有些场景是可以直接回退的有些场景一旦跨过某个阶段旧版本就不再兼容当前的配置或状态只能继续升完。这些都需要在操作前和厂商技术支持确认并形成书面预案而不是出问题后再开会讨论。3.2 执行ISSU一个版本的“平滑交接”实录以一台框式交换机为例一次标准的ISSU执行过程大概分这么几步。第一步是上传并激活新版本文件。先把新版本系统软件上传到主控的存储介质然后通过命令指定该文件为下次启动的加载文件。这时不要重启设备还在用旧版本运行。第二步是升级备主控。这是ISSU真正的起点。设备会在后台把新版本加载到备主控备主控重新启动并初始化启动后处在“新版本待命”状态。整个过程主用主控不受影响业务转发完全正常。第三步是主备倒换。触发主备倒换后原备主控成为新的主用主控用新版本接管控制平面原来的主用主控降级为备用稍后也会被升级到新版本。倒换瞬间会产生一次控制面切换但转发面在NSF机制的保护下不会中断路由邻居通过GR协议不会重新计算路由所以流量基本不受影响。注意这里说的是“基本不影响”实际上倒换瞬间可能有少量报文延迟或堆积设计时还是要为关键业务留出容忍空间。第四步是逐块升级线卡。主控已经统一了版本接下来要把所有线卡的软件也切到新版本。这个过程通常也支持“分批”或“逐板”进行升级某块线卡时该板卡上的业务会先切换到其他板卡或备份路径线卡重启完成后业务再切回来。整个过程流量转发一直在线但会有局部切换动作。第五步是确认状态并清理。所有主控和线卡都运行新版本后确认系统状态恢复正常、业务正常然后把旧的版本文件清理掉避免下次启动时混淆。到这一步一次ISSU才算真正完成。3.3 回退机制给自己留一条“活路”任何升级方案都必须考虑回退ISSU也不例外。ISSU的回退能力和升级阶段高度相关——早期阶段比如只升级了备主控、还没做倒换时回退非常容易直接让设备继续用旧版本就行但如果已经完成了主备倒换、线卡也已经升级回退就可能需要整机重启到旧版本那就失去ISSU的意义了。所以我的建议是在方案设计阶段就梳理清楚“回退红线”。比如明确规定在哪个步骤之前允许回退、哪个步骤之后只能继续如果只能继续备用的那个版本文件必须是以往证明过稳定的版本而不是一个从没验证过的新版本。另外回退操作本身也要做演练别到时候发现回退命令流程你根本不熟那才是“前有狼后有虎”的尴尬局面。4. 做ISSU前必须想清楚的几个问题选型、影响面与时机4.1 你的设备架构支持哪种ISSU不是所有设备都支持ISSU也不是支持ISSU的设备都支持同一种方式。动手规划前先搞清楚你手里设备的具体情况。盒式设备固定端口交换机/路由器多数没有双主控的概念ISSU能力通常有限很多只支持整机重启升级或通过堆叠实现滚动升级。如果你的网络不允许断网那就要优先考虑设备是否支持堆叠。框式设备模块化交换机/路由器一般支持主控倒换型ISSU双主控是标配前提。部分高端框式设备还支持线卡平滑升级整体方案更完善。堆叠/集群系统支持滚动升级但需要保证堆叠带宽充足、成员设备冗余否则升级单台成员时流量可能拥塞。把这些能力摸清楚你才知道“这台设备到底能不能做ISSU”这是所有后续工作的基础。别等到割接前才发现设备根本不支持那只能临时改成风险高得多的整机重启。4.2 业务影响面评估别以为“不中断”就是“零影响”ISSU虽然叫“业务不中断升级”但它追求的是“极小化中断”不是绝对的“零中断”。你必须对影响面有清醒认识主备倒换瞬间CPU可能会短暂冲高部分协议报文处理延迟增加NSF/GR保护路由表的同时一些无状态业务比如某些TCP长连接可能会感知到毫秒级抖动线卡升级过程中该板卡的端口会短暂不可用流量切走再切回期间可能产生少量丢包如果设备上有组播、NAT、负载均衡这类有状态业务ISSU过程中的状态同步机制非常重要千万别忽略。所以评估影响面的核心方法是在测试环境里先完整执行一次ISSU把业务影响实测出来而不是听厂商说“可以不中断”就信了。测试环境的结果虽然不等同于现网但至少能给你一个参照系知道哪些环节可能出问题、哪些业务对抖动敏感从而决定是否需要对业务做额外冗余或保护。4.3 升级时机的选择把风险留在“能承受”的时间窗就算ISSU把影响降到了很低也不是随便找个时间就能做的。实际操作中我会把两个因素作为硬性约束第一个是业务高峰期绕开原则。ISSU过程虽然业务不中断但毕竟存在倒换、抖动等动作尽量选在业务低峰期操作。深夜或者凌晨通常是网络流量最低的时段即便出现异常对用户的影响也最小。第二个是冗余度确认原则。操作前确认设备当前负载在安全水位以下。比如ISSU过程中线卡升级会导致流量切换到其他板卡如果其他板卡平时负载已经80%以上切过去就直接拥塞了那升级过程本身就会引发新的问题。把负载降下来再升级或者干脆推迟到能腾出冗余的时间段这才是成熟运维该有的判断。5. 常见问题与排查技巧实录说到这我可以把这几年做ISSU时踩过的坑和排查经验整理成一套速查表每一条都是真金白银换来的教训。问题现象可能原因排查思路与解法一致性检查报错版本与硬件不兼容新版本不再支持某块旧板卡查看不兼容板卡型号更换支持板卡或选择兼容版本备主控升级失败反复重启版本文件损坏或主控存储空间不足重新校验版本文件MD5清理主控空间后重试倒换后路由邻居全部重建NSF/GR能力未开启或邻居不配合检查本端和邻居设备是否都开启了GR/NSF能力线卡升级后业务不通该接口板协议状态未恢复检查接口板状态、接口协议状态强制恢复后测试业务升级完成后部分端口不在新版本管理范围软件版本数据库与设备硬件数据库不一致联系厂商支持确认是否需要额外补丁或版本更新回退后发现配置丢失回退过程用了旧版本加载但未校验配置兼容性回退前强制备份配置回退后逐项核对关键配置项再补两个比较经典的场景。场景一堆叠设备滚动升级时第二台成员一直升级失败。第一次遇到这种情况时我以为是对端设备不兼容查了一圈后发现问题出在堆叠分裂检测机制上——第一台成员升级期间堆叠拓扑发生变化导致第二台升级时设备始终认为堆叠不完整拒绝执行升级。解决方法是先确认堆叠系统已经稳定、状态为“正常”后再继续下一台必要时重启相关堆叠协议进程。场景二升级后某个OSPF邻居频繁振荡。排查时查了接口、查了日志最后发现是版本升级后OSPF的Hello和Dead计时器默认值变了新旧邻居的计时器参数不匹配导致邻居不断重建。这种问题特别隐蔽因为它只出现在跨大版本升级的场景里。建议升级前后对比一下关键协议的默认参数特别是路由协议、BFD、链路聚合这些和邻居状态强相关的参数。6. 写在最后ISSU值得学但你得知道它不万能ISSU确实是网络运维里一个非常有价值的工具它把“升级停机”这个传统等式彻底改写了。但用了这么几年我的感受是ISSU不是“银弹”它适合“值得做ISSU”的场景——比如核心设备、关键业务、无法申请停机窗口的情况。如果是一台边缘设备停机几分钟根本没有感知那也没必要非得折腾ISSU直接重启升级反而更简单、更可控风险更低。另外ISSU的成功高度依赖“准备”而非“操作”。操作本身往往就是一两条命令、点几个确认真正耗时间的全是前置检查、版本确认、影响评估、回退预案这些幕后工作。你在这些方面投入的精力越多ISSU翻车的概率就越低。我一直跟团队里的人讲“升级本身不难难的是让升级这件事变得无感。”这句话其实也适用于所有运维工作。
返回列表