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

本頁說明內部直通式網路負載平衡器如何分配流量。

後端選取和連線追蹤

後端選取和連線追蹤功能會共同運作,在不同後端之間平衡多個連線,並將每個連線的所有封包路由至相同後端。這項策略分為兩部分。首先,系統會使用一致性雜湊選取後端。然後,這項選取項目會記錄在連線追蹤表格中。

下列步驟會擷取後端選取和連線追蹤程序。

1. 檢查連線追蹤資料表項目,使用先前選取的後端

如果是現有連線,負載平衡器會使用連線追蹤表,找出該連線先前選取的後端。

負載平衡器會嘗試使用下列程序,將每個負載平衡封包與連線追蹤表中的項目相符:

  • 如果封包是含有 SYN 標記的 TCP 封包:

    • 如果負載平衡器的連線追蹤模式為 PER_CONNECTION,請繼續進行「找出符合資格的後端」步驟。在PER_CONNECTION追蹤模式中,無論設定的工作階段相依性為何,帶有 SYN 標記的 TCP 封包一律代表新連線。

    • 如果負載平衡器的連線追蹤模式為 PER_SESSION 工作階段相依性為 NONECLIENT_IP_PORT_PROTO,請繼續執行「找出符合資格的後端」步驟。在PER_SESSION追蹤模式中,只有在使用其中一個 5 元組工作階段相依性選項 (NONECLIENT_IP_PORT_PROTO) 時,帶有 SYN 標記的 TCP 封包才代表新連線。

  • 如果是其他封包,負載平衡器會檢查封包是否與現有的連線追蹤資料表項目相符。用來比較封包與現有連線追蹤表項目的連線元組 (一組封包特徵),取決於您設定的連線追蹤模式和工作階段親和性。如要瞭解連線追蹤功能使用哪個連線元組,請參閱「連線追蹤模式」一節中的表格

    • 如果封包符合連線追蹤資料表項目,負載平衡器會將封包傳送至先前選取的後端。

    • 如果封包與連線追蹤表項目不符,請繼續執行「找出符合資格的後端」步驟。

    如要瞭解連線追蹤資料表項目保留時間和保留條件,請參閱「建立連線追蹤資料表項目」步驟。

2. 為新連線選取符合資格的後端

對於新連線,負載平衡器會使用一致性雜湊演算法,從現用集區的合格後端中選取後端。

下列步驟說明如何為新連線選取符合資格的後端,然後在連線追蹤資料表中記錄該連線。

2.1 找出符合資格的後端

這個步驟會模擬哪些後端可接收新連線,並考量健康狀態和容錯移轉政策設定:

  • 沒有容錯移轉政策:符合資格的後端集取決於健康狀態檢查:

    • 如果至少有一個後端運作狀態良好,則符合資格的後端組合會包含所有運作狀態良好的後端。

    • 如果所有後端健康狀態不良,則符合資格的後端集會包含所有後端。

  • 已設定容錯移轉政策:符合資格的後端組合取決於健康狀態檢查和容錯移轉政策設定:

    • 如果至少有一個後端健康狀態良好,則符合資格的後端組合會包含現用集區中所有健康狀態良好的後端。

      • 現用集區可能包含所有健康狀態良好的主要後端,也可能包含所有健康狀態良好的容錯移轉後端。現用集區的成員資格取決於設定的容錯移轉率、健康狀態良好的主要後端數量,以及主要後端總數。

      • 無論容錯移轉率為何,如果沒有健康狀態良好的容錯移轉後端,但至少有一個健康狀態良好的主要後端,則作用中集區會包含所有健康狀態良好的主要後端。

    • 如果沒有健康狀態良好的後端,且負載平衡器的容錯移轉政策設為捨棄新連線,則符合資格的後端集合會是空的。負載平衡器會捨棄連線的封包。

    • 如果沒有健康狀態良好的後端,且負載平衡器的容錯移轉政策設為捨棄新連線,健康狀態檢查在此情況下就不適用。符合資格的後端都是主要後端。

2.2 調整區域親和性的適用後端

如果符合下列任一情況,系統就會略過這個步驟:

如果啟用區域相依性,且用戶端與區域相依性相容,並發生區域相符情形,系統就會將來自用戶端的新連線,路由至經過調整的合格後端集。如要瞭解詳情,請參考下列資源:

2.3 選取符合資格的後端

負載平衡器會使用一致性雜湊選取符合資格的後端。負載平衡器會維護符合資格後端的雜湊,並對應至單位圓。處理不在連線追蹤表中的連線封包時,負載平衡器會計算封包特徵的雜湊值,並將該雜湊值對應至同一個單位圓,然後在圓周上選取符合資格的後端。用於計算封包雜湊值的封包特徵集,是由工作階段相依性設定定義。

  • 如果未明確設定工作階段相依性,預設值為 NONE 工作階段相依性。

  • 即使符合資格的後端數量有所變更,負載平衡器仍會盡可能以一致的方式,將新連線指派給符合資格的後端。以下是穩定雜湊的優點,說明負載平衡器如何為沒有連線追蹤資料表項目的可能新連線,選取符合資格的後端:

    • 如果符合資格的後端組合「沒有」變更,負載平衡器會為所有可能的新連線選取相同的後端,這些連線具有相同的封包特徵 (如工作階段相依性所定義)。

    • 新增符合資格的後端時,大約 1/N 個可能的新連線會對應至新後端。在這種情況下,N新增後符合資格的後端數量。

    • 移除符合資格的後端時,大約有 1/N 個可能的新連線會對應至其中一個N-1剩餘後端。在這種情況下,N 是指移除符合資格的後端之前的後端數量。

