应用的高可用性

本策略指南提供了技术指导和最佳实践,可帮助您在配置了多个可用区或多可用区的 Google Distributed Cloud (GDC) 气隙环境中设计和部署高可用性 (HA) 工作负载。该指南概述了关键的架构模式、服务配置和运营注意事项,这些对于最大限度地减少停机时间并为在 GDC 上运行的应用提供业务连续性至关重要。

高可用性策略适用于参与在 GDC 上设计、部署和管理应用的技术专业人员,包括:

  • 平台管理员群组中的云架构师:在 GDC 上设计弹性基础架构和应用架构。

  • 应用运维人员组中的 DevOps 工程师和站点可靠性工程师 (SRE):为高可用性工作负载实现部署策略、自动化、监控和突发事件响应。

  • 应用运营商组中的应用开发者:构建具备容错能力且与高可用性基础架构模式无缝集成的应用。

如需了解详情,请参阅 GDC 气隙环境文档的受众群体

高可用性的重要性

在现代分布式系统中,规划高可用性至关重要。无论是计划内还是计划外的停机,都可能会严重扰乱业务、造成收入损失、损害声誉并导致用户体验不佳。对于在边缘或私有数据中心使用 GDC 运行的工作负载,可用性通常与核心运营成功直接相关,尤其是对于延迟敏感型或任务关键型应用。从一开始就设计高可用性对于构建弹性可靠的服务至关重要。

在本地提供超大规模功能

GDC 可将 Google Cloud 基础设施和服务扩展到边缘和您的数据中心。GDC 提供全代管式硬件和软件解决方案,让您能够在 GDC 集群和其他Google Cloud 服务上运行 Google Kubernetes Engine (GKE),从而更靠近数据的生成和使用位置。

本指南专门针对以多可用区拓扑配置的 GDC universe。在多可用区模式下,单个 GDC universe 包含同一位置(例如数据中心园区或都市区)内的多个物理隔离的可用区。这些可用区具有独立的电源、制冷和网络,可防范局部物理基础设施故障。GDC 宇宙中各可用区之间的低延迟、高带宽网络连接可实现同步复制和快速故障切换,为构建高可用性应用奠定基础。

可伸缩性和负载均衡

除了基本组件冗余之外,有效管理流量和实现无缝伸缩对于保持高可用性至关重要,尤其是在负载条件变化的情况下。GDC 提供了多种机制,用于实现负载均衡和精细的流量管理。

用于南北向流量的外部负载均衡器

如需将应用公开给 GKE on GDC 集群外部的用户或系统(南北向流量),您可以使用 GDC 的受管外部负载均衡功能。外部负载平衡器 (ELB) 服务提供这些功能,并可与 Kubernetes 无缝集成。

提供高可用性和可伸缩性的 ELB 服务的主要特征如下:

  • 托管式服务:ELB 由 GDC 管理,旨在实现高可用性和高弹性。

  • 外部访问:从 GDC 管理的池中预配稳定的外部 IP 地址,为外部客户端提供一致的入口点。

  • 将负载均衡器与 Kubernetes 集成:当您创建没有特定内部注解的 Kubernetes Service(类型为 type: LoadBalancer)时,系统会自动预配和配置负载均衡器。

  • 可用区感知:在 GDC 宇宙中所有可用的可用区内运行的健康应用 pod 之间分配传入流量。ELB 依靠 Pod 就绪性探测来确定后端健康状况。

  • 可伸缩性:随着应用在节点和可用区之间横向扩缩,处理外部流量的分配。

使用外部负载均衡器是实现外部流量入口高可用性的标准且推荐的方式,因此系统会自动将客户端请求从发生故障的可用区或实例路由出去。

如需了解详情,请参阅配置外部负载平衡器

用于东西向流量的内部负载均衡器

对于在同一 GKE on GDC 集群内运行的服务之间的通信(东西向流量),GDC 提供内部负载均衡器 (ILB)。这对于解耦内部服务以及提供高可用性和可伸缩性的内部通信路径至关重要。

提供高可用性和可伸缩性的 ILB 服务的主要特征如下:

  • 内部访问:预配一个稳定的内部 IP 地址,该地址只能从 GDC 网络内部(例如集群节点或其他内部服务)访问。

  • 负载平衡器与 Kubernetes 的集成:通常通过创建具有特定注解的 Kubernetes Service(类型为 type: LoadBalancer)来预配,以指示它必须是内部的。例如 networking.gke.io/load-balancer-type: "Internal"

  • 可用区感知:将流量分配到所有可用区中通过就绪状态探测识别出的运行状况良好的后端 pod。这种分布方式可防止在某个可用区出现问题时发生内部通信故障。

  • 服务发现和解耦:通过 kube-dns 和 CoreDNS 集成提供稳定的内部 IP 地址和 DNS 名称。服务可以相互发现和通信,从而无需客户端知道各个 pod 的 IP 地址。

  • 可伸缩性:通过在所有可用的运行状况良好的副本之间分配流量,有助于扩展内部后端服务。

使用 ILB 进行内部服务到服务通信可使内部流量在可用区发生故障时保持弹性,并提供有效的伸缩能力,从而补充外部 ELB 和底层计算分布提供的高可用性。这通常用于分层应用,其中前端必须与 Kubernetes 集群中的后端 API 或数据库进行通信。

如需了解详情,请参阅配置内部负载平衡器

跨可用区部署具有异步存储的高可用性应用

借助 GDC,您可以更靠近数据源或最终用户来运行基础架构和应用。在 GDC 环境中实现高可用性对于关键工作负载至关重要。您可以在 GDC 环境中的多个可用区内部署高可用性应用,并实现异步存储复制,以确保数据持久性和灾难恢复。

可用区表示单个宇宙中的不同故障网域。通过在可用区之间分布应用组件和复制数据,您可以显著提高针对局部硬件故障或维护事件的恢复能力。

后续步骤

  • 如需部署一项服务,使其作为一组虚拟机 (VM) 分布在各个可用区中,并使用异步复制的块存储,请参阅部署高可用性虚拟机应用

  • 如需了解如何使用异步复制的永久性卷在 Kubernetes 上跨可用区部署服务作为容器化应用,请参阅部署高可用性容器应用