网络架构容灾

更新时间:

网络是数字世界的基础设施,没有网络的联通,所有信息都无法交互,因此网络架构的设计在应用系统中至关重要,特别是针对网络架构的高可用及容灾能力的设计,是业务在异常发生时,实现快速恢复、降低业务损失的关键。

云上网络规划设计

为满足云上网络安全、可扩展及高可用的需求,云上网络规划设计应满足以下原则:

  • 预留IP地址空间用于网络扩容

  • 在单个Region中,预留IP地址空间用于新建VPC;

  • 在单个VPC中,预留IP地址空间用于新建交换机;

  • 在单个交换机中,需要关注交换机的剩余可用IP地址数目。

  • 规划不同Region、可用区及业务系统的IP地址空间

  • 在单个Region中,根据业务需求规划不同的VPC,各VPC使用独立的IP地址空间;

  • 在单个VPC中,根据业务需求规划交换机的可用区、IP地址空间;

  • 部分云服务可能短时间占用较多IP地址,可考虑针对性规划交换机避免IP地址资源不足。

云上网络互联方案设计

大型企业一般都会有多个部门,每个部门又由多个团队组成,例如开发、测试、运维等。不同部门和团队使用云产品时,一般会使用多个VPC把业务隔离,不同的VPC承载不同部门或团队的业务。但不同团队和部门间在特定场景下也需要互相访问双方的服务,这时就需要实现不同VPC间的互通。

实现不同VPC之间的互通在阿里云上有两个主要方式:VPC对等连接及云企业网。

  1. 使用VPC对等连接两两互通:两两VPC之间需要互通的都需要配置对应的对等连接,在VPC数量较多的场景下,需要建立较多的对等连接,对网络管理复杂度有比较高的挑战。

  1. 使用云企业网实现fullmesh全互通:所有需要互通的实例,例如VPC/VBR/VPN等,都连接到云企业网CEN,云企业网CEN就像一个Hub一样连接所有实例,任意一个VPC无论想与哪个VPC互通,都先经过CEN进行转发路由,这样降低了网络配置的复杂度。而且云企业网上可以配置丰富的路由策略,限速规则等功能,可以更好的满足大型企业的组网需求。

互联网出口设计

在设计云上互联网出口建设方案时,应满足以下原则:

  • 避免不必要的公网暴露

  • 云服务器ECS使用固定公网IP或者弹性公网IP的时候,通过安全组限制端口暴露面;

  • 用网络云服务(如负载均衡SLB、公网NAT网关)为云服务ECS提供公网访问入口,而非直接在云服务器ECS上使用公网IP。

  • 合理使用公网NAT网关实现云上公网访问

  • 在安全访问较严格的场景中,使用主机粒度SNAT规则而非交换机粒度SNAT规则;

  • 同一SNAT规则中各EIP带宽上限应保持一致;

  • 根据业务需求使用不同的EIP配置不同的SNAT规则;

  • 注意SNAT规则中EIP数目所能提供的并发连接数上限是否满足业务需求。

  • 合理使用共享带宽提升云上公网访问能力

  • 建议不同流量模型的业务使用不同的共享带宽实例,以便于配置不同的计费方式,降低业务成本;

  • 建议为对公网带宽有资源隔离需求的业务配置单独的共享带宽实例。

混合云互通高可用设计

随着企业逐步将新增业务、对外业务系统部署至云上,一些原有自建IDC机房的企业就需要打通云上和IDC以组成混合云。同时部分企业为了进一步提升业务高可用,也会使用多家云厂商的资源,以实现单家云厂商故障时,业务的快速逃逸,因此不同云厂商之间的往来互通也是混合云组网的必要条件。