2.4 建立連線追蹤資料表項目

選取後端後,負載平衡器會建立連線追蹤資料表項目。連線追蹤資料表項目會將封包特徵對應至所選後端。用於此對應的封包標頭欄位取決於您設定的連線追蹤模式和工作階段相依性。

負載平衡器會根據下列規則移除連線追蹤資料表項目:

  • 連線閒置一段時間後,連線追蹤資料表項目就會遭到移除。除非您設定自訂閒置逾時,否則負載平衡器會使用預設的 600 秒閒置逾時。詳情請參閱「閒置逾時」。

  • FINRST 封包關閉 TCP 連線時,系統「不會」移除連線追蹤資料表項目。任何的 TCP 連線一律會攜帶 SYN 旗標,並按照「檢查連線追蹤資料表項目」步驟所述處理。

  • 如果已設定容錯移轉政策,且停用「容錯移轉和容錯回復時排除連線」設定,當容錯移轉或容錯回復期間現用集區變更時,負載平衡器會移除連線追蹤表中的所有項目。詳情請參閱「容錯移轉和容錯回復時連線排除」。

  • 如果後端健康狀態不良,連線追蹤表中的項目可能會遭到移除。這項行為取決於連線追蹤模式、通訊協定,以及「持續連線至健康狀態不良的後端」設定。詳情請參閱「持續連線至健康狀態不良的後端」。

  • 在發生後端 VM 遭刪除、後端 VM 從執行個體群組或 NEG 中移除等事件後,系統會觸發連線排除逾時,並移除連線追蹤表中的項目。詳情請參閱「啟用連線排除功能」。

工作階段相依性

工作階段相依性可控制如何分配從用戶端傳至負載平衡器後端的新連線。內部直通式網路負載平衡器會使用工作階段相依性,從一組符合資格的後端中選取後端,如「後端選取和連線追蹤」一節中的「找出符合資格的後端」和「選取符合資格的後端」步驟所述。您是在後端服務上設定工作階段相依性,而不是在每個後端執行個體群組或 NEG 上設定。

內部直通式網路負載平衡器支援下列工作階段相依性設定。每個工作階段相依性設定都會使用一致性雜湊,選取符合資格的後端。工作階段親和性設定會決定要使用 IP 標頭和第 4 層標頭中的哪些欄位來計算雜湊。

後端選取作業的雜湊方法 工作階段相依性設定

5 個元組構成的雜湊碼 (包含來源 IP 位址、來源通訊埠、通訊協定、目的地 IP 位址和目的地通訊埠),適用於包含通訊埠資訊的非片段封包,例如 TCP 封包和非片段 UDP 封包

3 個元組雜湊 (包含來源 IP 位址、目的地 IP 位址和通訊協定),適用於 UDP 封包片段和其他所有通訊協定的封包

NONE1

5 個元組構成的雜湊碼 (包含來源 IP 位址、來源通訊埠、通訊協定、目的地 IP 位址和目的地通訊埠),適用於包含通訊埠資訊的非片段封包,例如 TCP 封包和非片段 UDP 封包

3 個元組雜湊 (包含來源 IP 位址、目的地 IP 位址和通訊協定),適用於 UDP 封包片段和其他所有通訊協定的封包

CLIENT_IP_PORT_PROTO
3 元組雜湊
(包含來源 IP 位址、目的地 IP 位址和通訊協定)
CLIENT_IP_PROTO
2 元組雜湊
(包含來源 IP 位址和目的地 IP 位址)
CLIENT_IP
1 元組雜湊碼
(僅包含來源 IP)
CLIENT_IP_NO_DESTINATION2

1 工作階段相依性設定為 NONE「不」表示沒有工作階段相依性。這表示未明確設定任何工作階段相依性選項。

一律會執行雜湊作業來選取後端。如果將工作階段親和性設定為 NONE,負載平衡器會使用 5 元組雜湊或 3 元組雜湊選取後端,這與設定為 CLIENT_IP_PORT_PROTO 的行為相同。

2 CLIENT_IP_NO_DESTINATION 是以每個接收封包的來源 IP 位址為依據的單一元組雜湊。如果您需要根據封包的來源 IP 位址,讓同一個後端 VM 處理來自用戶端的所有封包,而不考慮封包的目的地 IP 位址,這項設定就非常實用。如果靜態路徑的下一個躍點是內部直通式網路負載平衡器,通常就會發生這些情況。詳情請參閱「工作階段相依性和下一個躍點為內部直通式網路負載平衡器」。

