本頁面說明如何使用區域性外部應用程式負載平衡器,設定高可用性的多區域部署作業。如要達到高可用性,請在最適合應用程式流量的區域中,部署多個個別的區域性外部應用程式負載平衡器。這是因為不同區域的區域性外部應用程式負載平衡器不僅彼此隔離,也與在同一區域執行的任何全域外部應用程式負載平衡器或傳統版應用程式負載平衡器基礎架構隔離。
高可用性策略
您可以採用下列任一策略,為區域性外部應用程式負載平衡器實作跨區域復原能力:
主動-被動 (區域容錯移轉):在主要區域部署主要區域性外部應用程式負載平衡器,並在次要區域部署一或多個備份區域性外部應用程式負載平衡器。在穩定狀態下,Cloud DNS 會將所有流量路由至主要負載平衡器。如果主要負載平衡器健康狀態檢查失敗,Cloud DNS 會使用容錯移轉轉送政策,將流量轉送至備用區域負載平衡器。
以下是主動/被動設定範例,顯示兩個不同區域中的兩個區域性外部應用程式負載平衡器。
主動-主動 (鄰近轉送):在不同區域部署多個區域性外部應用程式負載平衡器,同時處理流量。使用 Cloud DNS 地理位置路由政策,將用戶端導向最近的正常區域。如果某個區域的負載平衡器發生服務中斷,Cloud DNS 會自動將流量從健康狀態不佳的區域,導向至其他區域中健康狀態良好的負載平衡器。
以下是主動-主動設定的範例,顯示兩個不同區域中的兩個區域性外部應用程式負載平衡器。
使用兩個區域性外部應用程式負載平衡器,實現高可用性 (按一下即可放大)。
以下各節說明在一般工作流程中,健康狀態檢查和流量導向如何在各個區域運作:
使用健康狀態檢查偵測區域性故障
Google Cloud 會使用健康狀態檢查,偵測區域負載平衡器是否正常運作。您設定這些健康狀態檢查,從三個來源區域傳送探測。這三個來源區域必須代表用戶端存取負載平衡器的區域。舉例來說,如果您有區域外部應用程式負載平衡器,且大部分用戶端流量來自北美和歐洲,則可以讓探測訊號來自北美兩個以上的區域,以及歐洲兩個以上的區域。
其他注意事項:
- 建立健康狀態檢查時,必須指定剛好三個來源區域。只有全域健康狀態檢查可以指定來源區域。
- 支援 HTTP、HTTPS 和 TCP 健康狀態檢查。
- 健康狀態檢查探測來自網際網路上的網路連接點 (PoP),與設定的 Google Cloud來源區域距離不遠。
根據轉送政策轉送流量
回復至主要負載平衡器
健康狀態檢查再次通過時,系統會自動進行容錯回復。負載平衡器會提供流量,因此流量會在不停機的情況下還原。
設定多區域負載平衡
如要設定多區域部署作業,以利高可用性,請執行下列步驟:
- 在您認為最適合支援應用程式流量的區域,建立區域性外部應用程式負載平衡器。這些負載平衡器必須具備相同的流量管理和安全性設定。
- 建立健康狀態檢查,監控區域負載平衡器的轉送規則 IP 位址。
- 在 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.comTIME_TO_LIVE:記錄的存留時間 (以秒為單位)。如需建議值,請參閱「最佳做法」。RECORD_TYPE:記錄類型,例如AMANAGED_ZONE_NAME:Cloud DNS 代管區域的名稱,例如my-zone-namePRIMARY_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.comTIME_TO_LIVE:記錄的存留時間 (TTL),以秒為單位。如需建議值,請參閱「最佳做法」。RECORD_TYPE:記錄類型,例如AMANAGED_ZONE_NAME:要管理的記錄集所屬的代管區域名稱,例如my-zone-nameFORWARDING_RULE_NAME_A、FORWARDING_RULE_NAME_B和FORWARDING_RULE_NAME_C:各個對應區域中負載平衡器的轉送規則名稱REGION_A、REGION_B和REGION_C:每個負載平衡器的部署區域HEALTH_CHECK_NAME:健康狀態檢查的名稱
最佳做法
設定 Cloud DNS 記錄和健康狀態檢查時,請注意下列最佳做法:
計算中斷時間:流量從健康狀態不佳的負載平衡器轉送至健康狀態良好的負載平衡器所需的時間 (中斷時間),取決於 DNS TTL 值、健康狀態檢查間隔,以及健康狀態檢查的不良健康狀態判定門檻參數:
Duration of outage = DNS TTL + Health Check Interval * Unhealthy Threshold建議將 DNS TTL 設為 30 到 60 秒。TTL 較長會導致停機時間較長,因為即使 DNS 故障轉移至其他區域,網際網路上的用戶端仍會繼續存取不正常的負載平衡器。
設定健康狀態檢查門檻:設定健康和不良門檻參數,避免因暫時性錯誤而導致流量不必要地突然重新導向。如果提高門檻,流量轉移至其他區域負載平衡器的時間就會變長。
使用微量流量進行主動/被動驗證:在主動/被動設定中,設定
--backup-data-trickle-ratio旗標,在穩定狀態下持續將一小部分流量 (例如0.1) 傳送至備份區域負載平衡器。這項作業會驗證備份基礎架構是否處於啟用狀態,並準備好在容錯移轉事件期間處理流量。