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

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

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

  • 如果沒有設定容錯移轉,內部直通式網路負載平衡器會將新連線分配給其健康後端 VM (前提是至少有一個健康後端 VM)。如果所有後端 VM 都不健康,負載平衡器則會在所有後端之間分配新連線,這是最不得已的做法。在這種情況下,負載平衡器會將每個新連線路由至健康狀態不良的後端 VM。

  • 如果已設定容錯移轉,則內部直通式網路負載平衡器會根據您設定的容錯移轉政策,在其現用集區的 VM 之間分配新連線。如果所有後端 VM 都不健康,則可以選擇下列任一行為:

    • (預設) 負載平衡器只會將流量分配給主要 VM。這項設定是最後的手段。備份 VM 不會納入這個連線的最後手段分發作業。
    • 負載平衡器已設定為捨棄流量

分配新連線的方式取決於負載平衡器的工作階段相依性設定

健康狀態檢查的狀態可以控制新連線的分配情況。根據預設,TCP 連線會持續連線至健康狀態不良的後端。如需進一步瞭解這項行為以及如何變更,請參閱「在無效後端上維持連線」。

後端選取和連線追蹤

內部直通式網路負載平衡器會使用可設定的後端選取和連線追蹤演算法,決定如何將流量分配給後端 VM。內部直通式網路負載平衡器會使用下列演算法,在後端 VM (如果您已設定容錯移轉,則會在其現用集區中) 之間分配封包:

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

    1. 負載平衡器選取後端。負載平衡器會根據設定的工作階段相依性計算雜湊值。它會使用這個雜湊值選取後端:

      • 如果至少有一個後端處於健康狀態,雜湊值會選取其中一個健康的後端。
      • 如果所有後端都處於不健康狀態,且未設定備援政策,則雜湊會選取其中一個後端。
      • 如果所有後端都處於不健康狀態,且已設定容錯移轉政策,但系統未在這種情況下捨棄流量,則雜湊會選取其中一個主要 VM 後端。

      預設的工作階段相依性 NONE 會使用封包來源 IP 位址、來源通訊埠、目的地 IP 位址、目的地通訊埠和通訊協定的 5 值組雜湊

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

    2. 負載平衡器會在連線追蹤表格中新增項目。這個項目會記錄封包連線的所選後端,以便將此連線的所有未來封包傳送至相同的後端。是否使用連線追蹤功能取決於通訊協定:

      對於 TCP 和 UDP 封包,連線追蹤一律會啟用,且無法關閉。根據預設,連線追蹤為 5 元組,但可設定為小於 5 元組。

      如果連線追蹤雜湊值為 5 元組,TCP SYN 封包一律會在連線追蹤表中建立新項目。

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

      • 追蹤模式為 PER_CONNECTION (所有工作階段相依性)、
      • 追蹤模式為 PER_SESSION,工作階段相依性為 NONE
      • 追蹤模式為 PER_SESSION,工作階段相依性為 CLIENT_IP_PORT_PROTO

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

      此外,請注意下列事項:

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

工作階段相依性選項

工作階段相依性可控制從用戶端傳至負載平衡器後端 VM 的新連線分配情況。如果後端 VM 需要追蹤其用戶端的狀態資訊,請設定工作階段相依性。這是網頁應用程式的常見要求。

工作階段相依性會盡力執行。

內部直通式網路負載平衡器支援採用以下工作階段相依性選項,這些選項是針對「整個內部後端服務」所指定,而非針對每個後端執行個體群組:

  • None (NONE)。來源 IP 位址、來源通訊埠、通訊協定、目的地 IP 位址和目的地通訊埠的 5 元組雜湊碼
  • 用戶端 IP,無目的地 (CLIENT_IP_NO_DESTINATION)。僅使用來源 IP 位址建立的 1 元組雜湊。
  • 用戶端 IP (CLIENT_IP)。來源 IP 位址和目的地 IP 位址的 2 元組雜湊。外部直通式網路負載平衡器會將這個工作階段相依性選項稱為「Client IP, Destination IP」
  • 用戶端 IP、目的地 IP、通訊協定 (CLIENT_IP_PROTO):來源 IP 位址、目的地 IP 位址和通訊協定的 3 元組雜湊
  • 用戶端 IP、用戶端通訊埠、目的地 IP、目的地通訊埠、通訊協定 (CLIENT_IP_PORT_PROTO)。來源 IP 位址、來源通訊埠、通訊協定、目的地 IP 位址和目的地通訊埠的 5 元組雜湊碼