如要瞭解不同的工作階段親和性設定如何影響後端選取和連線追蹤方法,請參閱「連線追蹤模式」一節中的表格

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

設定靜態路徑以使用下一個躍點內部直通式網路負載平衡器時,負載平衡器會使用相同的後端選取和連線追蹤方法。後端選取作業仍會根據設定的會期親和性計算雜湊。除了 CLIENT_IP_NO_DESTINATION 工作階段相依性 (1 元組雜湊) 之外,後端選取雜湊部分取決於封包目的地 IP 位址。

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

如果設定的後端 VM 數量和健康狀態良好的後端 VM 數量維持不變 (未設定容錯移轉,或已設定容錯移轉,但未發生容錯移轉或容錯回復事件),負載平衡器會採取下列行為:

  • 如果只有一個已設定且健康狀態良好的後端 VM (在現用集區中,如果已設定容錯移轉),則無論使用哪種工作階段相依性,所有雜湊都會對應至該後端 VM。

  • 如果已設定兩個以上的健康狀態良好的後端 VM (如果已設定容錯移轉,則為使用中集區),您選擇的會期親和性就非常重要:

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

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

連線追蹤政策

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

連線追蹤模式

負載平衡器的連線追蹤表會將連線元組對應至雜湊表中的先前所選後端。組成每個連線元組的封包特徵集,取決於連線追蹤模式和工作階段相依性。

內部直通式網路負載平衡器會追蹤支援的所有通訊協定連線。

連線追蹤模式是指負載平衡器連線追蹤表中的每個連線元組的精細程度。連線元組可以是 5 元組或 3 元組 (PER_CONNECTION 模式),也可以與工作階段相依性設定相符 (PER_SESSION 模式)。

  • PER_CONNECTION。這是預設的連線追蹤模式。這個連線追蹤模式會使用 5 元組雜湊或 3 元組雜湊。包含通訊埠資訊的非片段封包 (例如 TCP 封包和非片段 UDP 封包) 會以 5 元組雜湊追蹤。其他所有封包則會以 3 元組雜湊追蹤。

  • PER_SESSION。這個連線追蹤模式會使用雜湊,其中包含與工作階段親和性雜湊相同的封包特徵。視所選工作階段相依性而定,PER_SESSION 可能會導致連線更常與現有連線追蹤資料表項目相符,進而減少工作階段相依性雜湊選取後端的頻率。

下表摘要說明連線追蹤模式和工作階段親和性如何搭配運作,將每個連線的所有封包路由至相同後端。

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

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

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

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

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

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

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

CLIENT_IP_NO_DESTINATION 所有通訊協定:1 元組雜湊

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

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

所有通訊協定:1 元組雜湊
CLIENT_IP 所有通訊協定:2 元組雜湊

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

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

所有通訊協定:2 元組雜湊
CLIENT_IP_PROTO 所有通訊協定:3 元組雜湊

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

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

所有通訊協定:3 元組雜湊
CLIENT_IP_PORT_PROTO

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

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

TCP 和未分段的 UDP:5 值組雜湊

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

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

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

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

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

連線持續性設定會控管現有連線在所選後端 VM 或端點上是否持續存在,只要後端仍位於負載平衡器設定的後端群組 (在執行個體群組或 NEG 中),即使後端健康狀態不佳也一樣。

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

  • 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 小時)。

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

單一用戶端部署的連線

測試與只有一個用戶端的內部直通網路負載平衡器 IP 位址連線時,請注意以下事項:

  • 如果用戶端 VM 不是負載平衡的 VM,也就是說,不是後端 VM,系統會將新連線傳送至負載平衡器的正常後端 VM。不過,由於所有工作階段相依性選項都至少會使用用戶端系統的 IP 位址,因此來自同一用戶端的連線可能會比您預期的更常分配到同一個後端 VM。

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

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

    詳情請參閱從達到負載平衡的 VM 傳送要求

連線排除

當發生下列任一動作時,連線排除功能會提供可設定的額外時間,讓已建立的連線持續保留在負載平衡器的連線追蹤表中:

  • 從後端執行個體群組中移除虛擬機器 (VM) 執行個體 (包括捨棄後端代管執行個體群組中的執行個體)
  • VM 停止或遭到刪除 (包括自動動作,例如進行輪替更新或縮減後端代管執行個體群組)
  • 從後端網路端點群組 (NEG) 移除端點

根據預設,系統會停用上述動作的連線排除功能。 如要瞭解如何觸發連線排除功能及啟用這項功能,請參閱「啟用連線排除功能」。

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 都不健康,系統會將新連線分配在所有主要 VM 之間,這是最不得已的做法。Google Cloud

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

如要進一步瞭解如何使用容錯移轉功能選取後端並追蹤連線,請參閱「後端選取和連線追蹤」一節中的「找出符合資格的後端」和「建立連線追蹤資料表項目」步驟。

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

後續步驟