本节书摘来自异步社区《路由设计的优化》一书中的第1章,第1.5节,作者【美】Russ White , Don Slice , Alvaro Retana,更多章节内容可以访问云栖社区“异步社区”公众号查看
路由设计的优化究竟拥有多少台路由器的网络才可以被认为是可扩展的网络呢?或许在网络拥有100台路由器时,就可以认为该网络是一个大规模网络,而且也能够证明该网络的设计师是一名合格的网络设计人员。但是,如果网络中的路由器超过了1000台呢?或者说网络规模与网络的可扩展性之间有没有什么必然联系呢?在探讨大规模网络的涵义时,应考虑以下场景。
某些网络很大(拥有上千台路由器)但是却不稳定,需要进行重大网络变更操作才能增加网元或调整网络拓扑结构,而且不进行重大变更操作就无法适配新的网络应用。某些网络很大(拥有上千台路由器)且很稳定,只要经过很小的变更操作即可适配各种变更情况。某些网络较小(只有几十台路由器)且不稳定,难以调整其拓扑结构,一些小的变更操作就会导致网络故障,而且在出现网络故障后需要花费很长的时间去检测与排除故障。这三种实际场景表明网络的可扩展性与网络的规模并没有必然联系,具备高扩展性能力的网络能够适应各种应用环境,能够按需调整网络规模,而且无论网络规模有多大,都具备良好的可管理性。换言之,可扩展的网络构造于灵活的网络设计与便捷的网络管理之上。
如果网络在技术上可扩展,但是却极难管理甚至无法管理,那么该网络实际上是不可扩展的。
因此,大家必须将网络规模与网络的扩展性严格分开,不要过分关注网络的规模,唯有让网络具备强大的可扩展性才是真正的设计目标,为此需要打好网络基础,进行必要的优化调整,以便让网络更容易地适应未来的各种需求。通过降低故障排查以及故障组件(这些故障时不可避免的)修复时间,就可以大幅降低网络的宕机时间。
至此,大家应该明白哪些才是网络设计的真正目标,网络应该可靠、可管理、可扩展!下面将讨论实现上述目标的一些技术手段,首先是冗余性。
绝大多数网络工程师在考虑网络的弹性能力时,首先想到的就是增加网络的冗余性,不过需要注意的是,冗余性不仅仅影响网络的弹性,而且还影响网络的可管理性和可扩展性。
下面各节将从网络弹性的角度来探讨冗余性问题,大家将会发现需要在两者之间找到一个平衡点,否则在网络中部署过度的冗余机制反而会削弱网络的弹性、可管理性和可扩展性。
1.冗余性如何提高网络弹性很多时候,在网段中增加冗余硬件或部署冗余链路可以在总体上提升网络的弹性能力,如图1-6所示,通过一定的冗余机制可以提高网络的正常运行时间。
在图1-6中,两台主机通过一对路由器(路由器A和路由器B)进行互连,而这对路由器通过单一链路进行互连。第一种调整方式是,在路由器A和路由器B之间增加一条备选路径(如图中虚线所示),这样一来,一条链路出现故障不会中断两台主机之间的连接。虽然这种冗余机制能够避免单一链路故障带来的网络中断,但是路由器A和路由器B仍然存在单点故障隐患,一旦某台路由器出现了故障,那么整个网络就会中断,为此,可以再增加一对路由器(路由器C和路由器D),如图1-7所示。
在网络中增加了一对路由器作为路由器A和路由器B的备份路由器之后,就可以提升网络的弹性能力,此时,单一链路故障不会影响该网络的正常运行,单一路由器故障甚至一对路由器故障(只要这两台路由器连接在同一条链路上)也不会影响网络的正常运行。但是,如果每条链路上都有一台路由器出现故障(如路由器B和路由器C),那么该网络仍然会中断,因此,虽然该网络不存在单点故障问题,但仍然存在双点故障隐患,要想解决所有的双点故障隐患,就需要在两个站点之间部署第三对路由器,但也可以考虑在网络中增加一对链路以解决部分双点故障隐患,如图1-8所示。
在路由器A与路由器D之间以及路由器B与路由器C之间增加了冗余链路(如图中虚线所示)之后,路由器之间的任意一对链路出现故障,或者任意一台路由器和任意一条链路出现故障,或者任意一对路由器出现故障,网络都能正常地传送流量。
那么究竟应该在网络中部署多少冗余措施才能获得相应的弹性能力呢?前面讨论的方法就是分析网络中可能存在的故障点,并与网络应该能够在任意故障点抵御故障发生的要求相对比,利用该方法就可以确定每个故障点所需的冗余措施。
例如,如果希望单台设备或单条链路故障不至于导致网络出现故障,那么就需要消除网络中存在的所有单点故障隐患,如果希望任意两台设备或两条链路故障不至于导致网络出现故障,那么就需要检查网络中可能存在的所有双点故障隐患并部署相应的冗余措施。
2.统计分析有没有什么方法能够分析网络的冗余性并与网络的弹性能力相比对,从而确定需要故障点部署多少冗余措施?答案是肯定的,那就是长期以来公路、电力、电话网络的管理者们一直都在使用的测定网络弹性能力的统计方法。该方法利用每种网络组件的MTBF(Mean Time Between Failures,平均故障间隔时间或平均无故障时间)参数来确定整个网络的平均故障间隔时间,另外一个参数是MTTR(Mean Time To Repair,平均故障修复时间),MTTR表示网络从故障状态到正常运行状态所花费的时间。有了MTBF和MTTR之后,就可以预测网络每年可能的宕机时间了。
MTBF首先需要确定系统中每个组件的MTBF,通常表示为该组件出现故障前能够正常运行的时间(以小时为单位),但第一次获得这个时间值稍微有些困难,例如,如果有10个MTBF均为5年(即43 800小时)的相同网络组件,意味着这些组件都可以正常运行5年时间,但是运行了2.5年之后,如何确定还有多少组件仍处于正常运行状态呢?为此,需要通过MTBF来计算故障率,即:
其中,e约等于2.718,是计算自然对数时用到的常见数值。因此,要想知道MTBF为43 800小时的设备在运行了21 900小时之后出现故障的概率,就可以采用以下计算公式:
这就是说,每台设备在正常运行了2.5年之后出现故障的概率是60.66%,即可以认为这10台设备在2.5年后大约有6台设备会出现故障。因此,大多数网络组件的MTBF都达到数百万小时的原因,就是希望在这些网络组件平均使用期限内提高正常运行的设备比例,例如,如果设备的MTBF为1 000 000小时,那么2.5年后每台设备都将有97%的几率仍处于正常运行状态,也就是说,2.5年后几乎所有的10台设备都处于可用状态。
计算系统的MTBF假设某个系统由多个组件组成,每个组件都有其自己的MTBF,那么如何计算整个系统的MTBF呢?此时,可以使用下列公式基于各个组件的MTBF来计算系统的MTBF:
基于该公式,我们来计算一个系统的MTBF。该系统包含3个组件,第一个组件的MTBF为20000小时,第二个组件的MBTF为25000小时,第三个组件的MTBF为35000小时。该系统的MTBF如下所示:
因此可以看出,设备制造商在产品上标示的长MTBF是非常重要的,而且系统的MTBF要远远小于任一个组件的MTBF。
MTTR不过,在确定网络于给定时间内可以为用户提供正常服务的时间比例时,MTBF仅仅给出了一个方面的信息,另一个需要了解的信息就是MTTR,该参数是系统出现故障后恢复到正常运行状态所需要的时间。
例如,假设某台设备的需求如下:
更换板卡的时间是4小时,每4次故障需要更换一次板卡;加载新软件版本的时间是1小时,每4次故障需要更换一次软件版本;重启时间是15分钟,每两次故障都需要重启一次以恢复运行状态。由此,可以计算出该设备的平均故障恢复时间为:
也就是说,该设备每次故障后的恢复时间平均为1.375小时,再结合该设备的MTBF,即可确定该设备每年的平均不可用时间。假设该设备平均每三年出现一次故障,那么该设备每年平均不可用时间为:
每年0.459小时相当于每年30分钟左右。要想进一步计算该设备的正常运行时间比率,可以用估算出的每年宕机时间(30分钟)除以1年的分钟数:
即该设备的平均宕机时间比率是0.00005,则正常运行时间比率是99.99995,也就是常说的可靠性为6个9。可以对系统采取相似的推理方式,但在实际中几乎不可能得到系统的MTTR,除非运行该系统以获得相应的经验值,这也是做好网络文档记录工作的重要原因之一。对本应用场合来说,就是要记录网络的故障频率以及每次故障持续的时间,这些记录可以在网络设计过程中协助确定网络的可靠性,并确定因网络变更而给网络可靠性带来的变化。
3.冗余性如何增大管理复杂度至此大家已经了解冗余性是如何提升网络弹性的,并知道了如何评估冗余性所提供的弹性能力。但是,冗余性过大有没有什么缺点呢?答案也是肯定的,比方说,随着冗余性的增加,网络的管理复杂度也会随之增大。
管理复杂度通常包括以下三部分内容。
配置网络的能力,不能出现“凌晨2点测试”现象。如果不熟悉网络的人员在凌晨2点进行网络操作,他们是否能够明白网络的配置信息并理解为何如此配置?监控网络的能力。出现故障后检测与排除网络故障的能力。随着网络冗余度的增加,上述管理功能的难度也将随之增加。例如,如果在配置网络时,发现网络中存在5~10条穿越多台中间设备的并行路径,那么就很难确定流量流的实际传送路径,也很难配置设备以获得所期望的流量流。
对部署了非常复杂冗余机制的网络来说,故障排查工作也是非常困难的。流量究竟是沿着哪条路径进行传送的?这10条路径出现了暂时性环路属于正常情况还是网络出现故障的征兆?
网络工程师在排查网络无法收敛的故障时,一种最有效的策略就是先断开网络中的所有冗余措施,直至网络收敛为止,待网络稳定后再仔细诊断故障原因并找出解决方案。
虽然很难准确度量网络管理的复杂度,但常规经验是在网络中部署两条并行路径,这样可以在管理复杂度与良好弹性之间找到最佳平衡点。当然这种平衡关系也不是一成不变的,有时一条路径即可满足需求,有时则可能需要三条路径,但不管怎么说,两条并行路径是一条行之有效的经验准则。
4.冗余性如何降低可扩展性网络工程师在增加网络冗余性的同时,还要在弹性与可扩展性之间做出平衡,在网络中每增加一条冗余路径,都会减缓网络的收敛速度。只要考察一下路由协议的职责以及路由协议的运行规则,就会明白原因之所在了。路由协议在计算最佳路径时,所要检查的路径越多,确定最佳路径的时间就越长,同样也很难定量估算两者之间的关系,但图1-9给出了一些参考指南。
图1-9所示结果基于图中左侧的小型网络,运行的路由协议是EIGRP。通过路由模拟器向其中的一台路由器注入一定数量的路由,当其中一条路径出现震荡时,就可以测量从这条路径切换到另一条路径所花费的时间(测量结果如图1-9右侧所示)。
从图中可以看出,收敛时间随着路由条目的增加而增长(对所有的路由协议来说都是一样的),随着可用路径的增多,收敛时间也随之增长。那么现在的问题是:是不是并行链路越多,网络的收敛时间就越长,相应的网络宕机时间也就越长?或者与此相反,冗余链路越多,网络的宕机时间就越短?
这个问题的答案与链路的故障频率、故障链路的恢复时间、网络中的路由器数量、特定路由器的网络收敛时间以及其他很多因素都有关系,因而没有很明确的答案。不过在很多情况下,在网络中增加第三条并行链路会大大抵消网络弹性所带来的好处,因为这样做不但会延长收敛时间,而且对提升网络正常运行时间的作用也很有限。这一点通过计算即可明白,首先计算网络的正常运行时间比例和收敛时间,然后再根据网络收敛事件的次数以及链路故障次数来计算网络的整体正常运行时间。
注
在网络中增加第三条并行链路时还需要考虑另外一个因素,那就是因链路数量增加而带来的内存和处理器资源的额外耗用。对距离矢量协议(如EIGRP和BGP)来说,每条链路都代表一份完整的从特定邻居(或对等体)学习到的信息拷贝,因而需要占用额外的内存和处理器资源。对链路状态协议来说,虽然相互交换的信息没有增加,但是数据库的规模在增大,而且计算网络最佳路径所需的时间和处理器资源也都随之增大。
