網路負載平衡概念

網路負載平衡是一種非 Proxy 的地區性負載平衡器。

總覽

Google Cloud Platform (GCP) 網路負載平衡會在虛擬私人雲端網路中相同地區的 VM 執行個體之間分配流量。

在網絡負載平衡器中,轉送規則會將 TCP 和 UDP 流量導向跨地區的後端。

對於 TCP ProxySSL Proxy 負載平衡器不支持的通訊埠上的 UDP、TCP 和 SSL 流量,您可以使用網絡負載平衡來達成平衡負載。

下表顯示加州、紐約和新加坡的使用者。這些資源都會連結至後端資源,例如 myapp、test 和 travel。當新加坡的使用者連線美國西部的後端時,由於這個範圍為任何地點,因此最接近新加坡的流量也會傳入。接著,流量就會轉送至地區的後端。

三個地區性後端和三個轉送規則 (按一下可放大)
網路負載平衡範例 (按一下可放大)

通訊協定、機制和範圍

每個網路負載平衡器都支援 TCP 或 UDP 流量 (無法同時支援兩者)。

網絡負載平衡器使用目標集區以涵蓋後端執行個體,而其中的流量已進行負載平衡。

網絡負載平衡器會平衡來自網際網路的流量,但無法用於來自 GCP 內執行個體之間的負載平衡流量。

網路負載平衡器的範圍是地區性,而非全球性。也就是說,網路負載平衡器無法跨越多個地區。在單一地區內,負載平衡器為所有區域提供服務。查看地區和區域

在以下情況中使用網絡負載平衡:

  • 您必須負載平衡 UDP 流量,或是需要負載平衡其他負載平衡器不支援的 TCP 通訊埠。
  • 您可以接受由後端 (而非負載平衡器) 解密的 SSL 流量。網絡負載平衡器無法執行此任務。當後端解密 SSL 流量時,VM 上的 CPU 負擔更大。
  • 您可以自行管理負載平衡器的 SSL 憑證。Google 管理的 SSL 證書僅適用於 HTTPS 和 SSL Proxy 負載平衡。
  • 您必須轉送未經 Proxy 處理的原始封包。
  • 您有一個使用直通負載平衡器的現有設置,並且想要在不進行任何變更的情況下進行遷移。

如要瞭解 Cloud 負載平衡器之間的差異,請參閱選擇負載平衡器負載平衡總覽

關於網絡負載平衡

網路負載平衡具有下列特性:

  • 網絡負載平衡是一項代管服務。
  • 網絡負載平衡是使用 Andromeda 虛擬網絡Google Maglev Magley
  • 網絡負載平衡器不是 Proxy。
  • 來自後端 VM 的回應會直接傳送至用戶端,而不會返回經過負載平衡器。業界稱這種機制為「伺服器直接回傳」
  • 負載平衡器會保留封包的來源 IP 位址。
  • 封包的目的地 IP 位址是與負載平衡器的轉送規則關聯的地區外部 IP 位址。

因此:

  • 做為網路負載平衡器的後端 VM 的執行個體,必須執行適當 Linux Guest 訪客環境Windows 訪客環境或其他提供等效功能的處理程序。

    訪客 OS 環境 (或同等程序) 負責設定每個後端 VM 的本機路徑。這些路徑允許 VM 接受目的地與負載平衡器轉送規則的 IP 位址相符的封包。

  • 在接受負載平衡流量的後端執行個體上,您必須將軟體設定為繫結與負載平衡器轉送規則關聯的 IP 位址 (或任何 IP 位址 0.0.0.0/0)。

架構

網絡負載平衡器根據連入的 IP 通訊協定資料,平衡系統上的負載,例如位址、通訊埠和通訊協定類型。

網絡負載平衡器是直通負載平衡器,因此您的後端會收到原始的客戶端要求。網絡負載平衡器不執行任何傳輸層安全性 (TLS) 卸載或 Proxy。流量會直接轉送至您的 VM。

為負載平衡器建立轉送規則時,會收到一個臨時的虛擬 IP 位址 (VIP) 或保留一個來自地區網路模塊的 VIP。

