直通式網路負載平衡器會將傳入流量分配到可用的後端執行個體。本文說明負載平衡器如何選取後端、追蹤連線,以及管理工作階段相依性、加權負載平衡和容錯移轉。
瞭解這些功能如何搭配運作,有助於您最佳化負載平衡設定,確保效能穩定可靠,並有效運用資源。如果應用程式需要工作階段持續性,這些機制就非常重要,可確保每次使用者互動的行為一致。
後端選取和連線追蹤
後端選取和連線追蹤功能會搭配運作,在不同後端之間平衡多個連線,並將每個連線的所有封包轉送至同一個後端。這需要採取兩步驟策略。首先,系統會使用一致雜湊法選取後端。接著,這項選擇會記錄在連線追蹤表格中。
下列步驟說明後端選取和連線追蹤。
1. 檢查連線追蹤表格項目
負載平衡器會透過下列程序,判斷負載平衡封包是屬於新連線還是現有連線:
含有
SYN旗標的 TCP 封包:
所有其他封包:負載平衡器會檢查封包是否與現有的連線追蹤表格項目相符。封包雜湊的精細程度取決於您設定的連線追蹤模式和工作階段相依性,用於檢查現有的連線追蹤表格項目。詳情請參閱「連線追蹤模式」一節中的表格。
如果封包符合連線追蹤資料表項目,負載平衡器會將封包傳送至先前選取的後端。
如果封包與連線追蹤表格項目不符,請繼續執行「找出符合條件的後端」步驟。
如要瞭解連線追蹤表格項目的保留時間和保留條件,請參閱「管理連線追蹤表格項目」步驟。
2. 後端選取步驟
對於新連線,負載平衡器會使用一致性雜湊,從符合資格的後端中選取後端。
下列步驟說明如何為新連線選取符合資格的後端,然後在連線追蹤表格中記錄該連線。
2.1 找出符合資格的後端
「符合資格的後端」是指可接收新連線的後端。下表根據負載平衡器是否使用容錯移轉,定義符合條件的後端組合。
| 容錯移轉 | 符合資格的後端 |
|---|---|
停用容錯移轉負載平衡功能後,所有設定的後端都會成為主要後端。符合資格的後端組合定義如下:
|
|
啟用容錯移轉負載平衡功能後,負載平衡器會使用健康狀態檢查資訊和容錯移轉政策設定,定義符合資格的後端集:
|
2.2 調整可用區相依性的適用後端
如果符合下列任一情況,系統會略過這個步驟:
如果啟用區域親和性、用戶端與區域親和性相容,且發生區域相符情形,系統會將用戶端的新連線,轉送至調整後的合格後端集。如要瞭解詳情,請參考下列資源:
2.3 選取符合條件的後端
負載平衡器會維護符合條件的後端雜湊,每個後端雜湊都會對應至單位圓。
處理連線追蹤表格中未列出的連線封包時,負載平衡器會計算封包特性的雜湊值,並將該雜湊值對應至同一個單位圓,然後在圓周上選取符合資格的後端。用於計算封包雜湊的一組封包特性,是由工作階段相依性設定定義。舉例來說,如果所選工作階段相依性產生 2 元組或 3 元組後端選取雜湊,則來自來源 IP 位址的所有 TCP 連線都會對應至同一個合格後端。
- 如未明確設定工作階段相依性,系統會預設為
NONE工作階段相依性。
一致雜湊可確保負載平衡器將新連線指派給符合資格的後端,即使符合資格的後端數量有所變動,也能盡量減少對應中斷。
如果符合資格的後端組合「沒有」變更,負載平衡器「一律」會為連線選取相同的合格後端,更廣泛地說,對於工作階段相依性設定定義的所有封包特性相同的封包,負載平衡器「一律」會選取相同的合格後端。
如果新增或移除符合條件的後端,一致雜湊會盡可能減少對應至其他符合條件後端的中斷情形,也就是說,對應至其他符合條件後端的大多數連線會繼續對應至相同的符合條件後端。
此外,一致雜湊可確保負載平衡器盡可能公平地在符合資格的後端之間分配新連線。針對設定的工作階段相依性設定所定義的所有可能封包雜湊 (更具體地說,當工作階段相依性產生 5 元組雜湊以選取後端時,針對所有可能的連線):
新增符合資格的後端時,大約
1/N個新連線會對應至新加入的後端。在這種情況下,N是新增後端的後端計數。移除合格後端時,大約有
1/N個新連線會對應至N-1個剩餘後端中的其中一個。在這種情況下,N是移除符合資格的後端「之前」的後端數量。
2.4 建立連線追蹤表格項目
選取後端後,負載平衡器會建立連線追蹤表格項目。連線追蹤表格項目會將封包特性對應至所選後端。用於這項對應的封包標頭欄位,取決於您設定的連線追蹤模式和工作階段相依性。如要瞭解連線追蹤表格中雜湊使用的封包特性,請參閱「連線追蹤模式」一節中的表格。
3。管理連線追蹤表格項目
負載平衡器會根據下列事件和規則管理連線追蹤資料表項目:
移除閒置項目:如果負載平衡器在一段時間內未處理新的輸入封包,系統會移除連線追蹤表格項目。除非您設定自訂閒置逾時時間,否則負載平衡器會使用預設的閒置逾時時間 (600 秒)。詳情請參閱「閒置逾時」。
用戶端連線追蹤表填滿時,系統會逐出項目:內部直通網路負載平衡器的連線追蹤表,是在用戶端系統上實作,例如執行 VM 執行個體的主機、為 VLAN 連結供電的主機,或執行 Cloud VPN 通道的主機。當用戶端的連線追蹤表格已滿時,系統會移除最近最少使用的連線項目。
關閉的 TCP 連線:使用
FIN或RST封包關閉 TCP 連線時,系統「不會」移除 TCP 連線的連線追蹤表格項目。系統之後可能會將其視為閒置項目而移除。每個「新」TCP 連線一律會帶有SYN旗標,並會按照「檢查連線追蹤表格項目」步驟所述的方式處理。連線在容錯移轉時不保留:如果設定了至少一個容錯移轉後端,且容錯移轉設定的連線排除功能已停用,則在符合資格的後端組合在主要和容錯移轉後端之間切換後,負載平衡器會移除連線追蹤資料表中的所有項目,並遵循下列規則:
當符合資格的後端組合在主要和容錯移轉後端之間切換時,負載平衡器不會主動移除連線追蹤表格項目。相反地,當連線的「下一個封包」抵達時,負載平衡器會移除每個連線追蹤表格項目,「前提是」符合資格的後端組合尚未切換回來。
如果一組符合資格的後端在主要和容錯移轉後端之間來回切換 (例如從主要切換至容錯移轉,然後再切換回主要),且切換事件之間沒有任何連線封包抵達,則連線追蹤資料表項目會保留,除非有其他原因或事件移除連線追蹤資料表項目。
詳情請參閱「容錯移轉時的連線排除」。
連線未持續連至健康狀態不良的後端:如果封包通訊協定停用持續連線至健康狀態不良的後端,負載平衡器會根據下列規則,移除健康狀態不良後端的連線追蹤表格項目:
當先前選取的後端變成健康狀態不良時,負載平衡器不會主動移除該後端的連線追蹤表格項目。如果先前選取的後端仍不正常,負載平衡器會在連線的下一個封包抵達時,移除連線追蹤資料表項目。連線的後續封包會視為新連線,因為負載平衡器會選取新的合格後端,並建立新的連線追蹤表格項目。
如果先前選取的後端從健康狀態變更為不健康,然後又恢復健康,且在先前選取的後端不健康時,沒有任何連線封包到達,則連線追蹤表格項目會保留,除非有其他原因或事件移除連線追蹤表格項目。
移除、停止或刪除後端的連線排除:如果已啟用移除、停止或刪除後端的連線排除功能,系統會在可設定的連線排除逾時時間過後,移除連線追蹤資料表項目。收到移除 (捨棄)、停止或刪除後端的指令時 (包括因縮減代管執行個體群組而產生的刪除指令),系統就會開始計算逾時時間。如果已移除、停止或刪除的後端停用連線排除功能,系統會在收到移除、停止或刪除後端的指令時,移除連線追蹤表格項目。詳情請參閱「啟用連線排除」。
工作階段相依性
內部直通式網路負載平衡器的工作階段相依性設定,會定義用於選取後端的封包雜湊,以及用於追蹤連線的封包雜湊 (取決於連線追蹤模式)。
您是在後端服務上設定工作階段相依性,而不是在每個後端執行個體群組或 NEG 上設定。工作階段相依性會決定要使用哪些 IP 和第 4 層標頭,來計算封包特性的雜湊。封包特性的雜湊值會用於後端選取步驟。
內部直通式網路負載平衡器支援下列工作階段相依性設定。
| 選取後端的雜湊方法 | 工作階段相依性設定 |
|---|---|
|
非片段化封包的 5 元組雜湊 (包含來源 IP 位址、來源通訊埠、通訊協定、目的地 IP 位址和目的地通訊埠),其中包含通訊埠資訊 (TCP 封包和非片段化 UDP 封包) 或3 元組雜湊 (包含來源 IP 位址、目的地 IP 位址和通訊協定),適用於 UDP 封包片段和其他所有通訊協定的封包 |
NONE1
OR CLIENT_IP_PORT_PROTO
|
| 3 元組雜湊 (由來源 IP 位址、目的地 IP 位址和通訊協定組成) |
CLIENT_IP_PROTO |
| 2 元組雜湊 (由來源 IP 位址和目的地 IP 位址組成) |
CLIENT_IP |
| 1 元組雜湊 (僅包含來源 IP) |
CLIENT_IP_NO_DESTINATION |
1 NONE 工作階段相依性不代表沒有工作階段相依性。而是指工作階段相依性是透過封包特徵的 5 元組雜湊或 3 元組雜湊完成,功能上與設定 CLIENT_IP_PORT_PROTO 時的行為相同。
工作階段相依性和負載平衡器下一個躍點
當內部直通式網路負載平衡器是靜態路由的下一個躍點時,目的地 IP 位址不限於負載平衡器的轉送規則 IP 位址。封包的目的地 IP 位址可以是任何符合靜態路由目的地範圍的 IP 位址。
選取符合資格的後端取決於封包特性的雜湊計算結果。除了 CLIENT_IP_NO_DESTINATION 工作階段相依性 (1 元組雜湊) 之外,雜湊部分取決於封包目的地 IP 位址。
如果符合資格的後端組合沒有變更,負載平衡器會為所有可能的新連線選取相同的後端,這些連線具有相同的封包特徵 (如工作階段相依性所定義)。如果需要同一個後端 VM 處理來自用戶端的所有封包,且僅根據來源 IP 位址,不考慮目的地 IP 位址,請使用 CLIENT_IP_NO_DESTINATION 工作階段相依性。
連線追蹤政策
本節說明負載平衡器連線追蹤政策中的設定:
連線追蹤模式
本節說明負載平衡器如何在連線追蹤表格中建立項目。內部直通式網路負載平衡器會追蹤其支援的所有通訊協定和所有工作階段相依性選項的連線。連線追蹤模式、通訊協定和工作階段相依性,會決定一組封包特性,用於在每個連線追蹤表格項目中建立封包雜湊。
連線追蹤模式可以是下列其中一種:
PER_CONNECTION:這是預設且最精細的連線追蹤模式。每項連線都會定義為封包特性的 5 元組雜湊或 3 元組雜湊,具體取決於封包中是否有通訊埠資訊。包含通訊埠資訊的非分段封包 (例如 TCP 封包和非分段 UDP 封包) 會以 5 元組雜湊追蹤。所有其他封包則是以 3 元組雜湊追蹤。PER_SESSION:這個連線追蹤模式的精細程度較低,使用的雜湊與工作階段相依性雜湊相符。視所選的工作階段相依性而定,PER_SESSION追蹤模式可將多個不同的連線視為單一連線,以便追蹤連線。這樣一來,系統就不會頻繁將連線視為新連線,並套用後端選取步驟。
下表為摘要:
- 用於後端選取的封包雜湊;以及
- 用於連線追蹤的封包雜湊,取決於連線追蹤模式、通訊協定和工作階段相依性。
| 工作階段相依性 | 後端選取作業的封包雜湊 | 用於追蹤連線的封包雜湊 | |
|---|---|---|---|
使用 PER_CONNECTION 追蹤模式 (預設) 時 |
使用PER_SESSION追蹤模式時 |
||
NONE (預設)或 CLIENT_IP_PORT_PROTO
|
|
|
|
CLIENT_IP_PROTO |
|
|
|
CLIENT_IP |
|
|
|
CLIENT_IP_NO_DESTINATION |
|
|
|
如要瞭解如何變更連線追蹤模式,請參閱「設定連線追蹤政策」。
持續連線至健康狀態不良的後端
持續連線至健康狀態不良的後端:如果先前選取的 VM 健康狀態不良,可控制現有連線是否能持續連線至先前選取的後端 VM。如要持續連線至健康狀態不良的後端,後端 VM 必須仍是負載平衡執行個體群組或 NEG 的成員。
可用的連線持續性選項如下:
DEFAULT_FOR_PROTOCOL(預設)NEVER_PERSISTALWAYS_PERSIST
下表說明「持續連線至健康狀態不良的後端」行為,具體取決於「持續連線至健康狀態不良的後端」選項、連線追蹤模式、工作階段相依性和通訊協定。
| 「持續連線至健康狀態不良的後端」選項 | 持續連線至健康狀態不良的後端行為 | |
|---|---|---|
使用 PER_CONNECTION 追蹤模式 (預設) 時 |
使用 PER_SESSION 追蹤模式時 |
|
DEFAULT_FOR_PROTOCOL |
|
|
NEVER_PERSIST |
所有通訊協定:連線不會持續連至健康狀態不良的後端 | |
ALWAYS_PERSIST
這個選項僅適用於進階用途。 |
|
無法設定 |
如要瞭解如何變更連線持續性行為,請參閱「設定連線追蹤政策」。
持續連線至健康狀態不良後端的 TCP 連線行為
在下列情況下,負載平衡器會使用 5 元組雜湊連線追蹤功能處理 TCP 連線:
- 使用
PER_CONNECTION追蹤模式 (所有工作階段相依性),或 - 使用
PER_SESSION追蹤模式時,和工作階段相依性為NONE或CLIENT_IP_PORT_PROTO。
負載平衡器使用 5 元組雜湊連線追蹤 TCP 連線時,請注意下列行為:
- 如果健康狀態不良的後端持續回應封包,連線就會持續,直到重設或關閉為止 (由健康狀態不良的後端或用戶端執行)。
- 如果狀況不良的後端傳送 TCP 重設 (RST) 封包,或未回應封包,用戶端可能會使用新連線重試,讓負載平衡器選取其他符合資格的後端。(在「找出符合資格的後端」步驟中,系統會將 TCP
SYN封包視為新連線)。
閒置逾時
連線閒置一段時間後,連線追蹤資料表項目就會移除。除非您設定自訂閒置逾時,否則負載平衡器會使用預設閒置逾時值 600 秒 (10 分鐘)。下表列出不同工作階段相依性和連線追蹤模式設定組合,可設定的閒置逾時時間下限和上限。
| 工作階段相依性 | 連線追蹤模式 | 預設閒置逾時 | 可設定的閒置逾時下限 | 可設定的閒置逾時上限 |
|---|---|---|---|---|
| 任何連線元組 | PER_CONNECTION |
600 秒 | 60 秒 | 600 秒 |
|
PER_SESSION |
600 秒 | 60 秒 | 57,600 秒 |
5 元組 (NONE、CLIENT_IP_PORT_PROTO) |
PER_SESSION |
600 秒 | 60 秒 | 600 秒 |
如要瞭解如何變更閒置逾時值,請參閱「設定連線追蹤政策」。
為已移除、停止或刪除的後端排除連線
發生下列任一情況時,連線排除功能會提供可設定的時間下限,讓現有連線在負載平衡器的連線追蹤表格中保留:
- 從後端執行個體群組中移除虛擬機器 (VM) 執行個體 (包括捨棄後端代管執行個體群組中的執行個體)
- VM 已停止或刪除 (包括滾動式更新或縮減後端代管執行個體群組等自動動作)
- 從後端網路端點群組 (NEG) 移除端點
根據預設,後端移除、停止或刪除時的連線排除功能會停用。詳情請參閱「啟用連線排除」。
容錯移轉
您可以透過容錯移轉功能,將後端執行個體群組或 NEG 及其端點分類,藉此影響符合資格的後端組合:
- 「主要後端」是設為「主要後端群組」的執行個體群組或 NEG 中的 VM 或端點。
- 「容錯移轉後端」是指設為容錯移轉後端群組的執行個體群組或 NEG 中的 VM 或端點。
根據預設,將執行個體群組或 NEG 新增至後端服務時,執行個體群組或 NEG 會是主要後端群組。一項後端服務最多可新增 50 個主要後端群組和 50 個容錯移轉後端群組。
如要啟用容錯移轉功能,您必須為負載平衡器的後端服務設定下列兩項:
- 至少一個非空白的主要後端群組
- 至少一個非空白的容錯移轉後端群組
啟用容錯移轉後,下列因素會決定符合資格的後端組合:
- 各後端的健康狀態
- 容錯移轉政策中的容錯移轉率
- 容錯移轉政策中的「如果後端健康狀態不良,則捨棄流量」設定
容錯移轉政策
您可以在後端服務的容錯移轉政策中調整下列設定。只有在啟用容錯移轉時,容錯移轉政策才會生效。
- 容錯移轉率:介於
0.0至1.0之間的數字 (含)。 - 如果後端健康狀態不良,則捨棄流量:布林值,用於決定負載平衡器的最後手段行為。「failover ratio」(容錯移轉比率) 和「drop traffic if backends are unhealthy」(如果後端健康狀態不良,則捨棄流量) 設定會與其他因素搭配運作,控制符合資格的後端組合。
- 容錯移轉時連線排除:布林值,用於控制當符合資格的後端組合在主要和容錯移轉後端之間切換時,連線是否會保留在先前選取的後端。
容錯移轉率
容錯移轉比率會決定符合資格的後端組合何時在主要後端和容錯移轉後端之間切換。比例可以是 0.0 到 1.0 之間的數字 (含首尾)。如未指定容錯移轉比率, Google Cloud 會使用預設值 0.0。最佳做法是根據您的用途設定容錯移轉比率,而不是依賴預設值。
容錯移轉時連線排除
容錯移轉時連線排除:控制當符合資格的後端在主要和容錯移轉後端之間切換時,先前選取的後端 VM 或端點是否會保留現有連線。
容錯移轉時連線排除功能預設為啟用。下表摘要說明連線是否會持續,具體取決於容錯移轉時排除連線選項和通訊協定:
| 容錯移轉時連線排除選項 | 當符合資格的後端集在主要和容錯移轉後端之間切換時的行為 |
|---|---|
| 已啟用 (預設) | 所有通訊協定:只要有對應的連線追蹤表格項目,當符合資格的後端組合在主要和容錯移轉後端之間切換時,連線就會持續。詳情請參閱管理連線追蹤表格項目步驟。 |
| 已停用 | 所有通訊協定:如果符合條件的後端組合在主要和容錯移轉後端之間切換,連線就不會保留 |
在下列情況下,建議停用容錯移轉時排除連線功能:
修補後端 VM。修補前,您可以將健康的主要後端設為健康狀態檢查失敗,這樣符合資格的後端就能成為健康的容錯移轉後端。如果停用容錯移轉連線排除功能,負載平衡器會移除連線追蹤表格項目,將後端選取步驟套用至後續封包,並將封包傳送至其他符合資格的後端。接著,不同的後端會透過 TCP 重設關閉連線,讓用戶端 VM 快速建立與負載平衡器的新連線。
單一後端 VM 可確保資料一致性。如要確保符合資格的後端組合不超過一個成員 VM 或端點,請停用容錯移轉時的連線排除功能,降低資料不一致的可能性。
如要瞭解如何在容錯移轉時停用連線排除功能,請參閱「定義容錯移轉政策」。
最佳做法和指引
您可以按照下列操作指南,最佳化內部直通式網路負載平衡器。下列各節說明管理分段 UDP 封包的技術需求,以及測試單一用戶端負載分配的最佳做法。
處理 UDP 分段
內部直通式網路負載平衡器可以處理已分段和未分段的 UDP 封包。如果應用程式使用分段 UDP 封包,請注意下列事項:- UDP 封包可能會在抵達 Google Cloud虛擬私有雲網路前遭到分段。
- 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 不是負載平衡器的後端:系統會按照「後端選取和連線追蹤」步驟所述處理新連線。在「Select an eligible backend」(選取符合資格的後端) 步驟中,負載平衡器會根據工作階段相依性建立封包特性的雜湊。
請注意,所有工作階段相依性選項都至少會依據用戶端的 IP 位址,因此來自同一用戶端的連線可能會比您預期的更頻繁地分配到同一個符合資格的後端。因此,您無法透過從單一用戶端連線至內部直通式網路負載平衡器,準確模擬新連線的整體分布情形。
如果用戶端 VM 也是負載平衡器的後端 VM:負載平衡器實際上完全不會處理新連線。由於轉送規則有本機路由,因此目的地 IP 位址為負載平衡器轉送規則的傳出封包,會在用戶端客體 OS 內在本機轉送。
後續步驟
- 如要設定及測試使用容錯移轉功能的內部直通式網路負載平衡器,請參閱「設定內部直通式網路負載平衡器的容錯移轉功能」。
- 如要設定及測試內部直通式網路負載平衡器,請參閱「設定內部直通式網路負載平衡器」。