外部直通式網路負載平衡器的流量分配

本頁將說明下列概念,協助您進一步瞭解並自訂外部轉送網路負載平衡器如何分配流量:工作階段親和性、連線追蹤、加權負載平衡、連線耗盡、UDP 分割,以及容錯移轉。

外部直通式網路負載平衡器分配新連線的方式取決於您是否設定了容錯移轉:

  • 如果您沒有設定容錯移轉,外部直通式網路負載平衡器會將新連線分配給健康後端 VM (前提是至少有一個健康後端 VM)。如果所有後端 VM 都不健康,負載平衡器則會在所有後端之間分配新連線,這是最不得已的做法。在這種情況下,負載平衡器會將每個新連線路由至不健康的後端 VM。
  • 如果已設定容錯移轉,外部直通式網路負載平衡器會根據您設定的容錯移轉政策,在其現用集區的健康後端 VM 之間分配新連線。如果所有後端 VM 都不健康,您可以選擇其中一種行為:
    • (預設) 負載平衡器只會將流量分配給主要 VM。這項設定是最後的手段。備份 VM 不會納入這個連線的最後手段分發作業。
    • 負載平衡器會捨棄流量。

如要進一步瞭解連線的分配方式,請參閱下一節「後端選取和連線追蹤」。

如要進一步瞭解容錯移轉的運作方式,請參閱「容錯移轉」一節。

後端選取和連線追蹤

外部直通式網路負載平衡器會使用可設定的後端選取和連線追蹤演算法,決定如何將流量分配給後端 VM。

外部直通式網路負載平衡器會使用下列演算法,在後端 VM (如果已設定容錯移轉,則會在其現用集區中) 之間分配封包:

  1. 如果負載平衡器的連線追蹤表中含有與傳入封包特徵相符的項目,系統就會將封包傳送至連線追蹤表項目指定的後端。系統會將封包視為先前建立的連線的一部分,因此會將封包傳送至負載平衡器先前判斷並記錄在連線追蹤表中的後端 VM。
  2. 如果負載平衡器收到沒有連線追蹤項目的封包,就會執行以下操作:

    1. 負載平衡器選取後端。負載平衡器會根據設定的工作階段相依性計算雜湊值。這個函式會使用這個雜湊值,從「健康」的後端中選取一個 (除非所有後端都處於不健康狀態,在這種情況下,系統會將所有後端視為長時間,因為在這種情況下,備援政策並未設定為捨棄流量)。預設的工作階段相依性 NONE 會使用下列雜湊演算法:

      • 針對 TCP 和未分割的 UDP 封包,封包的來源 IP 位址、來源通訊埠、目的地 IP 位址、目的地通訊埠和通訊協定的 5 元組雜湊。
      • 針對分割的 UDP 封包和所有其他通訊協定,封包來源 IP 位址、目的地 IP 位址和通訊協定的 3 元組雜湊碼。

      您可以使用雜湊演算法自訂後端選取作業,以便使用較少的資訊。如需瞭解所有支援的選項,請參閱「工作階段相依性選項」。

      此外,請注意下列事項:

      如果您啟用加權負載平衡,則以雜湊值為依據的後端選取作業會根據後端執行個體回報的權重進行加權。例如:

      • 請考慮後端服務,其中工作階段相依性設為 NONE,轉送規則則使用通訊協定 UDP。如果有兩個權重分別為 1 和 4 的健康後端執行個體,則後端會分別獲得 20% 和 80% 的 UDP 封包。
      • 請考慮使用 3 元組工作階段相依性和連線追蹤功能設定的後端服務。工作階段相依性為 CLIENT_IP_PROTO,連線追蹤模式為 PER_SESSION。如果有三個權重分別為 0、2 和 6 的健康後端執行個體,則後端會分別獲得 0%、25% 和 75% 的新來源 IP 位址 (沒有現有連線追蹤表項目的來源 IP 位址) 流量。現有連線的流量會傳送至先前指派的後端。
    2. 負載平衡器會在連線追蹤表格中新增項目。這個項目會記錄封包連線的所選後端,以便將此連線的所有未來封包傳送至相同的後端。是否使用連線追蹤功能取決於通訊協定:

      • TCP 封包。連線追蹤功能一律會啟用,無法關閉。根據預設,連線追蹤為 5 元組,但可設定為小於 5 元組。如果是 5 元組,TCP SYN 封包會受到不同的處理。與非 SYN 封包不同,這些封包會捨棄任何相符的連線追蹤項目,並一律選取新的後端。

        系統會在下列情況下使用預設的 5 元組連線追蹤:

        • 追蹤模式為 PER_CONNECTION (所有工作階段相依性)、
        • 追蹤模式為 PER_SESSION,工作階段相依性為 NONE
        • 追蹤模式為 PER_SESSION,工作階段相依性為 CLIENT_IP_PORT_PROTO
      • UDP、ESP 和 GRE 封包。只有在工作階段相依性設為 NONE 以外的值時,系統才會啟用連線追蹤。

      • ICMP 和 ICMPv6 封包。無法使用連線追蹤。

      如要進一步瞭解何時啟用連線追蹤功能,以及啟用連線追蹤功能時採用的追蹤方法,請參閱「連線追蹤模式」。

      此外,請注意下列事項:

      • 負載平衡器處理與項目相符的最後一個封包後,連線追蹤表中的項目會在 60 秒後到期。詳情請參閱「閒置逾時」。
      • 視通訊協定而定,負載平衡器可能會在後端出現不健康狀態時移除連線追蹤表項目。如需詳細資訊及如何自訂這項行為,請參閱「持續連線至健康狀態不良的後端」。

