亚马逊AWS官方博客
Direct Connect 零中断切换方案
背景
客户在使用 Direct Connect Gateway(DXGW)与本地数据中心相连时,如果需要更换 DX,例如因供应商更换,或者重新签署合同等,需要将原有 DXGW 切换至重新创建的 DXGW,同时用户希望继续使用 Virtual Private Gateway(VGW)+ DXGW 的架构,并将专线在此次更换中扩展为两条冗余专线,并希望确保在更换 DXGW、专线扩展时尽可能降低对业务的影响。
切换方案
前言
由于 VPC 只可以同时绑定一个 VGW,但可以同时绑定 VGW 及 TGW,因此为实现在扩容时无缝替换,在类似场景,例如专线更换、专线扩容替换、VGW 替换、TGW 替换等需求下,均可采用相同思路。
总体思路
新接入两条 10g DX 专线,利用 Transit Gateway(TGW)使用一条 DX 专线进行临时链路搭建(因为在 VPC 内使用路由表进行切换,可实现秒级切换),最后完成 DXGW 的切换。
由于 DXGW 无法同时绑定 TGW 及 VGW,且如果客户 VPC 中的 VGW 直接和 DXGW 解除,然后更换新 DXGW,会造成业务 10-30 分钟,通常这种方案客户是无法接受的。所以本方案引入 Transit Gateway 来建立新的链路,做临时链路。线路搭建好后,需要用户 IDC 侧、云上 VPC 进行路由调整,以确定流量可以走在临时线路上。然后解除老的 DXGW,在客户账户下建立新的 DXGW 和 VPC 中的 VGW 进行绑定后,进行回切(调整客户 IDC 路由,删除客户 VPC 中静态路由),让业务链路重新使用新创建的 DXGW,完成切换。
为简化表述,我们将老账户 DXGW 称为 DXGW(old),新建的 DXGW 称为 DXGW(new)。
整体网络模型
第一阶段:将生产流量切换到临时的 TGW + DXGW 链路上
在不改变客户现有 DXGW 的前提下,利用客户新申请的一条 10G DX Connect 建立 DXGW-tmp 和 Transit Gateway-tmp 的新的链路,通过切换客户 IDC 的路由和 AWS 云上客户 VPC 中的子网对应的路由表,将业务指向新建 Transit Gateway-tmp 链路(基于 Transit VIF 的 BGP 邻居)。
IDC 测可通过 local preference 等 BGP 属性,优选从 TGW + DXGW 线路传过来的 BGP 路由;也可通过配置 TGW 发送更加明细的路由给 IDC,来影响 IDC 路由器优选该线路。
等待验证通过后(检查路由表,网络连通性和关键业务),将 DXGW(old)与客户 VPC 中 VGW 解除绑定。
第二阶段:重新构建 VGW + DXGW 的链路,将生产流量切到 VGW + DXGW,并删除 TGW + DXGW 临时线路
利用另一条新申请 10G DX Connect 在客户账户下新建 DXGW(本步骤可以提前做好),将新的 DXGW 与客户 VPC 中的 VGW 进行绑定,完成 DXGW 的切换。
最后将客户 IDC 中的路由和 AWS 云上客户 VPC 中路由改回原有链路,完成流量回切。验证网络后,将多余资源清除(临时中转创建 DXGW-tmp 和 Transit Gateway-tmp),最后将 Transit Gateway-tmp 使用的 DX Connect 绑定到客户账户下的 DXGW 上,完成 DX 双链路冗余,整体切换完毕。
资源使用
- 客户新申请两条 10G DX。
- 利用新建 Transit Gateway 建立临时链路,包含一条 10GDX DX Connect 和 DXGW,完成切换后会删除临时链路资源,在切换过程中会因为使用 Transit Gateway 增加小部分费用(费用预计小时级)。
- 最后客户账户下包含两条 10G DX Connect 和一个 DXGW。
切换步骤
整体分为两个大的步骤预演和实际切换,通过预演测试各个链路和节点的联通,增加实际切换的成功率:
1. 使用测试环境预演,步骤如下
验证思路,使用客户新申请的两条 DX,进行切换演练
- 在客户账户下创建新的测试 VPC。
- 利用其中一条 10G DX 创建 DXGW 模拟环境,并将 DXGW 与客户新建 VPC 的 VGW 进行关联,设置客户 IDC 路由(本地 IDC 可以路由测试主机 IP 到 VPC 上的 DXGW),进行联通测试,通过新的 VPC 和本地 IDC 测试资源,模拟客户线上场景。
- 利用其中一条 10G DX 模拟 Transit Gateway-tmp 链路创建,需要新建 Transit VIF 和 DXGW,具体操作流程见此链接。
- 为新建测试 VPC 设置静态路由,将 VPC 中 EC2 所在的子网路由表中,访问 IDC 的路由条目,下一跳设置为 Transit Gateway-tmp,将客户 IDC 测试资源指向 Transit Gateway-tmp 的 Transit VIF (例如 local preference 等)。
- 检查测试 VPC 和 IDC 网络连通性,在测试 VPC 中启动免费机型进行关键业务测试。
- 测试通过后,将 DXGW 与测试 VGW 进行解绑,然后再次操作绑定。模拟更换 DXGW 流程。
- 更换完毕后,将 VPC 中静态路由删除,将客户 IDC 中测试资源路由指向 DXGW。
- 再次进行网络和关键业务测试。
- 清理 Transit Gateway-tmp 相关资源,将 Transit Gateway-tmp 中使用的 10G DX Connect 和 DXGW 进行绑定,整体测试完毕。
- 本过程可多次演练,因为是在新的 VPC 中操作,对已有业务无影响,在设置客户 IDC 内路由时注意不要对业务资源影响。
2. 实际切换,步骤如下
- 利用其中一条 10G DX 模拟 Transit Gateway-tmp 链路创建,完成后整体网络解构如下图所示:
请注意图中 NEW 线路虚线部分,因为没有对客户 IDC 的路由和客户 AWS 中 VPC 进行路由设置,所以整体链路处于未联通状态,对业务无任何影响,可以通过 AWS Console 对新的 DX Conect 和 DXGW 以及 TGW 进行联通状态查看(理论上可以在测试演练环节完成 TGW 的状态确认)。
- 为客户线上 VPC 设置静态路由,将 VPC 中资源指 Transit Gateway-tmp,将客户 IDC 原有指向 DXGW(old)资源,指向 Transit Gateway-tmp 的 Transit VIF(附在 DXGW new 上),结果如下图所示:
- 检查测试 VPC 和 IDC 网络连通性,观察 IDC 和云上务系统有无异常。
- 解除 DXGW(old)与客户 VPC 的 VGW 关联,结果如下图所示:
- 利用另一条新申请 10G DX 创建 DXGW 并将 DXGW 与客户 VPC 的 VGW 进行关联,完成 DXGW 替换,如下图所示:
- 去除 VPC 中 EC2 子网路由表指向 Transit Gateway 的静态路由(切换出云流量),修改 IDC 路由到刚才新建立的 DXGW,进行流量回切,测试网络和业务是否正常。
- 测试完毕后,清理 Transit Gateway-tmp 链路相关资源,将 Transit Gateway-tmp 中使用的 10G DX Connect 和新建 DXGW 进行绑定,完成 DX 双链路冗余,整体切换完毕,如下图所示:
总结
整体到这里切换完毕,后续可以把两条新的 Direct Connect 都链接到 DX Gateway 做高可用。VPC 只可以同时绑定一个VGW,但可以同时绑定 VGW 及 TGW,因此为实现在扩容时无缝替换,在类似场景,例如专线更换、专线扩容替换、VGW 替换、TGW 替换等需求下,均可采用相同思路。