然後,您將這項轉送規則與您的後端建立關聯。VIP 是從 Google 的全球存取點獲得的,但網路負載平衡器的後端則是地區性的。負載平衡器的後端不能跨越多個地區。

您可以使用 GCP 防火牆來控制或篩選後端 VM 的存取權。

網絡負載平衡器檢查來源通訊埠和目的地通訊埠,IP 位地址和通訊協定,以判斷如何轉送封包。針對 TCP 流量,您可以設定工作階段相依性來修改負載平衡器的轉送行為。

負載分配演算法

依預設,如要分配流量到執行個體,工作階段相依性值會設定為 NONE。Google Cloud 負載平衡會根據來源 IP 和通訊埠以及目的地 IP 和通訊埠的雜湊,挑選執行個體。這表示連入的 TCP 連線分散於執行個體之間,而且每個新的連線都可以前往不同的執行個體。系統會將連線的所有封包導向相同的執行個體,直到連線關閉為止。負載平衡過程中不考慮已建立的連線。

無論工作階段相依性設定為何,系統都會將連線的所有封包導向所選的執行個體,直到連線關閉為止。現有連線不會影響新連入連線的負載平衡決策。如果長時間的 TCP 連線正在使用中,這會導致後端之間的不平衡。

如果您需要讓來自用戶端的多個連線前往相同的執行個體,可選擇不同的工作階段相依性設定。如需更多資訊,請參閱目標集區說明文件中的 sessionAffinity

目標集區

目標集區資源會定義執行個體群組,接收來自轉送規則的傳入流量。當轉送規則將流量導向目標集區時,Google Cloud 負載平衡會根據來源 IP 和通訊埠以及目的地 IP 和通訊埠的雜湊,從這些目標集區中挑選執行個體。如要進一步瞭解如何將流量分配給執行個體,請參閱負載分配演算法一節。

目標集區只能與處理 TCP 和 UDP 流量的轉送規則搭配使用。對於所有其他通訊協定,都必須建立目標執行個體。您必須先建立目標集區,才能搭配轉送規則使用。每個專案最多可包含 50 個目標集區。

如果打算讓目標集區包含單一虛擬機執行個體,則應考慮改用通訊協定轉送功能。

網路負載平衡支持 Cloud Load Balancing 自動配置器,它允許用戶依據 CPU 使用率,對目標集區中的執行個體組執行自動縮放。詳情請參閱根據 CPU 使用率執行資源調度一文。

進一步瞭解目標集區以及如何設定目標集區。

轉送規則

轉送規則搭配目標集區和目標執行個體一起使用,以支持負載平衡和通訊協定轉送功能。如要使用負載平衡和通訊協定轉送功能,您必須建立將流量導向至目標集區 (為了負載平衡) 或是目標執行個體 (為了通訊協定轉送) 的轉送規則。如果沒有轉送規則,就無法使用這些功能。

轉送規則資源位於轉送規則集合中。每個轉送規則都會將特定 IP 位址、通訊協議以及通訊埠範圍 (選用) 配對至單一目標集區或是目標執行個體。當流量發送到由轉送規則提供的外部 IP 位址時,轉送規則會將該流量指向至相應的目標集區或目標實例執行個體。您最多可為每個專案建立 50 個轉送規則。

進一步瞭解轉送規則以及如何設定規則。

如果您負載平衡的 UDP 封包在到達 Google Cloud Platform (GCP) 虛擬私人雲端 (VPC) 網路前可能會出現分段,請參閱負載平衡和分段 UDP 封包

多個轉送規則

您可以為同一個網路 TCP/UDP 負載平衡器設定多個地區外部轉送規則。每個轉送規則可以具有唯一的地區外部 IP 位址,或者多個轉送規則可以參照相同的區域外部 IP 地址。多個轉送規則可以參照相同的目標 Proxy。

對於這些使用案例,不妨試著設定多個地區外部轉送規則:

  • 您必須為同一個目標集區設定多個外部 IP 位址。
  • 您必須使用相同的外部 IP 位址,為同一目標集區設定不同的通訊埠範圍或不同的通訊協定。