实现混合云组网建设应满足以下原则:

  1. 链路冗余性:在混合云组网中需要至少两条线路进行冗余或者主备负载,当一条链路异常的时候可以切换到另外一条线路。实现链路冗余大体可以分为以下几类:

    • 双专线冗余:通过两条专线与IDC/其它云互通,其中一条链路中断可以快速切换到另外一条线路,需要注意在进行专线接入的时候尽可能选择两个不同的专线接入点提升高可用。如果为了满足业务对延迟等需求,必须选择相同接入点,也必须保证两条专线在两个不同的接入设备上,这样即使有一台设备故障导致其中一条线路异常时,也可以保证另外一条线路正常运转。

    • 专线/VPN主备:在物理专线、IPSec-VPN连接、BGP动态路由协议均正常运行的情况下,VPC实例可以通过物理专线和IPSec-VPN连接同时学习到本地IDC的网段,本地IDC也可以通过物理专线和IPSec-VPN连接同时学习到VPC实例的路由。系统默认通过物理专线学习到的路由的优先级高于通过IPSec-VPN连接学习到的路由,因此VPC实例和本地IDC之间的流量默认通过物理专线传输。当物理专线异常时,系统会自动撤销通过物理专线学习到的路由,通过IPSec-VPN连接学习到的路由会自动生效,VPC实例和本地IDC之间的流量会通过IPSec-VPN连接进行传输;当物理专线恢复后,VPC实例和本地IDC之间的流量会重新通过物理专线进行传输,IPSec-VPN连接会重新成为备用链路。此方案相比双专线冗余方案可节约成本,因IPSec-VPN成本较专线更低。但IPSec-VPN可承载流量上限一般不超过1Gbps,对于流量较小的业务可以采用此方案。

    • VPN冗余:如果本地数据中心拥有多个本地网关设备(本地网关设备上均拥有公网IP地址),用户可以使用其中的2个本地网关设备分别与阿里云专有网络VPC(Virtual Private Cloud)建立IPSec-VPN连接,每个IPSec-VPN连接关联不同的VPN网关,实现本地数据中心与VPC之间链路的高可用,同时实现流量的负载分担。本地数据中心可以分别通过两个VPN网关学习到VPC的路由,本地数据中心去往VPC的流量可以同时通过这两个VPN网关进行传输,实现流量的负载分担。在其中一个VPN网关不可用时,当前VPN网关下的流量默认会自动通过另一个VPN网关进行传输,实现链路的高可用。VPC可以分别通过两个VPN网关学习到本地数据中心的路由,但是VPC默认仅通过一个VPN网关(系统优先选择实例ID较小的VPN网关)转发从VPC去往本地数据中心的流量,在当前VPN网关不可用后,才会通过另一个VPN网关转发流量(系统自动切换),因此VPC去往本地数据中心的流量可以通过两个VPN网关实现链路的高可用,但不支持负载分担。

  2. 带宽容量设计:在选择混合云互通方案的时候,一定要考虑互通的带宽容量需求,不同的带宽对方案的选型至关重要,例如大型企业对混合云流量需求较大,可达到数Gbps或者上百Gbps,此时就需要使用冗余专线的方案,而且需要确保冗余专线的水位保持在50%以下,达到或者接近50%就需要及时扩容,因为两条专线都在50%的水位运行,当有一条线路异常的时候,流量就会全部负载到另外一条线路,导致另外一条线路水位达到100%无法承接所有流量从而影响业务。

  3. 链路快速倒换:如果企业已经实现了冗余线路打通IDC,也需要通过技术方案实现异常时的快速切换。

    • 双专线冗余:专线场景下可以使用BGP与IDC互通,也可以使用静态路由。如果使用BGP建议配合BFD协议来实现冗余切换,当链路异常的时候BFD可以在毫秒级别探测到线路异常,快速撤销异常路由,使流量转发到正常线路。如果使用静态路由方式与IDC互通,需要在云上配置健康检查功能,通过健康检查实时探测专线质量,如果探测失败立即切换线路到正常线路。

    • 专线/VPN主备:专线和VPN主备场景下,无法支持线路的冗余,而且只能支持专线为主,VPN为备,因为一般专线的可用性是高于VPN的。专线和VPN使用BGP协议学习IDC路由,当线路异常时专线BGP路由撤销,路由经过VPN进行转发。

    • VPN冗余:VPN的冗余方案与专线类似,也是通过BGP路由撤销方式来快速倒换路由到正常链路。

业务服务高可用设计

现在企业对业务可用性要求越来越高,但是物理设备异常,应用异常,网络抖动等情况无法避免。为应对异常情况就需要设计服务的高可用。如果业务只使用单台ECS服务器对外提供服务,假设此台ECS业务异常就会导致业务受损,而且恢复时间往往无法预估。但是如果配置多台服务器直接对外提供访问,业务上又需要将域名解析到多个ECS外网IP,当ECS服务很多的时候就会导致解析数量巨大不易于管理,而且不利于弹性扩缩容。

