區域性外部應用程式負載平衡器的高可用性

本頁面說明如何使用區域性外部應用程式負載平衡器,設定高可用性的多區域部署作業。如要達到高可用性,請在最適合支援應用程式流量的區域,部署多個個別區域性外部應用程式負載平衡器。這是因為不同區域的區域性外部應用程式負載平衡器不僅彼此隔離,也與在同一區域運作的任何全域外部應用程式負載平衡器或傳統版應用程式負載平衡器基礎架構隔離。

高可用性策略

您可以採用下列任一策略,為區域性外部應用程式負載平衡器實作跨區域韌性:

  • 主動-被動 (區域容錯移轉):在主要區域部署主要區域性外部應用程式負載平衡器,並在次要區域部署一或多個備份區域性外部應用程式負載平衡器。在穩定狀態下,Cloud DNS 會將所有流量轉送至主要負載平衡器。如果主要負載平衡器未通過健康狀態檢查,Cloud DNS 會使用容錯移轉路由政策,將流量轉送至備份區域性負載平衡器。

    以下是主動-被動設定範例,顯示兩個區域性外部應用程式負載平衡器,分別位於兩個不同區域。

使用兩個區域性外部應用程式負載平衡器,確保高可用性。
具備兩個區域性外部應用程式負載平衡器的高可用性 (按一下可放大)。
  • 主動-主動 (鄰近路由):在不同區域部署多個區域性外部應用程式負載平衡器,同時提供流量。使用 Cloud DNS 地理位置路由政策,將用戶端導向最近的健康區域。如果某個區域的負載平衡器發生中斷,Cloud DNS 會自動將流量從健康狀態不佳的區域,轉送至其他區域中健康狀態良好的負載平衡器。

    以下是主動-主動設定範例,顯示兩個不同區域中的兩個區域性外部應用程式負載平衡器。

    使用兩個區域性外部應用程式負載平衡器,確保高可用性。
    具備兩個區域性外部應用程式負載平衡器的高可用性 (按一下可放大)。

以下各節說明在一般工作流程中,健康狀態檢查和流量導向如何在各區域運作:

  1. 使用健康狀態檢查偵測區域性故障

    Google Cloud 會使用健康狀態檢查,偵測區域性負載平衡器的健康狀態。您設定這些健康狀態檢查,從三個來源區域傳送探測。這三個來源區域必須代表用戶端存取負載平衡器的區域。舉例來說,如果您有區域性外部應用程式負載平衡器,且大部分用戶端流量來自北美和歐洲,則可以讓探測來自北美兩個以上的區域,以及來自歐洲兩個以上的區域。

    其他注意事項:

    • 建立健康狀態檢查時,必須指定剛好三個來源區域。只有全域健康狀態檢查可以指定來源區域。
    • 支援 HTTP、HTTPS 和 TCP 健康狀態檢查。
    • 健康狀態檢查探測來自網際網路上的連接點 (PoP),與設定的 Google Cloud來源區域距離不遠。
  2. 依據路由政策轉送流量

    • 主動-被動:Cloud DNS 會使用容錯移轉路由政策,在穩定狀態下將 100% 的用戶端流量導向主要區域性負載平衡器。如果主要區域性負載平衡器未通過健康狀態檢查,Cloud DNS 會將流量導向備用區域性負載平衡器。
    • 主動-主動:Cloud DNS 會使用地理位置路由政策,將流量導向負載平衡器。如果所有負載平衡器都健康,Cloud DNS 會將流量轉送至最靠近用戶端的負載平衡器。如果某個區域的負載平衡器未通過健康狀態檢查,流量會自動轉向其他區域中健康狀態良好的可用負載平衡器。
  3. 容錯回復至主要負載平衡器

    健康狀態檢查再次通過時,系統會自動容錯回復。由於負載平衡器會提供流量,因此流量會還原,不會造成停機。

設定多區域負載平衡

