应用的高可用性

本文档提供了有关在 Google Distributed Cloud (GDC) 气隙宇宙中跨多个可用区设计和部署高可用性 (HA) 工作负载的技术指南和最佳实践。本指南概述了关键架构模式、服务配置和运营注意事项,以最大限度地减少停机时间并确保业务连续性。

本文档中的策略适用于以下技术专业人员:

  • 设计弹性基础架构和应用架构的云架构师。

  • 为 HA 工作负载实现部署策略、自动化、监控和突发事件响应的 DevOps 工程师和网站可靠性工程师。

  • 构建与 HA 模式集成的容错应用的应用开发者。

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

高可用性的重要性

在现代分布式系统中,规划高可用性至关重要。 停机可能会导致业务严重中断、收入损失和用户体验不佳。

对于使用 GDC 在私有数据中心运行的工作负载,可用性通常与核心运营成功直接相关,对于延迟敏感型或任务关键型应用尤其如此。从一开始就设计高可用性对于构建弹性可靠的服务至关重要。

GDC 在气隙环境中提供超大规模功能,其中包含多个断开连接的数据中心或可用区。 多可用区应用的高可用性取决于多可用区服务,例如负载均衡和异步存储。如需详细了解用于实现高可用性的重要服务,请参阅本文档的可伸缩性和负载均衡以及使用异步存储跨可用区部署 HA 应用部分。

本地提供的超大规模功能

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

本文档重点介绍在多可用区拓扑中配置的 GDC 宇宙。在此配置中,单个 宇宙 包含同一位置内的多个物理隔离的 可用区

这些可用区具有独立的电源、制冷和网络,可防止本地物理基础架构发生故障。可用区之间的低延迟、高带宽网络连接支持数据复制和快速故障切换,为构建高可用性应用奠定了基础。

可伸缩性和负载均衡

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

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

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

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

  • 托管式服务:作为 GDC 特有的服务运行,专为经过网闸隔离的环境中的高可用性和弹性而设计。

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

  • 负载均衡器与 Kubernetes 集成:在您创建没有特定内部注解的 type: LoadBalancer 的 Kubernetes Service 时,自动预配和 配置负载均衡器。

  • 可用区感知:将传入流量分配到 GDC 宇宙中所有可用可用区内运行的运行状况良好的应用 Pod。ELB 依赖于 Pod 就绪性探测来确定后端运行状况。

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

为了实现外部流量入口的高可用性,以便客户端请求自动从发生故障的可用区或实例路由出去,我们建议使用外部负载平衡器。

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

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

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

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

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

  • 负载平衡器与 Kubernetes 集成:通过 创建 Service 的 Kubernetes type: LoadBalancer 并使用特定 注解来指明它必须是内部的,从而预配负载均衡。例如, networking.gke.io/load-balancer-type: "Internal"

  • 可用区感知:将流量分配到所有可用可用区中运行状况良好的后端 Pod(通过就绪性探测 进行识别)。如果某个可用区出现问题,这种分配方式可以防止内部通信失败。

  • 服务发现和分离:提供稳定的内部 IP 地址 和 DNS 名称,并与 kube-dns 和 CoreDNS 集成。服务可以相互发现和通信,无需客户端知道各个 Pod IP 地址。

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

将 ILB 用于内部服务到服务通信可使内部流量流对可用区故障具有弹性,并提供有效的伸缩,从而补充外部 ELB 和底层计算分配提供的高可用性。此策略通常用于分层应用,其中前端 API 必须与 Kubernetes 集群内的后端 API 或数据库进行通信。

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

使用异步存储跨可用区部署 HA 应用

GDC 可让您在更靠近数据源的位置运行基础架构和应用。如需部署具有弹性数据源的 HA 应用,请实现异步存储复制,以实现数据持久性和灾难恢复。

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

如需了解详情,请参阅 使用多可用区存储实现数据保护

后续步骤