为实现服务高可用的目标可以使用阿里云负载均衡产品。负载均衡代理多台后端真实的业务服务器对外服务,真实服务器不对外暴露,也无需配置公网IP。当某台后端服务器异常时候,负载均衡可以自动的隔离服务器,使业务转发到正常的服务器上继续提供服务从而达到业务高可用的能力。

负载均衡实例采用集群部署,可实现会话同步,以消除服务器单点故障,提升冗余,保证服务的稳定性。其中四层负载均衡通过LVS(Linux Virtual Server)+ keepalived的方式实现,七层负载均衡通过Tengine(淘宝网发起的Web服务器项目,在Nginx的基础上,针对有大访问量的网站需求进行了优化)实现。

来自公网的请求通过等价多路径路由(ECMP)到达LVS集群,LVS集群内的每台LVS通过组播报文将会话同步到该集群内的其它LVS机器上,从而实现LVS集群内各台机器间的会话同步。同时,LVS集群会对Tengine集群进行健康检查,将异常机器从Tengine集群移除,保证七层负载均衡的可用性。

单CLB实例的高可用

为了向广大用户提供更稳定可靠的负载均衡服务,阿里云负载均衡已在大部分地域部署了多可用区以实现同地域下的跨机房容灾。当主可用区出现故障或不可用时,负载均衡有能力在非常短的时间内(约30秒)切换到备可用区并恢复服务;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务。

  1. 为了更好的利用负载均衡的主备可用区机制,建议在支持主备可用区的地域创建负载均衡实例,即在购买负载均衡实例时选择可用区类型为多可用区的地域。

  2. 当选择CLB的主备可用区时,可以根据ECS实例的可用区分布进行选择。将大部分ECS实例位于的可用区选择为CLB的主可用区,以获取最小的访问延迟。但并不建议将全部ECS实例都部署在同一可用区内,建议在CLB的备可用区同时部署少量ECS实例,以保障在极端情况下(主可用区整体不可用时),切换到备可用区后仍旧可以正常处理负载均衡转发的请求。

多CLB实例的高可用

如果业务对可用性的要求较高,单台负载均衡实例自身的可用性保障机制可能无法满足高可用需求。例如当网络攻击或配置错误等情况导致负载均衡实例不可用时,由于未出现可用区级故障,不会触发负载均衡实例的可用区切换。此时,建议创建多个CLB实例,通过云解析DNS对访问进行调度,或通过全球负载均衡解决方案实现跨地域容灾备份。可以在一个地域内的多个可用区或多个地域内部署负载均衡实例和后端ECS实例,然后使用云解析DNS对访问进行调度。

后端ECS实例的高可用

负载均衡通过健康检查来判断后端ECS实例的可用性。健康检查机制提高了前端业务整体可用性,避免了后端ECS异常对总体服务的影响。

开启健康检查功能后,当后端某个ECS实例健康检查出现异常时,负载均衡会自动将新的请求分发到其他健康检查正常的ECS实例上,而当该ECS实例恢复正常运行时,负载均衡会将其自动恢复到负载均衡服务中。为了使健康检查功能正常运作,需要开启并正确配置健康检查。

流量容灾调度

随着互联网的快速发展,为保证业务的持续高可用,同城多活、异地多活已成为各企业的不二之选。服务设置多中心,中心内部多地址负载,是多数企业采用的常规做法。这种情况下,如何对流量进行有效控制以达到最佳的用户访问效率、部分地域业务异常如何快速业务容灾到其他地域,业务具备全球流量调度以及容灾能力变得尤为重要,列举其中几个典型场景。

  • 业务需要实现用户就近访问服务中心减少网络耗时。

  • 服务中心多个IP地址如何实现负载均摊或者权重轮询,且保证整体负载的稳定性。

  • 服务中心某IP地址故障后,快速发现并实现隔离,地址恢复后自动添加至解析列表,完全无需人为干预。

  • 当某中心故障发生时,快速切流到其他中心,减少中断时间。

阿里云全局流量管理(Global Traffic Manager,简称GTM)可以有效解决上面几个问题,它基于阿里云DNS入口调度和分布式云监控,旨在帮助企业实现用户访问应用服务的就近接入、高并发负载均摊、应用服务的健康检查,并能够根据健康检查结果实现故障隔离或流量切换,方便企业灵活快速的构建同城多活和异地容灾服务。