工作階段相依性選項

工作階段相依性可控制從用戶端傳至負載平衡器後端 VM 的新連線分配情況。工作階段相依性是針對整個區域外部後端服務指定,而非針對每個後端指定。

外部直通式網路負載平衡器支援下列工作階段相依性選項:

  • None (NONE)。來源 IP 位址、來源通訊埠、通訊協定、目的地 IP 位址和目的地通訊埠的 5 元組雜湊碼
  • 用戶端 IP、目的地 IP (CLIENT_IP)。來源 IP 位址和目的地 IP 位址的 2 元組雜湊
  • 用戶端 IP、目的地 IP、通訊協定 (CLIENT_IP_PROTO)。來源 IP 位址、目的地 IP 位址和通訊協定的 3 元組雜湊
  • 用戶端 IP、用戶端通訊埠、目的地 IP、目的地通訊埠、通訊協定 (CLIENT_IP_PORT_PROTO)。來源 IP 位址、來源通訊埠、通訊協定、目的地 IP 位址和目的地通訊埠的 5 元組雜湊碼

如要瞭解這些工作階段親和度選項如何影響後端選取和連結追蹤方法,請參閱這份表格

連線追蹤政策

本節將說明用於控制外部直通式網路負載平衡器連線追蹤行為的設定。連線追蹤政策包含下列設定:

連線追蹤模式

啟用連線追蹤功能與否,只取決於負載平衡流量的通訊協定和工作階段相依性設定。追蹤模式會指定啟用連線追蹤功能時要使用的連線追蹤演算法。追蹤模式有兩種:PER_CONNECTION (預設) 和 PER_SESSION

  • PER_CONNECTION (預設)。這是預設追蹤模式。在這個連線追蹤模式下,無論工作階段相依性設定為何,TCP 流量都會依據 5 元組追蹤。對於 UDP、ESP 和 GRE 流量,如果所選工作階段相依性「不是」NONE,就會啟用連線追蹤功能。系統會使用這個表格所述的追蹤方法,追蹤 UDP、ESP 和 GRE 封包。

  • PER_SESSION如果工作階段相依性為 CLIENT_IPCLIENT_IP_PROTO,則設定此模式會分別針對所有通訊協定 (不含 ICMP 和 ICMPv6,因為這兩者無法追蹤連線) 使用 2 值組和 3 值組連線追蹤。對於其他工作階段相依性設定,PER_SESSION 模式的運作方式與 PER_CONNECTION 模式相同。

如要瞭解這些追蹤模式如何搭配各個通訊協定的不同工作階段親和力設定,請參閱下表。

後端選項 連線追蹤模式
工作階段相依性設定 後端選取的雜湊方法 PER_CONNECTION (預設) PER_SESSION
預設:無工作階段相依性

(NONE)

TCP 和未分割的 UDP:5 元組雜湊

分段 UDP 和所有其他通訊協定:3 組雜湊

  • TCP:5 組連線追蹤
  • 所有其他通訊協定:關閉連線追蹤
  • TCP:5 組連線追蹤
  • 所有其他通訊協定:關閉連線追蹤
用戶端 IP、目的地 IP

(CLIENT_IP)

所有通訊協定:2 組雜湊
  • TCP 和未分段的 UDP:5 值組連線追蹤
  • 分段 UDP、ESP 和 GRE:3 組連線追蹤
  • 所有其他通訊協定:關閉連線追蹤
  • TCP、UDP、ESP、GRE:2 元組連線追蹤
  • 所有其他通訊協定:關閉連線追蹤
用戶端 IP、目的地 IP、通訊協定

(CLIENT_IP_PROTO)