除非您使用負載平衡器做為自訂靜態路徑的下一個躍點,否則封包的目的地 IP 位址必須與負載平衡器轉送規則的 IP 位址相符,才能將封包傳送至負載平衡器。如要瞭解使用負載平衡器做為自訂靜態路徑下一個躍點時的考量,請參閱「工作階段相依性和下一個躍點為內部直通式網路負載平衡器」。

工作階段相依性和下一個躍點為內部直通式網路負載平衡器

當您設定靜態路徑以使用下一個躍點內部直通式網路負載平衡器時,負載平衡器會使用先前討論的後端選取和連線追蹤方法。後端選取作業仍是根據設定的工作階段相依性計算雜湊值來完成。除了 CLIENT_IP_NO_DESTINATION 工作階段相依性,後端選取雜湊也會部分取決於封包目的地 IP 位址。

如果內部直通式網路負載平衡器負載平衡器是靜態路徑的下一個躍點,目的地 IP 位址不限於負載平衡器的轉送規則 IP 位址。相反地,封包的目的地 IP 位址可以是任何符合靜態路徑目的地範圍的 IP 位址。

如果已設定且處於健康狀態的後端 VM 數量不變 (未設定容錯移轉,或已設定容錯移轉但未發生容錯移轉或復原事件),負載平衡器的行為如下:

  • 如果只有一個已設定且健康的後端 VM (在使用中集區中,如果已設定容錯移轉),則您使用的工作階段相依性無關緊要,因為所有雜湊都會對應至一個後端 VM。

  • 如果有兩個以上已設定且運作正常的後端 VM (在使用中集區中,如果已設定容錯移轉),您選擇的會話親和性就很重要:

    • 如果您需要同一個後端 VM 處理來自用戶端的所有封包,且只根據封包的來源 IP 位址,不考量封包目的地 IP 位址,請使用 CLIENT_IP_NO_DESTINATION 工作階段相依性。視流量模式而定,某些後端 VM 可能會比其他後端 VM 收到更多封包或連線。

    • 如果您使用的工作階段親和度選項不是 CLIENT_IP_NO_DESTINATION,負載平衡器會根據資訊選取後端 VM,這些資訊至少包含封包的來源 IP 位址目的地 IP 位址。從同一個用戶端傳送的封包,如果使用相同的來源 IP 位址,但目的地 IP 位址不同,則可路由至不同的後端 VM。

連線追蹤政策

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

連線追蹤模式

追蹤模式會指定要使用的連線追蹤演算法。追蹤模式有兩種:PER_CONNECTION (預設) 和 PER_SESSION

  • PER_CONNECTION (預設)。在這個模式中,無論工作階段相依性設定為何,系統一律會依 5 組資料追蹤 TCP 和 UDP 流量。這表示連線追蹤的索引鍵 (5 元組) 可以與設定的工作階段相依性設定不同 (例如,使用 CLIENT_IP_PROTO 設定的 3 元組)。因此,如果後端組合或其健康狀態發生變化,工作階段相依性可能會分割,而工作階段的新連線可能會選取不同的後端。

  • PER_SESSION。在這個模式中,系統會根據已設定的工作階段相依性追蹤 TCP 和 UDP 流量。也就是說,如果工作階段相依性為 CLIENT_IPCLIENT_IP_PROTO,則設定此模式會分別產生 2 組和 3 組連線追蹤。在需要破壞關聯的情況下,這可能會造成高成本,因此即使新增更多後端,也應避免這類情況。

如果工作階段相依性設為 NONECLIENT_IP_PORT_PROTO,連線追蹤模式設定就會變得多餘。如要瞭解這些追蹤模式如何搭配各個通訊協定的不同工作階段親和力設定運作,請參閱下表。

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

NONE

5 元組雜湊 5 元組連線追蹤 5 元組連線追蹤

用戶端 IP,無目的地

CLIENT_IP_NO_DESTINATION

1 元組雜湊 5 元組連線追蹤 1 組連線追蹤