与传统DNS解析相比,GTM主要具备如下特点:

地址池: 传统DNS解析到单个地址,而GTM则引入地址池概念。如下图中的PoolA/B/C所示,一个地址池代表一组提供相同应用服务,即具备相同运营商或地区属性的IP地址或域名地址。通过地址池可对应用服务的IP地址进行统一管理。实现将终端用户访问解析到应用服务地址池(如下图中序号1所示),既可实现高负载情况下的流量均摊,又可实现自定义流量分配。同时当地址池整体不可用时,可以做备份切换。

健康检查: 依托于云监控强大的分布式监控功能,GTM新增了HealthCheck模块,如下图中序号2所示,从多个地区对地址池内的多个应用服务IP地址发起健康探测,目前已支持HTTP/HTTPS、TCP、ping三种方式。当地址池中地址发生故障时,HealthCheck模块会准确的检测到异常情况并与DNS交互(如下图中序号3所示),摘除故障地址(如下图中序号4所示),这样用户端会自动解析到可用的地址池(如下图中序号5所示)。并当故障地址恢复时,自动恢复至解析返回列表。

访问策略: 访问策略旨在解决根据请求来源和地址池健康情况进行地址池切换的问题。既能做到地址池维度智能解析,又可实现故障自动切换功能。当地址池整体出现故障时,GTM会根据用户自定义策略进行地址池分钟级切换,并当地址池恢复时切回。

(应用上云规划-应用上云实施-图5)  备份 5 2.jpg

异地容灾

下面以异地双活为例介绍如何借助GTM实现快速容灾切换。如下图所示,某服务的用户主要分为海外用户和中国或中国内地用户,后端服务采用一套部署方案。通过GTM对不同地区用户请求进行智能调度,将用户访问请求流量路由至不同的接入服务点,即海外用户访问新加坡中心(Singapore),中国或中国内地用户访问杭州中心(CN-Hangzhou)。当某站点发生故障灾难时,各接入站点自建互相备份,最终实现业务的高可用。

(应用上云规划-应用上云实施-图5)  备份 6 2.jpg

通过以下5个步骤接入GTM,实现异地容灾:

  1. 全局配置:基础配置,主要配置负载均衡策略、全局TTL、报警通知组等相关信息。

  2. 地址池配置:新建地址池Singapore和CN-Hangzhou。每个地址池中均配置该区域下多个服务IP,以及最小可用地址数量。当地址池存活地址数小于该地址池数量时,则地址池视为不可用。此外,根据全局配置中负载均衡策略自动实现流量分配。

  3. 开启健康检查:即对地址池中的IP地址配置健康检查,开启后可实现实时监测地址的可用性状态。根据地址的可用性进行故障自动隔离,并通知相应报警组。当地址恢复后,自动添加至解析列表。此外,当地址池整体出现问题时,触发默认地址池与备用地址池之间自动切换。能达到5分钟内,90%流量的切换速度。

  4. 访问策略配置:根据用户的请求来源设置最终用户访问哪一个地址池。如图所示,海外用户希望访问Singapore地址池,则需设置相应访问策略,请求来源设置海外地区,默认地址池为Singapore,备用地址池设置CN-Hangzhou。则正常请求下,则海外用户访问Singapore中心,发生故障后会快速切换至CN-Hangzhou中心。

  5. CNAME接入配置:需要将用户访问的主域名CNAME至全局流量管理的实例域名,才能最终实现对应用服务进行容灾、智能接入。即将图中的www.cloud-example.com CNAME到我们提供的接入域名。

配置完成后,我们将根据健康配置实时探测地址池中地址,当地址发生报警时,则根据下图的流程进行判断,实现容灾切换,以上图中IP地址A报警为例。由此可见,当默认地址池(Singapore)地址池可用时,则解析列表摘除地址A,当默认地址池整体不可用时则切换备用地址池(CN-Hangzhou),切换过程自动完成,并缩小时间至分钟级。从而有效保证异地容灾的切换效率。

image.png

容灾预案

此外,全局流量管理新增的容灾预案功能可以帮助用户实现日常容灾演练,或在应用服务出现故障时实现快速切换流量。容灾预案支持批量地址池故障模拟及回滚,帮用户验证切换策略是否符合预期。