所有通訊協定:3 元組雜湊
  • TCP 和未分段的 UDP:5 值組連線追蹤
  • 分段 UDP、ESP 和 GRE:3 組連線追蹤
  • 所有其他通訊協定:關閉連線追蹤
  • TCP、UDP、ESP、GRE:3 元組連線追蹤
  • 所有其他通訊協定:關閉連線追蹤
用戶端 IP、用戶端通訊埠、目的地 IP、目的地通訊埠、通訊協定

(CLIENT_IP_PORT_PROTO)

TCP 和未分割的 UDP:5 元組雜湊

分段 UDP 和所有其他通訊協定:3 組雜湊

  • TCP 和未分段的 UDP:5 值組連線追蹤
  • 分段 UDP、ESP 和 GRE:3 組連線追蹤
  • 所有其他通訊協定:關閉連線追蹤
  • TCP 和未分段的 UDP:5 值組連線追蹤
  • 分段 UDP、ESP 和 GRE:3 組連線追蹤
  • 所有其他通訊協定:關閉連線追蹤

如要瞭解如何變更連線追蹤模式,請參閱「設定連線追蹤政策」。

持續連線至健康狀態不良的後端

連線持續性設定會控制在後端變為不健康後,所選後端 VM 或端點是否會持續連線,前提是後端仍留在負載平衡器設定的後端群組 (在執行個體群組或 NEG 中)。

本節所述的行為適用於從執行個體群組中移除後端執行個體,或從 NEG 中移除後端端點,或是從後端服務中移除執行個體群組或 NEG 的情況。在這種情況下,已建立的連線只會持續存在,如連線耗盡一文所述。

可用的連線持續性選項如下:

  • DEFAULT_FOR_PROTOCOL (預設)
  • NEVER_PERSIST
  • ALWAYS_PERSIST

下表概述連線持續性選項,以及連線在不同通訊協定、工作階段相依性選項和追蹤模式下持續的方式。

持續連線至健康狀態不良的後端選項 連線追蹤模式
PER_CONNECTION PER_SESSION
DEFAULT_FOR_PROTOCOL

TCP:連線會持續連線至不健康的後端 (所有工作階段相依性)

所有其他通訊協定:連線不會持續連線至健康狀態不良的後端

TCP:如果工作階段相依性為 NONECLIENT_IP_PORT_PROTO,連線會持續連線至健康狀態不良的後端

所有其他通訊協定:連線不會持續連線至健康狀態不良的後端

NEVER_PERSIST 所有通訊協定:連線不會持續連線至健康狀態不良的後端
ALWAYS_PERSIST

TCP:連線會持續連線至不健康的後端 (所有工作階段相依性)

ESP、GRE、UDP:如果工作階段相依性不是 NONE,連線會持續連線至健康狀態不良的後端

ICMP、ICMPv6:不適用,因為無法追蹤連線

這個選項僅適用於進階用途。

無法設定

在健康狀態不良的後端上持續連線的 TCP 連線行為

只要 TCP 連線含有 5 元組數追蹤,且持續連線至健康狀態不良的後端,就會發生以下情況:

  • 如果不健康的後端持續回應封包,連線會持續運作,直到由不健康的後端或用戶端重設或關閉為止。
  • 如果後端處於不健康狀態,且傳送 TCP 重設 (RST) 封包或未回應封包,用戶端可能會使用新連線重試,讓負載平衡器選取其他健康的後端。TCP SYN 封包一律會選取新的健康後端。

如要瞭解如何變更連線持續性行為,請參閱「設定連線追蹤政策」。

閒置逾時

負載平衡器處理最後一個與項目相符的封包後,連線追蹤表中的項目會在 60 秒後到期。這個閒置逾時值無法修改。

加權負載平衡

您可以設定網路負載平衡器,讓負載平衡器的後端執行個體根據HTTP 健康狀態檢查回報的權重,使用加權負載平衡功能分配流量。

如要使用加權負載平衡,您必須同時設定下列兩項:

  • 您必須將後端服務的地區負載平衡器政策 (localityLbPolicy) 設為 WEIGHTED_MAGLEV
  • 您必須使用 HTTP 健康狀態檢查來設定後端服務。HTTP 健康狀態檢查回應必須包含自訂 HTTP 回應標頭欄位 X-Load-Balancing-Endpoint-Weight,以便為每個後端執行個體指定權重,範圍從 01000

如果您使用相同的後端 (執行個體群組或 NEG),為多個採用加權負載平衡的後端服務式外部直通式網路負載平衡器提供服務,建議您為後端服務的每個健康狀態檢查使用專屬的 request-path。這可讓端點執行個體為不同的後端服務指定不同的權重。詳情請參閱「HTTP、HTTPS 和 HTTP/2 健康狀態檢查的成功標準」。