如要設定多區域部署,以提升高可用性,請按照下列步驟操作:

  1. 在您認為最適合支援應用程式流量的區域,建立區域性外部應用程式負載平衡器。這些負載平衡器必須具備相同的流量管理和安全性設定。
  2. 建立健康狀態檢查,監控區域性負載平衡器的轉送規則 IP 位址。
  3. 在 Cloud DNS 中設定 DNS 路由政策:

在多個區域建立負載平衡器

設定額外的備援負載平衡器時,請注意下列事項:

  • 請為所有區域性外部應用程式負載平衡器設定類似的功能,確保無論由哪個負載平衡器處理要求,流量都能以一致的方式處理。舉例來說,請確認所有區域性外部應用程式負載平衡器,都使用相同類型的 SSL 憑證、Cloud Armor 區域性安全性政策,以及網址對應轉送設定。

    建議您使用 Terraform 等自動化架構,協助在不同區域部署作業中,達成並維持負載平衡器設定的一致性。

  • 建議您在每個最適合支援應用程式流量的區域,設定區域性外部應用程式負載平衡器。

  • 區域性外部應用程式負載平衡器支援進階和標準網路服務級別。建議您在進階級設定區域性外部應用程式負載平衡器,確保低延遲。

如要瞭解如何設定區域性外部應用程式負載平衡器,請參閱「設定具有 VM 執行個體群組後端的區域性外部應用程式負載平衡器」。

建立健康狀態檢查

建立全域健康狀態檢查,監控各區域性負載平衡器轉送規則的外部 IP 位址:

gcloud compute health-checks create http HEALTH_CHECK_NAME \
    --global \
    --source-regions=SOURCE_REGION_1,SOURCE_REGION_2,SOURCE_REGION_3 \
    --use-serving-port \
    --check-interval=HEALTH_CHECK_INTERVAL \
    --healthy-threshold=HEALTHY_THRESHOLD \
    --unhealthy-threshold=UNHEALTHY_THRESHOLD \
    --request-path=REQUEST_PATH

更改下列內容:

  • HEALTH_CHECK_NAME:健康狀態檢查的名稱
  • SOURCE_REGION_1、SOURCE_REGION_2 和 SOURCE_REGION_3:傳送健康狀態檢查探測的三個 Google Cloud區域。必須指定剛好三個來源區域。
  • HEALTH_CHECK_INTERVAL:從某個探測系統發出一次探測作業開始,到同一系統發出下一次探測作業開始之間的時間長度 (以秒為單位)。支援的最小值為 30 秒。 如需建議值,請參閱「最佳做法」。
  • HEALTHY_THRESHOLD 和 UNHEALTHY_THRESHOLD:指定負載平衡器必須連續成功或失敗的探測次數,才能判定為健康狀態良好或不良。如果省略其中一項, Google Cloud 會使用預設門檻 2。
  • REQUEST_PATH:Google Cloud 傳送健康狀態檢查探測要求的網址路徑。如果省略, Google Cloud 會將探測要求傳送至根路徑 /。如果接受健康狀態檢查的端點是私人端點 (這不是外部轉送規則 IP 位址的典型做法),您可以將這個路徑設為 /afhealthz。

設定主動/被動區域容錯移轉

在 Cloud DNS 中建立記錄集,並套用 FAILOVER 路由政策,將穩定狀態流量傳送至主要區域性負載平衡器,並在服務中斷期間容錯移轉至備份區域性負載平衡器:

gcloud dns record-sets create DNS_RECORD_SET_NAME \
    --ttl=TIME_TO_LIVE \
    --type=RECORD_TYPE \
    --zone="MANAGED_ZONE_NAME" \
    --routing-policy-type=FAILOVER \
    --routing-policy-primary-data=PRIMARY_REGIONAL_FORWARDING_RULE \
    --routing-policy-backup-data_type=GEO \
    --routing-policy-backup-data="BACKUP_REGION_1=BACKUP_LOAD_BALANCER_1_IP[;BACKUP_REGION_2=BACKUP_LOAD_BALANCER_2_IP]" \
    --health-check=HEALTH_CHECK_NAME \
    --backup-data-trickle-ratio=BACKUP_DATA_TRICKLE_RATIO

