基于ACK One ALB多集群网关实现异地容灾

ACK One支持通过ALB多集群网关来实现异地容灾系统,异地容灾可以防范地域性质的灾难损害,例如地震、水灾等灾害,但同时会带来更高的延迟、更高的费用及维护成本。本文将介绍通过ALB多集群网关来实现异地容灾系统的架构和使用场景。

方案架构

image
  • 在两个地域中各创建一个ACK集群,并在地域1中创建ACK One舰队和ALB多集群网关,在Cluster 2中安装ALB Ingress Controller,创建出ALB 2,用于冷备。

  • 通过GTM对接地域1中的ALB多集群网关和地域2的ALB实例,以实现地域1发生地质灾害后,可以切换到地域2中的ALB 2。

  • 在舰队中,通过多集群网关实现跨地域的两个集群灵活的7层流量转发,如QUIC的0-RTT、基于header转发等,二者互作灾备。

  • Cluster 1和Cluster 2通过CEN或VPC对等连接等方式打通后,跨地域流量通过专线转发,保证可靠性。

  • RDS数据同步需要依赖中间件自身能力。

方案优势

基于ACK One ALB多集群网关的异地容灾系统方案,具有以下优势:

  • 更强的多集群路由转发能力:提供基于内容的高级路由功能,以及比传统GTM更灵活的健康检查机制,以适应更复杂的应用场景。

  • 统一多集群流量管理入口:通过一个控制面(舰队)管理Ingress配置和服务,更容易扩展和维护服务和应用,降低管理成本。

  • 缓解DNS客户端缓存问题:通过容灾场景可以看出,高频率服务异常或集群异常,无需DNS切换域名解析IP,可实现秒级故障转移。

使用场景

通过ALB多集群网关来快速实现多地域容灾系统主要适用以下场景:

  • 跨地域高可用、本地域资源不足。例如在AI热潮的当下,GPU资源异常紧缺等情况。

  • 客户端应用对时延要求不高,但需要更强的多集群流量管理能力。

完整的容灾能力由ALB多集群网关和GTM共同实现,ALB多集群网关可以统一管理多集群的流量路由和转发。以下故障恢复场景为您介绍何时由GTM切换流量,何时由多集群网关处理。

  • 对于地域1内的集群故障或服务出现异常,或者地域2发生地质灾害时,ALB多集群网关都会自动切流到健康集群,无需切换DNS IP。

  • 只有在地域1发生地质灾害或ALB服务故障时,GTM才会基于健康检查将流量切换到地域2的ALB。

前提条件

步骤一:规划网络及跨地域网络互联互通

  1. 网络规划。

    1. ACK Cluster 1和ACK Cluster 2 位于不同的地域,并且两个集群的Node CIDR和Pod CIDR均互不重叠。

    2. ACK One舰队与ACK Cluster 1在相同地域、相同VPC下。

    3. 已连接两个地域的VPC间网络。具体操作,请参见网络连接,如果采用云企业网,请详见跨地域连接

    4. 打通跨地域VPC网络后,请配置两个ACK集群的安全组允许ALB多集群网关所在VPC访问。具体操作,请参见配置集群安全组

    更多信息,请参见舰队管理网络规划

  2. ACK One舰队关联两个跨地域的ACK集群。具体操作,请参见管理关联集群

步骤二:基于ALB多集群网关实现异地容灾

异地容灾主要流程如下。详细操作,请参见构建同城容灾系统

  1. 使用GitOps应用分发 向两个集群分发应用,保证应用的一致性。

  2. 在ACK One舰队中通过创建AlbConfig来创建ALB多集群网关,并将两个ACK集群添加到网关。

  3. 根据如下示例在ACK One舰队中创建路由/转发规则(Ingress)实现同城异地容灾。更多路由能力,请参见不同场景下的流量管理方式配置Ingress

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      annotations:
        alb.ingress.kubernetes.io/listen-ports: |
         [{"HTTP": 8001}]
        alb.ingress.kubernetes.io/cluster-weight.${cluster1-id}: "20"
        alb.ingress.kubernetes.io/cluster-weight.${cluster2-id}: "80"
      name: web-demo
      namespace: gateway-demo
    spec:
      ingressClassName: alb
      rules:
      - host: alb.ingress.alibaba.com
        http:
          paths:
          - path: /svc1
            pathType: Prefix
            backend:
              service:
                name: service1
                port:
                  number: 80

步骤三:定期备份Ingress资源

为了保证地域1发生故障时服务的持续运行,应定期备份地域1舰队中的Ingress资源和AlbConfig。在故障发生时,将这些Ingress资源同步到Cluster 2,使ALB 2能够将流量转发到Cluster 2的后端服务,从而确保服务的正常运行。

您可以自行选择备份方式,例如将数据备份到地域2的OSS等。

步骤四:配置GTM主备容灾

完成上述步骤后,您将具备对异地两个集群的统一管理能力以及部分容灾能力。当地域1的集群或服务出现异常,或者地域2发生故障时,ALB多集群网关将自动平滑地将流量故障转移。此外,对于地域1发生地质灾害或地域1 ALB服务故障的情况,我们借助云解析DNS的全局流量管理(GTM)进行主备容灾管理。本步骤可在地域1发生故障时,再做配置。具体流程如下:

  1. 在地域2的ACK Cluster 2中通过ALB Ingress创建ALB实例。相关操作,请参见创建AlbConfig

  2. 将地域1的ALB多集群网关和地域2的ALB实例的DNSName配置到GTM,形成主备结构,以便在地域1发生故障时,GTM可以基于健康检查自动切换到由地域2提供服务。相关操作,请参见GTM如何实现主备容灾

    说明

    此步骤中的GTM切换仍会因DNS客户端的本地缓存问题而导致较长时间的服务中断。