當您使用多個轉送規則時,請務必設定在後端 VM 上執行的軟體,將軟體繫結至所有必要的 IP 位址。由於透過負載平衡器傳遞的封包目的地 IP 位址是與相對應地區外部轉送規則關聯的地區外部 IP 位址,所以這是一個必要的步驟。

健康狀態檢查

健康狀態檢查可確保 Compute Engine 僅轉送新連線到狀態良好且準備就緒的執行個體。Compute Engine 會根據指定的頻率,將健康狀態檢查要求傳送至每個執行個體。如果執行個體超過允許的健康狀態檢查失敗次數,就不會再視為可接收新流量的合格執行個體。現有連線不會主動終止,從而允許執行個體正常關閉並關閉 TCP 連線。

健康狀況檢查工具持續查詢狀態不良的執行個體,並在達到指定的成功檢查數量之後將執行個體傳回集區。如果所有執行個體都標示為 UNHEALTHY,負載平衡器會將新流量導向所有現有的執行個體。

網絡負載平衡依靠舊式 HTTP 健康狀況檢查來判斷執行個體的健康狀況。即使您的服務並未使用 HTTP,您也必須在健康狀態檢查系統可查詢的每個執行個體上執行基本網路伺服器。

傳回路徑

若是健康狀態檢查,GCP 會使用您的虛擬私人雲端網路中未定義的特殊路徑。如需這項功能的完整資訊,請參閱負載平衡器傳回路徑

防火牆規則和網路負載平衡

網路負載平衡器的健康狀態檢查會從下列 IP 範圍傳送。您將需要建立允許輸入的防火牆規則,允許來自這些範圍的流量。如需防火牆規則的範例,請參閱網絡負載平衡規則

網路負載平衡是一種直通負載平衡器,也就是說,防火牆規則必須允許來自用戶端來源 IP 位址的流量。如果您的服務在網際網路中開放,那麼最簡單的方式就是,允許來自所有 IP 範圍的流量。如要限制存取,只允許某些來源的 IP 位址,可以設定防火牆規則來強制執行該限制,不過仍必須允許來自健康狀況檢查 IP 範圍的存取。

如需設定範例,請參閱網絡負載平衡規則

工作階段相依性

網絡負載平衡不使用後端服務工作階段相依性。相反地,網路負載平衡器會使用工作階段相依性的目標集區。

請參閱目標集區sessionAffinity 參數。

負載平衡和分段 UDP 封包

如果要對 UDP 封包進行負載平衡,請注意以下幾點:

  1. 系統會正常處理所有設定的非分段封包。
  2. UDP 封包在到達 GCP 之前可能會先分段。介入的網路可能會等到所有片段送達後再轉送,因而造成延遲或遺失片段。GCP 不會等待所有片段;它會在每個片段到達時就會立刻轉送。
  3. 由於後續的 UDP 片段不含目的地通訊埠,因此在下列情況下可能會發生問題:

    • 如果目標集區工作階段相依性設定為 NONE (5 個組合相依性),後續的片段可能會因為負載平衡器無法計算 5 個組合雜湊而捨棄。
    • 如果相同的負載平衡 IP 地址有多個 UDP 轉送規則,則後續片段可能會得出錯誤的轉送規則。

若您想要分段的 UDP 封包,請執行下列操作:

  • 將工作階段相依性設定成 CLIENT_IP_PROTOCLIENT_IP。請勿使用 NONE (5 個組合雜湊)。由於 CLIENT_IP_PROTOCLIENT_IP 不使用目的地通訊埠進行雜湊,因此可以如同第一個片段般替後續的片段計算雜湊。
  • 每個負載平衡的 IP 地址僅使用一個 UDP 轉送規則。這可確保所有片段都達成相同的轉送規則。

使用這些設定,來自同一封包的 UDP 片段將轉送到同一執行個體以進行重組。

後續步驟

如需瞭解如何設定網絡負載平衡器以及如何在一組 Apache 執行個體之間分配流量,請參閱設定網絡負載平衡

開始使用