更改下列內容:

  • DNS_RECORD_SET_NAME:要新增的記錄集 DNS 或網域名稱,例如 test.example.com
  • TIME_TO_LIVE:記錄的存留時間 (以秒為單位)。如需建議值,請參閱「最佳做法」。
  • RECORD_TYPE:記錄類型,例如 A
  • MANAGED_ZONE_NAME:Cloud DNS 代管區域名稱,例如 my-zone-name
  • PRIMARY_REGIONAL_FORWARDING_RULE:主要區域性外部應用程式負載平衡器的轉送規則名稱
  • BACKUP_REGION_1 和 BACKUP_REGION_2:部署備份區域性外部應用程式負載平衡器的區域
  • BACKUP_LOAD_BALANCER_1_IP 和 BACKUP_LOAD_BALANCER_2_IP:備份區域性外部應用程式負載平衡器的轉送規則外部 IP 位址
  • HEALTH_CHECK_NAME:健康狀態檢查的名稱
  • BACKUP_DATA_TRICKLE_RATIO:在穩定狀態下,要傳送至備份區域負載平衡器的流量比例 (從 0 到 1,例如 0.1),確保備份已準備就緒。預設值為 0。

設定主動-主動區域轉送

在 Cloud DNS 中建立記錄集,並套用地理位置路由政策,同時將流量導向健康狀態良好的區域性負載平衡器:

gcloud dns record-sets create DNS_RECORD_SET_NAME \
    --ttl=TIME_TO_LIVE \
    --type=RECORD_TYPE \
    --zone="MANAGED_ZONE_NAME" \
    --routing-policy-type="GEO" \
    --routing-policy-data="FORWARDING_RULE_NAME_A@REGION_A;FORWARDING_RULE_NAME_B@REGION_B[,;FORWARDING_RULE_NAME_C@REGION_C]" \
    --health-check=HEALTH_CHECK_NAME

更改下列內容:

  • DNS_RECORD_SET_NAME:要新增的記錄集 DNS 或網域名稱,例如 test.example.com
  • TIME_TO_LIVE:記錄的存留時間 (TTL),以秒為單位。如需建議值,請參閱「最佳做法」。
  • RECORD_TYPE:記錄類型,例如 A
  • MANAGED_ZONE_NAME:要管理的記錄集所屬的代管區域名稱,例如 my-zone-name
  • FORWARDING_RULE_NAME_A、FORWARDING_RULE_NAME_B 和 FORWARDING_RULE_NAME_C:各相應區域中負載平衡器的轉送規則名稱
  • REGION_A、REGION_B 和 REGION_C:各負載平衡器的部署區域
  • HEALTH_CHECK_NAME:健康狀態檢查的名稱

最佳做法

設定 Cloud DNS 記錄和健康狀態檢查時,請注意下列最佳做法:

  • 計算服務中斷時間長度:流量從健康狀態不良的負載平衡器轉送至健康狀態良好的負載平衡器所需的時間 (服務中斷時間長度),取決於 DNS 存留時間值、健康狀態檢查間隔,以及健康狀態檢查的健康狀態不良門檻參數:

    Duration of outage = DNS TTL + Health Check Interval * Unhealthy Threshold
    

    建議將 DNS 存留時間設為 30 到 60 秒。存留時間越長,停機時間就越長,因為即使 DNS 已容錯移轉至其他區域,網際網路上的用戶端仍會繼續存取不健康的負載平衡器。

  • 設定健康狀態檢查門檻:設定健康狀態良好和不良的門檻參數,避免因暫時性錯誤而突然重新轉送流量。門檻越高,流量轉移至其他區域負載平衡器的時間就越長。

  • 使用微量流量進行主動-被動驗證:在主動-被動設定中,設定 --backup-data-trickle-ratio 旗標,在穩定狀態下持續將一小部分流量 (例如 0.1) 傳送至備份區域負載平衡器。這可確認備份基礎架構處於運作狀態,並準備好在容錯移轉事件期間處理流量。