亚马逊AWS官方博客
AWS Direct Connect高可用路由设计
AWS Direct Connect(以下简称DX,或专线)用于连接客户在亚马逊云科技、本地以及其他云端的数据中心,它为客户提供了一个私有、可靠的混合云连接解决方案。在《在中国区使用Transit VIF集中和简化网络连接》一文中,讲述了如何利用Transit VIF实现混合云组网。
为了确保业务连续性,客户通常会部署多条专线以满足高可用要求。当创建了两条专线时,很多客户会关心以下几个问题:
- 如果两条专线接入不同的DX location,出云方向的流量,云端会默认优先选择哪条专线?
- 客户想要实现两条专线的高可用,做到主备冗余(active/passive)或负载均衡(active/active),该如何设置BGP路由策略?
- 两条专线的virtual interfaces(VIF)接在同一个Direct Connect Gateway(以下简称DXGW)上,还是分别接在不同的DXGW上?
本文将首先描述多条专线互连的混合云架构最佳实践。接着,介绍在多条专线互连的场景下,亚马逊云科技的默认路径选择行为,以及客户如何利用BGP路径属性主动控制路由传播。本文编写的内容同时适用于亚马逊云科技中国区域和海外区域,并适用于Private VIF和Transit VIF。
两条专线组网最佳实践
下面我们来看两条专线接入亚马逊云科技,实现高可用的最佳实践:
若要实现两条专线的高可用(主备冗余,或者负载均衡),并且做到路由快速收敛,两条专线的virtual interfaces须关联在同一个DXGW上。下文介绍的所有路由控制方法,均基于一个DXGW。Direct Connect支持BFD,BFD是一种链路探测协议,它的开启能够让BGP更快的收敛。更多关于BFD的配置说明,可参考How do I enable BFD for my Direct Connect connection。
哪些场景建议使用多个DXGW:
- 专线相互之间没有高可用关系,各自连接不同的业务线,相互隔离。此时,一条或一组专线关联一个DXGW;另一组专线关联另一个DXGW。
- Dedicated Connection支持多个Private VIF和一个Transit VIF。若同时创建了Private VIF和Transit VIF,须为相应的VIF分别对应一个DXGW,因为Private VIF和Transit VIF不能关联在同一个DXGW上。
Transit Gateway是亚马逊云端托管的路由服务,它可以用于连接云上VPC和客户本地网络。随着Direct Connect 以更多连接带宽选项扩大了对 AWS Transit Gateway 的支持,Transit VIF成为了很多客户的首选。Transit Gateway是Region级别的服务,一个DXGW最多关联三个Transit Gateway,也就是一组专线最多能通过Transit VIF连接三个Region。如需连更多Region,可参考DXGW with AWS Transit Gateway, Multi-Regions (more than 3)。
BGP路由协议
Border Gateway Protocol(BGP),边界网关协议,它能交换自治域(Autonomous System,简称AS)间的路由信息。Direct Connect使用EBGP路由协议交换云端和本地网络的路由前缀,因此客户本地路由器的AS号和云上AS号不能相同。
当客户有多条Direct Connect,即到达同一目的网络有多条路径时,就能利用BGP路径属性控制路由的传播。BGP的路径属性主要有Local Preference, AS_Path, Origin, MED, Router ID等。BGP不同属性间具有顺序优先级,只有排在前面的属性值相同时,才会比较下一个。下文会提及Local Preference, AS_Path和MED,因为这三个BGP属性常用来控制Direct Connect的路径选择。
- Local Preference:默认值100,数值大的路径优先。该属性在一个AS内传播,只能传播给IBGP peer,一般用于控制流量出本AS的路径。
- AS_Path: 该属性把所有经过的AS的编号串联在一起,经过AS少的路径优先。
- MED: 默认值0,数值小的路径优先。该属性在一个AS内传播,能传播给EBGP peer,一般用于控制流量进入本AS的路径。
下面会分别讲述入云和出云方向两个场景。若想主动控制路由走向,就要在客户本地路由器上利用BGP路径属性来配置选路策略,因为Direct Connect不支持在云端调整BGP路由策略。下文均以位于本地的思科路由器作为配置举例。
入云流量路由设计
从客户本地网络到亚马逊云科技的流量为入云流量。BGP的Local Preference属性可以用来控制入云流量从哪条专线走,拥有最大Local Preference的路径将优先被选择。当然,调整AS_Path也能达成相同的目标。下图中,由于DX-1的Local Preference的值较大,入云流量优先走DX-1。当DX-1发生故障时,流量会自动切换至DX-2。BFD协议能大大缩短BGP路由的收敛时间。
入云流量设置成active/passive的BGP配置范例(客户本地路由器):
在本地路由器上输入show ip bgp命令,验证DX入云流量active/passive配置生效(第一列中的“>”表示BGP最优路径):
若想把两条专线配置成负载均衡,Local Preference, AS_Path, MED等BGP属性须设置成相同(在本拓扑下均保持缺省设置即可),并在BGP进程中开启ECMP等价路径负载均衡。
入云流量设置成active/active的BGP配置范例(客户本地路由器):
在本地路由器上输入show ip bgp命令,验证DX入云流量active/active配置生效(第一列中的“m”表示multipath,即ECMP负载均衡):
通过show ip route来验证ECMP,下图显示去往云端10.42.0.0/16的路由前缀有两个同时在路由表中生效的下一跳:
出云流量路由设计
从亚马逊云科技到客户本地网络的流量为出云流量。在客户不配置任何BGP路由策略的前提下,云端有默认的出云行为规则,此规则和专线所属的Region有关。一条专线属于哪一个Region,可通过Direct Connect Location查看。假设客户有两条专线DX-1和DX-2,那么就有以下四种场景:
- 场景一:DX-1和DX-2都属于Region A,并位于同一个DX location。
- 场景二:DX-1和DX-2都属于Region A,并位于不同的DX location。
- 场景三:DX-1属于Region A,DX-2属于Region Y,两条DX的Transit VIF都通过DXGW连接Region A中的Transit Gateway和VPC。
- 场景四:DX-1属于Region X,DX-2属于Region Y,两条DX的Transit VIF都通过DXGW连接Region A中的Transit Gateway和VPC。
下面就以上四种场景介绍亚马逊云科技的默认流量传出行为,以及用户如何通过调整BGP路由策略主动控制路由。
场景一、二、四
如果客户路由器从两条专线通告给云端的AS_Path,MED等BGP属性相同,出云流量默认负载均衡。
如果想把两条专线设置成主备模式,比如优选DX-1,备选DX-2,那么就应当调整云端的BGP路由策略。为了达成此目标,客户可以通过修改云端Local Preference,AS_Path,MED,其中任意一个BGP路径属性,从而影响出云流量的路径选择。当前一个BGP属性相同时,则云端才会比较下一个属性。
修改云端BGP路径属性,需要在客户本地路由器上配置BGP路由策略。上文提到了Direct Connect使用EBGP交换云端和本地网络的路由信息,而Local Preference不能传递给EBGP peer。因此,为了修改云端Local Preference值,客户应当在本地路由器上配置BGP community。云端能识别三种BGP community标签:
- 7224:7100 — 低优先级
- 7224:7200 — 中优先级
- 7224:7300 — 高优先级
优先级越高,Local Preference值越大,对应的Direct Connect路径就越优先。出云流量设置成Active/Passive的BGP配置范例(客户本地路由器):
登录位于Region A中的一台EC2主机,traceroute本地服务器,验证DX出云流量active/passive配置生效。下图显示去往主机192.168.58.10的下一跳为169.254.254.21,即优选DX-1。
如果只有两条专线,把想要优选的专线的BGP community标签设置成7224:7300,而无需修改另一条专线的BGP属性。当然,两条专线的BGP community标签分别设置成7224:7300/7224:7200或7224:7300/7224:7100或7224:7200/7224:7100,都能达到主备冗余的效果。
这里介绍了利用设置本地路由器的Local preference BGP community标签,控制出云流量路径选择的方法。在两条专线的Local Preference值相同,或不设置任何BGP community标签的前提下,调整AS_Path或MED,也能实现两条专线的主备切换。
场景三
如果客户路由器从两条专线通告给云端的AS_Path,MED等BGP属性相同,出云流量默认优选DX-1,因为DX-1和云上VPC同属一个Region。
如果想把两条专线设置成负载均衡或优选DX-2,就应当调整本地路由器的BGP路由策略,影响出云方向的选路。和前面三个场景不同的是,该场景的自主路由控制不能仅仅通过调整AS_Path和MED实现。因为两条专线在云端的默认Local Preference值不同,BGP已经选出了最优路径,不会比较AS_Path和MED。因此,该场景必须调整本地路由器的BGP community标签,修改云端的Local Preference。
出云流量设置成Active/Active的BGP配置范例(客户本地路由器):
登录位于Region A中的一台EC2主机,traceroute本地服务器,验证DX出云流量active/active配置生效。下图显示去往主机192.168.58.10的路径会出现两个不同的下一跳,分别为169.254.254.21和169.254.221.9,即两条DX负载均衡。
三条专线及以上
当专线数量增加至三条或更多,需要进行高可用路由设计时,灵活运用Local Preference, AS_Path和MED这三个BGP路径属性就显得尤为重要。
对于入云流量,建议为每一条专线赋上一个Local Preference值,或者长短不同的AS_Path。对于出云流量,如果是场景一、二、四,可以利用Local preference BGP community, AS_Path, MED,其中任何一个BGP属性进行路由控制;如果是场景三,专线数量多于三条时,建议先把所有专线的Local preference BGP community标签设置成相同,然后再调整AS_Path或MED参数。
总结
本文主要讲述了两条AWS Direct Connect连接下的混合云组网最佳实践。在两条甚至更多专线接入场景中,利用亚马逊云科技默认的流量传出行为,以及调整BGP路由策略主动控制入云和出云方向的流量走向,从而满足业务对网络的高可用要求。
参考文档
[1] 如何设置从私有或中转虚拟接口到 AWS 的主/主或主/备 Direct Connect 连接?
[2] 如何通过多条线路影响到达本地的 Direct Connect 连接网络流量路径?