为了防范基础设施中断或配置错误,您可以为全球外部应用负载均衡器设计故障切换策略。这些策略使用区域级外部应用负载均衡器,并从全球外部应用负载均衡器向其路由流量,以便在全球基础设施中断或配置错误期间保持高可用性。
在故障切换架构中,您需要部署一个主负载均衡器和一个或多个备用负载均衡器:
- 主负载均衡器是全球外部应用负载均衡器,可在正常运行期间处理客户端流量。
- 备用负载均衡器是一种区域级外部应用负载均衡器,当主负载均衡器无法通过健康检查时,它会接收流量。
故障切换和故障恢复是自动流量路由过程:
- 当 Cloud DNS 检测到服务中断并将流量从主负载均衡器路由到备用负载均衡器时,会发生故障切换。
- 当 Cloud DNS 反转此路由并在健康检查通过后将流量重定向到主负载均衡器时,会发生故障恢复。
本文档介绍了从全球外部应用负载均衡器到区域级备份负载均衡器的故障切换。如果您想在不同区域的区域级外部应用负载均衡器之间配置故障切换,请参阅区域级外部应用负载均衡器的高可用性。
为何使用区域级负载均衡器进行故障切换
区域级外部应用负载均衡器最适合用作全球外部应用负载均衡器的故障切换负载均衡器,因为它们具有以下属性:
- 区域级外部应用负载均衡器在各个Google Cloud 区域内独立运行,并且与同一区域中运行的任何全球外部应用负载均衡器基础设施隔离。
- 区域级外部应用负载均衡器和全球外部应用负载均衡器都基于 Envoy 代理,并且处理流量的方式非常相似。
如需为全球外部应用负载均衡器实现全球到区域级故障切换,请在您希望将流量故障切换到的区域中创建两个或更多区域级外部应用负载均衡器。
故障切换策略
您可以使用以下策略为全球外部应用负载均衡器实现故障切换:
- 主动-被动(从全球到区域的故障切换):您部署一个或多个区域级外部应用负载均衡器,仅用于备份。在稳定状态下,Cloud DNS 会解析为全球外部应用负载均衡器的 IP 地址。如果全球负载均衡器发生故障,Cloud DNS 会将流量路由到备用区域级负载均衡器。此配置使用 Cloud DNS 故障切换路由政策。
- 主动-主动(全球到区域的绕过):全球外部应用负载均衡器充当边缘前端,提供 Cloud CDN 功能(例如边缘缓存),该功能使用完全限定域名 (FQDN) 通过互联网网络端点组 (NEG) 将请求转发到区域级外部应用负载均衡器。在稳定状态下,流量会依次流经两个负载均衡层。这可以使用 Cloud DNS 地理定位路由政策进行配置。如果全球负载均衡器发生中断,DNS 路由政策会绕过全球层,直接将客户端流量路由到区域负载均衡器。
作为最佳实践,如果您的架构不依赖于容量感知型全球后端负载均衡,则最好采用主动-主动策略。不过,如果您的应用明确需要全球后端负载均衡来根据后端容量在各个区域之间分配和溢出流量,请实现主动-被动策略。
故障切换策略比较
下表比较了主动-被动和主动-主动故障切换策略:
| 策略属性 | 主动/被动 | 主动/主动 |
|---|---|---|
| 稳态流量 | 客户端 → 全球外部应用负载均衡器 → 后端 | 客户端 → 全球外部应用负载均衡器 → 区域级外部应用负载均衡器 → 后端 |
| 故障状态下的流量流 | 客户端 → 区域级外部应用负载均衡器 → 后端。 该服务仍可使用,但由于边缘性能优势的丧失,延迟时间可能会增加。 |
客户端 → 区域级外部应用负载均衡器 → 后端(绕过全球外部应用负载均衡器)。 该服务仍可使用,但由于边缘性能优势的丧失,延迟时间可能会增加。 |
| 配置管理 | 需要跨全球和区域级负载均衡器同步独立配置。 | 由于大多数应用逻辑都位于区域级负载均衡器上,因此全球层所需的配置最少。不过,您必须在两个层上复制边缘安全政策 (Cloud Armor) 和连接终止配置 (TLS 证书)。 |
| 可靠性验证 | 区域级外部应用负载均衡器在稳定状态下处于空闲状态。建议进行定期测试或 DNS 微流量测试。 | 稳态流量会持续测试区域级外部应用负载均衡器。建议定期测试或直接向区域负载均衡器发送微流量。 |
| 渐进式部署安全 | 全球外部应用负载均衡器配置更改会全局应用。区域级外部应用负载均衡器变更是隔离的,但稳态流量不会对其进行测试。 | 您可以逐步应用区域级外部应用负载均衡器更改,按区域进行。如果某个区域发生故障,全局层会自动将流量从该区域路由到健康状况良好的区域。 |
| 全球后端负载均衡 | 支持 全球外部应用负载均衡器可以根据容量在不同区域的后端之间平衡流量。 |
受限 全球外部应用负载均衡器会将流量路由到最近的区域级外部应用负载均衡器。区域级负载均衡器仅在本地平衡流量,不会根据后端容量跨区域溢出流量。 |
| 费用和结算 | 数据处理费适用于单个负载均衡层。在稳定状态下,费用来自全球外部应用负载均衡器;区域级外部应用负载均衡器的费用仅在测试或发生故障切换事件时收取。 | 由于流量在稳定状态下会同时流经全球层和区域层,因此这两个负载均衡层会同时产生数据处理费用。 |
| 推荐的使用场景 | 需要高级全球后端负载均衡和基于容量的跨区域流量溢出的工作负载。 | 围绕区域隔离设计的工作负载,使用全球层来实现边缘性能和缓存。 |
主动-被动策略
在主动-被动配置中,您可以在一个或多个区域中部署独立的区域级外部应用负载均衡器,同时部署主要全球外部应用负载均衡器或传统应用负载均衡器。
主动-被动故障切换的运作方式
以下设置演示了如何从一个全球外部应用负载均衡器故障切换到两个备用区域级外部应用负载均衡器(全球负载均衡器在其中部署了后端的每个区域中各一个)。
主动-被动故障切换遵循以下工作流:
- 稳定状态:Cloud DNS 将所有客户端流量路由到全球外部应用负载均衡器。
- 故障检测: Google Cloud 使用配置了三个来源区域的健康检查来检测主负载均衡器是否健康状况良好。如果来自两个或更多来源区域的健康检查失败,Cloud DNS 会触发故障切换。
- 故障切换:Cloud DNS 故障切换路由政策会将客户端流量直接路由到备用区域级外部应用负载均衡器。故障切换期间的延迟影响:由于区域级外部应用负载均衡器会在特定 Google Cloud 区域内终止连接,因此在故障切换处于有效状态时,位于目标区域较远位置的客户端可能会遇到延迟和往返时间 (RTT) 增加的情况。
- 故障恢复:在健康检查再次成功后,Cloud DNS 会自动将流量恢复到主负载均衡器,而不会出现停机时间,因为两个负载均衡器都在处理流量。
主动-主动策略(从全局到区域的绕过)
在主动-主动策略中,全球外部应用负载均衡器使用互联网 FQDN NEG (INTERNET_FQDN_PORT) 将流量发送到两个或更多区域中的区域级外部应用负载均衡器。
主动-主动旁路的运作方式
以下设置演示了如何从一个全球外部应用负载均衡器故障切换到两个备用区域级外部应用负载均衡器(全球负载均衡器在其中部署了后端的每个区域中各一个)。
主动-主动故障切换遵循以下工作流程:
- 稳态:流量从客户端流向全球外部应用负载均衡器。全球负载均衡器使用类型为
INTERNET_FQDN_PORT的互联网 FQDN 网络端点组 (NEG) 将流量转发到最近的区域级外部应用负载均衡器。然后,区域级负载均衡器将流量传递到本地后端。 - 故障检测:在稳定状态下,如果单个区域级外部应用负载均衡器或其区域发生故障,全球外部应用负载均衡器会通过互联网 NEG 上的 Cloud DNS 健康检查政策检测到该故障。全球负载均衡器会自动将流量从健康状况不佳的区域路由到健康状况良好的区域级负载均衡器。
- 绕过:如果全球外部应用负载均衡器发生中断,Cloud DNS 故障切换政策会检测到故障,并将流量直接路由到区域级外部应用负载均衡器,从而完全绕过全球层。 绕过期间的延迟影响:全球外部应用负载均衡器可提供边缘性能优势,例如在更靠近用户的位置终止连接和进行边缘缓存。当流量绕过全球负载均衡器时,客户端连接会直接与区域级 VIP 建立,这可能会增加地理位置较远的客户端的连接延迟时间和 RTT。
- 故障恢复:当全球负载均衡器连续通过健康检查时,Cloud DNS 会自动恢复在 DNS 响应中返回全球任播 VIP,从而恢复全球边缘路由层。
查看主负载均衡器配置
在配置故障切换之前,请确认备用区域级外部应用负载均衡器支持主负载均衡器使用的功能。
- 在主动-被动模式下,备用区域级负载均衡器必须支持类似的功能,以便在中断期间无缝接管流量。
- 在主动-主动模式下,核心路由和安全规则必须直接在区域层级配置,而全局边缘功能(例如 Cloud CDN)会在全球性中断期间被绕过。
| 功能 | 兼容性要求 |
|---|---|
| Google Kubernetes Engine 部署 | 使用 GKE 网关部署主负载均衡器和备用负载均衡器。这是因为与使用 GKE Ingress 控制器部署的负载均衡器相比,使用 GKE 网关部署的负载均衡器与此故障切换机制更兼容。GKE Ingress 控制器仅支持传统应用负载均衡器。 |
| Cloud CDN | 区域级外部应用负载均衡器不支持 Cloud CDN。如果发生故障切换,依赖于 Cloud CDN 的操作会受到影响。 |
| Cloud Armor | 如果您在主负载均衡器上使用 Cloud Armor,请在备用负载均衡器上配置等效的区域级 Cloud Armor 安全政策。Cloud Armor 在区域范围和全球范围内提供的功能有所不同。如需了解详情,请参阅区域级 Cloud Armor 安全政策和全球级 Cloud Armor 安全政策。 |
| SSL 证书 | 验证主负载均衡器使用的 SSL 证书类型是否与备用区域级外部应用负载均衡器兼容。查看可与全球负载均衡器、区域级负载均衡器和传统负载均衡器搭配使用的 SSL 证书之间的差异。如需了解详情,请参阅 Compute Engine SSL 证书和 Certificate Manager SSL 证书。 |
区域级负载均衡器的注意事项
在希望在发生故障时将流量重定向到的区域中配置并部署区域级外部应用负载均衡器。
配置区域负载均衡器时,请注意以下有关故障切换或绕过架构的注意事项:
您必须将备用区域级外部应用负载均衡器的功能配置为与主负载均衡器尽可能相似,以便在两个部署中以类似方式处理流量。
全球外部应用负载均衡器。区域级外部应用负载均衡器支持与全球外部应用负载均衡器相同的大多数功能,但有一些例外情况。区域级负载均衡器还支持与全球负载均衡器相同的高级流量管理功能,这有助于更轻松地在主负载均衡器和备用负载均衡器之间实现等效。
传统应用负载均衡器。使用传统应用负载均衡器时,主负载均衡器和备用负载均衡器之间更难实现对等的功能,因为区域级外部应用负载均衡器是一种基于 Envoy 的负载均衡器,以不同的方式处理流量。请确保在部署到生产环境之前全面测试故障切换和故障恢复。
如需查看区域级应用负载均衡器、全球应用负载均衡器和传统应用负载均衡器的具体功能,请参阅“负载均衡器功能比较”页面。
我们建议您使用 Terraform 等自动化框架,以帮助在主部署和备用部署之间实现并维护负载均衡器配置的一致性。
区域级外部应用负载均衡器支持 Network Service Tiers 高级层级和标准层级。如果延迟时间不是您在故障切换期间的主要问题,我们建议您使用标准层级设置备用区域级外部应用负载均衡器。使用标准层级基础架构可进一步与全球外部应用负载均衡器使用的高级层级基础架构隔离。
确保代理专用子网的大小足以容纳故障切换事件期间增加的流量,而不会中断同一区域和网络中的其他区域级负载均衡器。如需了解详情,请参阅预留额外的代理专用子网容量。
如需了解如何配置区域级外部应用负载均衡器,请参阅设置具有虚拟机实例组后端的区域级外部应用负载均衡器。
预留额外的代理专用子网容量
一个区域和 VPC 网络中的所有基于 Envoy 的区域级负载均衡器都共享同一个 Envoy 代理池。在故障切换事件中,备用区域级外部应用负载均衡器的代理使用量会增加,以处理来自主负载均衡器的故障切换流量。预留足够的代理容量可确保故障切换事件不会中断同一区域和网络中的其他基于 Envoy 的区域级负载均衡器。
如需确保备用负载均衡器始终有足够的容量可用,请检查代理专用子网的大小。我们建议您计算在指定区域中处理流量所需的代理数量估算值,并根据需要增加容量。如需详细了解代理容量限制和大小调整计算,请参阅“Cloud Load Balancing 价格”中的代理实例费用部分。
如果您使用 DNS 政策在不同区域中的多个备用负载均衡器之间拆分流量,则必须在估算每个区域和网络的代理要求时考虑到这一点。较大的代理专用子网使Google Cloud 在必要时可以向负载均衡器分配较多的 Envoy 代理。
扩展代理专用子网的方式与扩展主要地址范围的方式不同(使用 expand-ip-range 命令)。而是必须创建满足您需求的备用代理专用子网,然后将其提升为活跃角色。
如需了解如何更改代理专用子网的大小,请参阅更改代理专用子网的大小或地址范围。
在主负载均衡器和备用负载均衡器之间共享后端
如需实现完整的基础架构冗余,您必须同时在负载均衡器级层和后端级层引入冗余。这意味着您必须使用与主负载均衡器不重叠的后端(实例组或网络端点组)配置备用区域级外部应用负载均衡器。
如果您选择为主负载均衡器和备用负载均衡器使用相同的后端,则必须在这些后端所在的区域中创建每个备用区域级外部应用负载均衡器。此外,如果为实例组启用了自动扩缩,则必须满足以下要求,以帮助确保执行适当的故障切换:
- 配置自动伸缩器,使其仅使用基于 CPU 的伸缩。不支持基于负载均衡器利用率的自动扩缩。
- 全球后端服务和区域级后端服务都必须仅使用
UTILIZATION均衡模式。请勿使用RATE均衡模式,因为在故障切换过程中,您的实例可能会同时从全球负载均衡器和区域级负载均衡器接收 2 倍的流量。 - 配置缩容控制机制,以防止自动伸缩器在流量从全球负载均衡器切换到区域级负载均衡器的停机时间内过早地对组进行缩容。此停机时间可以高达 DNS TTL(存留时间)与配置的健康检查时间间隔之和。
如果未正确设置自动扩缩,可能会导致在故障切换期间发生次要服务中断,因为全球负载均衡器流量损失会导致实例组在区域级负载均衡器接管之前快速缩减。
配置主动-被动故障切换
如需配置主动-被动故障切换,请按以下步骤操作:
- 查看架构注意事项:在创建资源之前,请查看区域负载均衡器的注意事项,以验证功能兼容性、代理容量和共享后端自动扩缩要求。
- 配置主负载均衡器:设置全球外部应用负载均衡器,使其后端服务分布在一个或多个区域中。如需详细了解如何配置全球外部应用负载均衡器,请参阅设置全球外部应用负载均衡器。
- 查看主负载均衡器配置:确认主负载均衡器使用的功能(例如安全功能、流量管理和路由功能以及 Cloud CDN)是否可与备用区域级外部应用负载均衡器搭配使用。如果没有类似功能可用,则此负载均衡器可能不适合进行故障切换。
- 配置备用区域级外部应用负载均衡器:在您希望流量故障转移到的区域中设置独立的区域级外部应用负载均衡器。如需了解如何配置区域级外部应用负载均衡器,请参阅设置具有虚拟机实例组后端的区域级外部应用负载均衡器。
- 配置 DNS 路由和健康检查:为主负载均衡器创建健康检查,并配置 Cloud DNS 故障切换路由政策,以检测服务中断情况并将客户端流量路由到备用区域负载均衡器。
配置主动/主动旁路
如需配置主动-主动架构,请按以下步骤操作:
查看架构注意事项:在创建资源之前,请查看区域级负载均衡器的注意事项,以验证功能兼容性,并确保您的代理专用子网容量能够处理稳态流量和故障切换流量。
配置区域级外部应用负载均衡器:在配置区域级负载均衡器之前,请查看功能兼容性和限制。 在两个或更多区域中部署区域级外部应用负载均衡器,并包含后端服务、外部 IP 地址、SSL 证书和区域级 Cloud Armor 安全政策。如需查看设置说明,请参阅设置具有虚拟机实例组后端的区域级外部应用负载均衡器。
为区域级负载均衡器配置 DNS:创建指向区域级外部应用负载均衡器外部 IP 地址的 DNS 记录(例如
regional-api.example.com),并使用地理定位或延迟时间路由政策。对此记录启用 DNS 健康检查,以检测特定区域中的故障,并自动将流量从该区域路由到其他健康区域。配置全球外部应用负载均衡器:预留全球外部 IP 地址,并创建类型为
INTERNET_FQDN_PORT的全球互联网网络端点群组 (NEG)。向互联网 NEG 添加一个指向区域 DNS 记录 FQDN(例如regional-api.example.com)的端点。为全球外部应用负载均衡器配置后端服务,附加互联网 NEG,并根据需要启用 Cloud CDN 或 Cloud Armor。配置网址映射、目标 HTTP(S) 代理和全局转发规则。为故障切换和健康检查配置 DNS:使用
FAILOVER路由政策创建主服务 DNS 记录(例如api.example.com)。确保记录集具有指向全球外部应用负载均衡器 IP 地址的主端点,以及指向区域级外部应用负载均衡器外部 IP 地址的备份端点。配置 DNS 健康检查以监控全球外部应用负载均衡器。
最佳做法
在配置 Cloud DNS 记录和健康检查时,请记住以下最佳实践:
计算服务中断时长:流量从主负载均衡器故障切换到备用负载均衡器所需的时间取决于 DNS TTL、健康检查间隔时间和健康检查的健康状况不佳阈值参数:
使用 Google 的 Cloud DNS 时,此时间段的上限可通过以下公式计算:
Duration of outage = DNS TTL + Health Check Interval * Unhealthy Threshold将 DNS TTL 设置为 30-60 秒。较高的 TTL 值会导致故障切换时间较长,因为即使 DNS 已故障切换到备用区域级外部应用负载均衡器,互联网上的客户端仍会继续访问主外部应用负载均衡器。
配置健康检查阈值:设置健康状况良好和健康状况不佳阈值参数,以避免因暂时性网络错误而导致故障切换。较高的阈值会增加流量故障切换到备用负载均衡器所需的时间。
使用微流量进行验证:配置
--backup-data-trickle-ratio标志,以持续将一小部分流量发送到备用负载均衡器,即使主负载均衡器健康状况良好也是如此。这可确保备份基础架构处于有效状态,并已准备好处理流量。 您可以将发送到备用负载均衡器的流量的百分比配置为 0 到 1 之间的小数。典型值为 0.1,但 Cloud DNS 允许您将 100% 的流量发送到备用 VIP 地址,以手动触发故障切换。定期测试故障切换和故障恢复:在灾难恢复计划中纳入故障切换测试。验证从主负载均衡器到备用负载均衡器的流量逐步转移和突然转移,并验证流量在故障恢复后是否顺利返回到主负载均衡器。