2017年1月14日,Ucloud云北京B区的业务发生了中断,中断的原因是运营商施工原因导致B区数据中心机房到北京核心汇聚点的两对光纤同时被挖断,导致业务中断。这让人想起了2015年5月的支付宝业务中断事件,也是运营商网络光纤被施工挖断导致,当时是四条大对数光缆中断。互连的光纤链路出现中断这类突发事件,如果没有一些备份和监控措施,就会导致业务受到影响。实际上,在数据中心内外部,类似于这样的链路故障问题时有发生,只不过这两个例子是影响比较大的。那么,数据中心怎么才能提前做好链路检测工作,避免发生类似问题呢?
链路故障是数据中心遇到的一种非常常见的故障类型。如果在数据中心内部,很好办,通过增加链路备份的方式,提升可靠性,一般分布在不同网络设备上,相互之间尽量隔离,这样当一侧链路出现故障时,业务及时切到另外一侧来,这个链路可以是两条也可以是多条,越多可靠性越高。最常见的方式是采用聚合的方式,其中有几条或数条有问题时,业务也可以切换到正常链路上来。如果在数据中心外部,尤其是租用运营商的线路,这个外部环境并不是数据中心能够控制的。如果在财力允许的情况下,可以租用多条链路。单条链路出故障,业务还可以走其它的链路。不过像Ucloud和支付宝都是有备份链路的,支付宝甚至有四条链路,只要有一条链路不断,业务也不至于全断。可惜的是四条全断的事件还是发生了,这时能够救数据中心的方式只能是有异地数据中心或者灾备数据中心,当正在运行的数据中心外部链路全部中断时,业务可以及时迁移到其它数据中心,保持业务不受影响。这也是建立灾备数据中心的重要性所在,如果说Ucloud和支付宝提前有完整的异地灾备系统,业务不至于中断这么久。平时在数据中心和灾备数据中心之间有实时的备份流量,一旦主用数据中心发生故障,应用自动切换到灾备数据中心上运行,切换过程非常短暂,对业务的影响微乎其微。
仅有各种链路的备份,数据中心的备份还不够,最为关键的是要有能检测到链路故障的手段,并根据这些检测结果去自动执行应用业务的切换动作。首先,数据中心都有网管监控系统,当出现链路的DOWN事件时,在网管中心就可以监测到,网管中心可以根据链路DOWN的位置和数量,人工或自动的方式进行链路切换或者业务切换。人工的方式就是通过检查链路DOWN的故障位置,进行有针对性的业务切换,自动的方式就是通过链路DOWN事件与系统提前设置好的动作联动起来,根据不同位置的链路DOWN有不同的应急预案,只要系统自动执行即可恢复业务。其次,很多时候互连链路中间可以经过光传输设备(主要在数据中心外部或者跨数据中心之间),这样一端链路即使DOWN了,另一侧并不能感知到,就需要部署一些检测协议来感知。常见的有聚合LACP协议、DLDP协议、OAM协议,LACP协议如果采用慢速的检测,30秒才发送一个探测包,90秒超时,所以切换速度是比较慢的,当然可以将这个配置为快速检测,最快1秒发送一个探测包,3秒超时,这样能够在几秒钟的时间里完成链路切换。有的时候如果不是聚合备份关系,这时就要借助DLDP协议,DLDP协议本是检测单光纤不通链路故障的,如果采用DLDP,当协议超时后迅速对端口做SHUTDOWN操作,这样云管理平台就可以感知到端口DOWN,采取修复动作。OAM协议同样是链路检测协议,是物理链路层的协议,所以开销更小,检测速度更快,而且动作丰富,可以告警,可以DOWN端口,可以和其它协议联动。第三,要有灾备的数据中心。如果是数据中心内部的DOWN,业务影响范围还不是特别广,但如果是数据中心与外部互连的端口出现了DOWN,严重时导致整个数据中心无法运转,这时就要启用灾备数据中心。将应用业务切换到灾备数据中心,由灾备数据中心接管业务。在主业务数据中心和灾备数据中心之间要有实时的业务备份,同时还有一套共同的管理平台,确保在数据中心故障时,业务可以平滑切换到灾备数据中心,这里通常采用的还是路由切换的方式,通过调整路由将业务流量引入灾备数据中心。要实现这个过程还是比较复杂的,要对多个数据中心的业务模型了如指掌,需要做业务迁移的时候,通过调整路由将业务切换到灾备数据中心。第四,调整路由有时还是太慢了,也容易出错,这时就出现了VXLAN技术,VXLAN技术将多个数据中心大二层打通,不同数据中心内部的虚拟机可以向其它数据中心自如迁移(所谓迁移指的是二层转发)。这样当一个数据中心故障时,所有的虚拟机业务可以全部迁移到灾备数据中心,整个过程在业务层面都无感知,切换速度快,调整简单,而且很多时候这种迁移是系统自动完成,不需要人为参与的。
数据中心里有很多链路检测和切换的方法,目的就是应对突发的链路故障对业务的冲击。当然,什么事情都是过犹不及,对于核心的网络设备,往往含有的端口数百甚至上千,这么多端口如果同时都做检测,设备会疲于处理各个端口上送的数量庞大的检测报文,给设备CPU造成负担,所以链路检测是否要部署,都部署到哪些端口上,具体采用哪些检测协议和方法,都需要具体问题具体分析,按照每个数据中心自己的业务需求来部署,尽量以不增加设备负担,同时能够达到检测目的为好。