如要為新連線選取後端,系統會根據後端的權重和健康狀態,為後端指派嚴格的優先順序,如下表所示:

權重 健康狀態良好 後端選取優先順序
權重大於零 4
權重大於 0 3
權重等於零 2
權重等於零 1

只有優先順序最高的後端才能進行後端選取。如果所有符合條件的後端權重為零,負載平衡器會在所有符合條件的後端之間分配新連線,並以相同權重處理這些後端。如需加權負載平衡的範例,請參閱後端選取和連線追蹤

下列情況可使用加權負載平衡:

  • 如果某些連線處理的資料量比其他連線多,或是某些連線的存活時間比其他連線長,後端負載分布可能會不均勻。透過傳送較低的個別執行個體權重信號,負載較高的執行個體就能減少新連線的分享比例,同時繼續為現有連線提供服務。

  • 如果後端超載,且指派更多連線可能會中斷現有連線,則此類後端會將權重設為零。透過傳送零權重信號,後端執行個體會停止服務新連線,但會繼續服務現有連線。

  • 如果後端在維護前耗盡現有連線,就會將零權重指派給自己。透過傳送零權重信號,後端執行個體會停止服務新連線,但會繼續服務現有連線。

詳情請參閱「設定加權負載平衡」。

連線排除

在下列情況下,連線排空程序會套用至已建立的連線:

  • 從後端 (執行個體群組或 NEG) 移除 VM 或端點。
  • 後端會移除 VM 或端點 (透過替換、放棄、滾動升級或縮減規模)。
  • 從後端服務移除後端。

根據預設,系統會停用連線排除功能。停用後,系統會盡快終止已建立的連線。啟用連線排除功能後,系統會允許已建立的連線持續一段可設定的逾時時間,逾時後,後端 VM 執行個體就會終止。

如要進一步瞭解如何觸發連線排除功能,以及如何啟用連線排除功能,請參閱「啟用連線排除功能」。

UDP 分割

後端服務型外部直通式網路負載平衡器可處理分割和未分割的 UDP 封包。如果應用程式使用分段的 UDP 封包,請注意下列事項:

  • UDP 封包在到達 Google CloudVPC 網路之前可能會先分段。
  • Google Cloud 虛擬私有雲網路會在 UDP 片段到達時轉送 (不會等待所有片段都到達)。
  • 非Google Cloud 網路和內部網路設備可能會在 UDP 片段抵達時轉送,延遲分段 UDP 封包,直到所有片段都抵達為止,或捨棄分段 UDP 封包。詳情請參閱網路供應商或網路設備的說明文件。

如果您預期會收到分段的 UDP 封包,且需要將這些封包轉送至相同的後端,請使用下列轉送規則和後端服務設定參數:

  • 轉送規則設定:每個負載平衡的 IP 位址僅使用一個 UDPL3_DEFAULT 轉送規則,並將轉送規則設為接受所有通訊埠的流量。這可確保所有片段都達成相同的轉送規則。雖然分段封包 (除了第一個分段) 缺少目的地通訊埠,但設定轉送規則以處理所有通訊埠的流量,也會將其設為接收沒有通訊埠資訊的 UDP 分段。如要設定所有連接埠,請使用 Google Cloud CLI 設定 --ports=ALL,或使用 API 將 allPorts 設為 True

  • 後端服務設定:將後端服務的工作階段相依性設為 CLIENT_IP (2 值組雜湊) 或 CLIENT_IP_PROTO (3 值組雜湊),這樣一來,系統就會為包含通訊埠資訊的 UDP 封包,以及缺少通訊埠資訊的 UDP 片段 (第一個片段除外) 選取相同的後端。將後端服務的連線追蹤模式設為 PER_SESSION,以便使用相同的 2 元組或 3 元組雜湊建立連線追蹤表格項目。

容錯移轉

您可以設定外部直通式網路負載平衡器,將連線分配到主要後端 (執行個體群組或 NEG) 中的 VM 執行個體或端點,之後如有需要,再切換到使用容錯移轉後端。容錯移轉不僅提供增進可用性的方法,也讓您可以進一步掌控主要後端 VM 健康狀態不良時管理工作負載的方式。

預設情況下,當您將後端新增到外部直通式網路負載平衡器的後端服務時,該後端就是主要後端。在您將後端新增到負載平衡器的後端服務時,可以將後端指定為容錯移轉後端,也可以稍後編輯後端服務來指定。

如要進一步瞭解容錯移轉的運作方式,請參閱外部直通網路負載平衡器的容錯移轉總覽

後續步驟