用戶端 IP

CLIENT_IP

(與用戶端 IP 相同,外部直通式網路負載平衡器的目的地 IP)

2 元組雜湊 5 元組連線追蹤 2 元組連線追蹤

用戶端 IP、目的地 IP、通訊協定

CLIENT_IP_PROTO

3 元組雜湊 5 元組連線追蹤 3 元組連線追蹤

用戶端 IP、用戶端通訊埠、目的地 IP、目的地通訊埠、通訊協定

CLIENT_IP_PORT_PROTO

5 元組雜湊 5 元組連線追蹤 5 元組連線追蹤

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

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

持續連線至健康狀態不良的後端設定會控制在所選後端變為不健康後,是否要讓現有連線持續存在 (只要後端仍保留在負載平衡器所設定的後端執行個體群組中)。

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

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

  • DEFAULT_FOR_PROTOCOL (預設)
  • NEVER_PERSIST
  • ALWAYS_PERSIST

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

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

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

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

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

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

NEVER_PERSIST TCP、UDP:連線絕不會持續連線至健康狀態不良的後端
ALWAYS_PERSIST

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

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

無法設定

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

閒置逾時

根據預設,負載平衡器處理與項目相符的最後一個封包後,連線追蹤表中的項目會在 600 秒後過期。只有在連線追蹤值小於 5 組時,才能修改這個預設閒置逾時值 (也就是當工作階段相依性設為 CLIENT_IPCLIENT_IP_PROTO,且追蹤模式為 PER_SESSION 時)。

可設定的閒置逾時時間上限為 57,600 秒 (16 小時)。

如要瞭解如何變更閒置逾時值,請參閱「設定連線追蹤政策」。

單一用戶端部署的連線

當您測試連線至內部 passthrough 網路負載平衡器 IP 位址時,請注意以下事項:

  • 如果用戶端 VM 不是負載平衡的 VM,也就是不是後端 VM,則新連線會傳送至負載平衡器的健康後端 VM。不過,由於所有工作階段相依性選項至少都會依賴用戶端系統的 IP 位址,因此來自同一個用戶端的連線可能會比預期更頻繁地分散至同一個後端 VM。

    實際上,這表示您無法透過從單一用戶端連線至內部直通式網路負載平衡器,來精準監控通過內部直通式網路負載平衡器的流量分配狀況。至於監控流量分配所需的用戶端數量,則取決於負載平衡器類型、流量類型及健康後端數量。

  • 如果用戶端 VM 也是負載平衡器的後端 VM,則傳送至負載平衡器轉送規則 IP 位址的連線,一律會由同一個後端 VM (也是用戶端 VM) 來回應。無論後端 VM 是否健康,都會發生這種情況。這種情況適用於傳送至負載平衡器 IP 位址的所有流量,而不只是位於負載平衡器內部轉送規則指定的通訊協定和通訊埠上的流量。

    如需更多資訊,請參閱「從達到負載平衡的 VM 傳送要求」。

連線排除

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

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

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

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

UDP 分割

內部直通式網路負載平衡器可處理分割和未分割的 UDP 封包。如果應用程式使用分段的 UDP 封包,請留意以下事項:
  • UDP 封包在到達 Google CloudVPC 網路之前可能會先分段。
  • Google Cloud 虛擬私有雲網路會在 UDP 片段到達時轉送 (不會等待所有片段都到達)。
  • 非Google Cloud 網路和內部網路設備可能會在 UDP 片段抵達時轉送,延遲分段 UDP 封包,直到所有片段都抵達為止,或捨棄分段 UDP 封包。詳情請參閱網路供應商或網路設備的說明文件。

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

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

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

容錯移轉

內部直通式網路負載平衡器可讓您將部分後端指定為備援後端。只有在主要後端執行個體群組中,健康狀態良好的 VM 數量低於可設定的閾值時,系統才會使用這些後端。根據預設,如果所有主要和容錯移轉 VM 都健康狀態不良,Google Cloud 會在所有主要 VM 之間分配新連線,這是最不得已的做法。

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

如要進一步瞭解內部直通式網路負載平衡器中的容錯移轉功能,請參閱「內部直通式網路負載平衡器的容錯移轉功能」一文。

後續步驟