本頁說明外部直通式網路負載平衡器分配流量的概念。
後端選取和連線追蹤
後端選取和連線追蹤功能會共同運作,在不同後端之間平衡多個連線,並將每個連線的所有封包路由至相同後端。這項策略分為兩部分。首先,系統會使用一致性雜湊選取後端。然後,這項選取項目會記錄在連線追蹤表格中。
下列步驟說明後端選取和連線追蹤。
1. 檢查連線追蹤資料表項目
負載平衡器會透過下列程序,判斷負載平衡封包是屬於新連線還是現有連線:
含有
SYN旗標的 TCP 封包:
所有其他封包:負載平衡器會檢查封包是否與現有的連線追蹤資料表項目相符。用於檢查現有連線追蹤資料表項目的封包雜湊細微程度,取決於您設定的連線追蹤模式和工作階段相依性。詳情請參閱「連線追蹤模式」一節中的表格。
如果封包符合連線追蹤資料表項目,負載平衡器會將封包傳送至先前選取的後端。
如果封包與連線追蹤表項目不符,請繼續執行「找出符合資格的後端」步驟。
如要瞭解連線追蹤資料表項目保留的時間長度和條件,請參閱「管理連線追蹤資料表項目」步驟。
2。選取後端的步驟
對於新連線,負載平衡器會使用一致性雜湊,從符合資格的後端中選取後端。
下列步驟說明如何為新連線選取符合資格的後端,然後在連線追蹤資料表中記錄該連線。
2.1 找出符合資格的後端
符合資格的後端是指有資格接收新連線的後端。下表定義一組符合資格的後端,取決於您是否已設定容錯移轉政策,以及是否啟用加權負載平衡。
| 容錯移轉政策 | 加權負載平衡 | 符合資格的後端 |
|---|---|---|
如果未設定容錯移轉政策,且停用加權負載平衡,所有設定的後端都是主要後端。符合資格的後端集定義如下:
|
||
如果未設定容錯移轉政策,且已啟用加權負載平衡,則符合資格的後端會來自下列第一個不為空的集合:
|
||
設定容錯移轉政策並停用加權負載平衡後,負載平衡器會使用健康狀態檢查資訊和容錯移轉政策設定,定義符合資格的後端集:
|
||
設定容錯移轉政策並啟用加權負載平衡後,負載平衡器會使用權重資訊、健康狀態檢查資訊和容錯移轉政策設定,定義符合資格的後端集:
|
2.2 選取符合資格的後端
負載平衡器會維護符合資格後端的雜湊,每個後端雜湊都會對應至單位圓。加權負載平衡會改變符合資格的後端對應至圓圈的方式,權重較高的後端較有可能被選取,且選取機率與權重成正比。
處理不在連線追蹤表中的連線封包時,負載平衡器會計算封包特徵的雜湊值,並將該雜湊值對應至同一單位圓,然後在圓周上選取符合資格的後端。用於計算封包雜湊的封包特徵集,是由工作階段相依性設定定義。舉例來說,如果選取的工作階段相依性導致 2 元組或 3 元組後端選取雜湊,則來自來源 IP 位址的所有 TCP 連線都會對應至同一個符合資格的後端。
- 如果未明確設定工作階段親和性,預設值為
NONE工作階段親和性。
即使符合資格的後端數量或權重有所變更,一致性雜湊也能確保負載平衡器將新連線指派給符合資格的後端,盡量減少對應中斷情形。
負載平衡器一律會為連線選取相同的適用後端,一般而言,負載平衡器一律會為所有封包選取相同的適用後端,這些封包的封包特徵與工作階段親和性設定定義的特徵相同,適用於下列情況:
如果未設定加權負載平衡,當符合資格的後端集未變更時。
如果設定加權負載平衡,當符合資格的後端集合沒有變更且每個符合資格的後端權重維持不變時。
如果新增或移除符合資格的後端,或是變更後端的權重,一致性雜湊會盡量減少對其他符合資格後端對應項目的干擾,也就是說,對應至其他符合資格後端的連線,大多會繼續對應至同一個符合資格的後端。
此外,一致性雜湊可確保負載平衡器盡可能公平地在符合資格的後端之間分配新連線。針對設定的工作階段相依性設定定義的所有可能封包雜湊 (更具體來說,當工作階段相依性產生用於選取後端的 5 元組雜湊時,針對所有可能的連線):
如果未設定加權負載平衡,則每個符合資格的後端會對應大約
1/N個可能的封包雜湊,其中N是符合資格的後端數量。如果設定加權負載平衡,對應至各個適用後端的可能封包雜湊比率約為:適用後端的權重除以所有適用後端權重的總和。
以下兩個範例說明加權負載平衡如何影響每個符合資格後端的選取機率:
如果後端服務有兩個符合資格的後端,第一個後端的權重為
1,第二個後端的權重為4,則第一個符合資格的後端有 20% (1÷(1+4)) 的選取機率,第二個符合資格的後端有 80% (4÷(1+4)) 的選取機率。如果後端服務有三個符合資格的後端 (符合資格的後端
a的權重為0、符合資格的後端b的權重為2,以及符合資格的後端c的權重為6),則後端a的選取機率為 0% (0÷(0+2+6))、後端b的選取機率為 25% (2÷(0+2+6)),後端c的選取機率為 75% (6÷(0+2+6))。
2.3 建立連線追蹤資料表項目
選取後端後,如果設定的工作階段相依性支援封包通訊協定的連線追蹤功能,負載平衡器就會建立連線追蹤資料表項目。如果設定的工作階段相依性不支援封包通訊協定的連線追蹤,請略過這個步驟。
如果設定的工作階段相依性支援封包通訊協定的連線追蹤,則建立的連線追蹤資料表項目會將封包特徵對應至所選後端。用於此對應的封包標頭欄位取決於您設定的連線追蹤模式和工作階段相依性。
如要瞭解根據設定選項,哪些通訊協定可追蹤連線,以及連線追蹤表中的雜湊值使用哪些封包特徵,請參閱「連線追蹤模式」一節中的表格。
3。管理連線追蹤資料表項目
負載平衡器會根據下列事件和規則管理連線追蹤資料表項目:
- 移除閒置項目:連線閒置 60 秒後,系統會移除連線追蹤資料表項目。詳情請參閱「閒置逾時」。
已關閉的 TCP 連線:以
FIN或RST封包關閉 TCP 連線時,系統「不會」移除 TCP 連線的連線追蹤資料表項目。系統可能會在稍後移除閒置項目。每個新的 TCP 連線一律會攜帶SYN旗標,並接受「檢查連線追蹤資料表項目」步驟所述的處理方式。容錯移轉時排除連線:如果已設定至少一個容錯移轉後端,且停用容錯移轉時排除連線的設定,當符合資格的後端組合在主要後端和容錯移轉後端之間切換時,負載平衡器會移除連線追蹤表中的所有項目。詳情請參閱「容錯移轉時排除連線」。
持續連線至健康狀態不良的後端:如果後端健康狀態不良,連線追蹤表中的項目可能會遭到移除。這項行為取決於「持續連線至健康狀態不良的後端」一節所述的因素。
如果先前選取的後端從健康狀態變為不健康,導致連線追蹤資料表項目遭到移除,系統會將該連線的後續封包視為屬於新連線。為後續封包選取新的適用後端後,負載平衡器會建立替代連線追蹤資料表項目。
取代的連線追蹤資料表項目與任何其他連線追蹤資料表項目完全相同,且須遵守這個步驟的事件和規則。
如果先前選取的後端從健康狀態不良恢復為健康狀態,單是健康狀態檢查的變更不會導致系統移除替代連線追蹤資料表項目。如果設定至少一個容錯移轉後端,且停用容錯移轉的連線排空設定,就會發生例外狀況;如果先前選取後端的健康狀態檢查狀態發生變化,且符合資格的後端組合在主要和容錯移轉後端之間切換,系統就會移除連線追蹤資料表項目。
移除、停止或刪除後端的連線排除:如果啟用移除、停止或刪除後端的連線排除功能,系統會在可設定的連線排除逾時時間過後,移除連線追蹤資料表項目。收到移除、停止或刪除後端的指令後,系統就會開始計算逾時時間。如果已移除、停止或刪除後端的連線排除功能已停用,系統會在收到移除、停止或刪除後端的指令時,移除連線追蹤資料表項目。詳情請參閱「啟用連線排空」。
工作階段相依性
外部直通式網路負載平衡器的工作階段相依性設定,會定義後端選取的封包雜湊,並根據連線追蹤模式,定義連線追蹤的封包雜湊。
您是在後端服務上設定工作階段相依性,而不是在每個後端執行個體群組或 NEG 上設定。工作階段相依性會決定用來計算封包特徵雜湊的 IP 和第 4 層標頭。封包特徵的雜湊值會用於後端選取步驟。
外部直通式網路負載平衡器支援下列工作階段相依性設定。
| 後端選取作業的雜湊方法 | 工作階段相依性設定 |
|---|---|
|
5 個元組構成的雜湊碼 (包含來源 IP 位址、來源通訊埠、通訊協定、目的地 IP 位址和目的地通訊埠),適用於包含通訊埠資訊的非片段封包 (TCP 封包和非片段 UDP 封包) 或3 個元組雜湊 (包含來源 IP 位址、目的地 IP 位址和通訊協定),適用於 UDP 封包片段和所有其他通訊協定的封包 |
NONE1
或 CLIENT_IP_PORT_PROTO
|
| 3 元組雜湊 (包含來源 IP 位址、目的地 IP 位址和通訊協定) |
CLIENT_IP_PROTO |
| 2 元組雜湊 (包含來源 IP 位址和目的地 IP 位址) |
CLIENT_IP |
1 NONE 工作階段相依性不代表沒有工作階段相依性。而是指工作階段相依性是透過封包特徵的 5 元組雜湊或 3 元組雜湊完成,功能上與設定 CLIENT_IP_PORT_PROTO 時的行為相同。
連線追蹤政策
本節說明負載平衡器連線追蹤政策中的設定:
連線追蹤模式
本節說明負載平衡器在連線追蹤資料表中建立項目的時機和方式。外部直通式網路負載平衡器支援根據通訊協定和工作階段親和性追蹤連線:無論選擇哪種工作階段相依性選項,TCP 連線一律可追蹤連線。
對於除了
NONE以外的所有工作階段相依性選項,UDP、ESP 和 GRE 連線都是可追蹤的連線。其他通訊協定 (例如 ICMP 和 ICMPv6) 無法追蹤連線。
如果可以追蹤連線,連線追蹤模式、通訊協定和工作階段相依性會決定用於在每個連線追蹤資料表項目中建立封包雜湊的封包特徵集。
連線追蹤模式可以是下列其中一種:
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 |
|
|
|
如要瞭解如何變更連線追蹤模式,請參閱「設定連線追蹤政策」。
持續連線至健康狀態不良的後端
持續連線至健康狀態不良的後端可控制現有連線是否會持續連線至先前選取的後端 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) 封包,或未回應封包,用戶端可能會使用新連線重試,讓負載平衡器選取其他符合資格的後端。(在「識別符合資格的後端」
SYN步驟中,TCP 封包會視為新連線。)
閒置逾時
負載平衡器處理與項目相符的最後一個封包後,連線追蹤表中的項目會在 60 秒後過期。這個閒置逾時值無法修改。移除、停止或刪除後端的連線排除
當發生下列情況時,連線排除功能會提供可設定的最短時間,讓現有連線保留在負載平衡器的連線追蹤表中:
- 從後端執行個體群組中移除虛擬機器 (VM) 執行個體 (包括捨棄後端代管執行個體群組中的執行個體)
- VM 停止或遭到刪除 (包括自動動作,例如進行輪替更新或縮減後端代管執行個體群組)
- 從後端網路端點群組 (NEG) 移除端點
根據預設,後端移除、停止或刪除時的連線排除功能會停用。詳情請參閱「啟用連線排空」。
加權負載平衡
加權負載平衡會影響後端選取步驟中符合資格的後端。每個後端 VM 或端點都會使用 HTTP 健康狀態檢查和自訂回應標頭,向負載平衡器回報權重。如要使用加權負載平衡,請在負載平衡器的後端服務中設定下列項目:
- 地區政策 (
localityLbPolicy) 必須設為WEIGHTED_MAGLEV。 健康狀態檢查必須是 HTTP 健康狀態檢查,且會傳送特殊的回應標頭:
- 回應標頭的欄位名稱必須是
X-Load-Balancing-Endpoint-Weight。 - 回應標頭的欄位值可以介於
0至1000(含) 之間。
- 回應標頭的欄位名稱必須是
詳情請參閱「設定加權負載平衡」。
加權負載平衡的注意事項
加權負載平衡適用於下列情況,可讓後端繼續處理現有連線:
加權負載平衡可讓處理長時間連線或涉及大量資料的後端,告知負載平衡器減少接收的新連線數量。
加權負載平衡功能可讓過載或進入維護狀態的後端,從符合新連線資格的後端中移除自身。為此,過度負載的後端會傳送
X-Load-Balancing-Endpoint-Weight: 0回應標頭 (並可繼續通過或無法通過負載平衡器健康狀態檢查)。這是因為在「找出符合資格的後端」步驟中,所有權重不為零的後端 (無論健康狀態檢查狀態為何) 都是較佳的合格後端。
使用負載平衡時,請注意下列事項:
如果符合資格的後端經常變更權重,加權負載平衡可能會損害工作階段相依性。詳情請參閱「選取符合資格的後端」步驟。
如果您使用相同的執行個體群組或 NEG 做為兩個以上負載平衡器後端服務的後端,可以採用下列策略,為每個後端服務回報專屬權重:
請為每個後端服務使用不重複的 HTTP 健康狀態檢查。每項健康狀態檢查都可以使用專屬目的地通訊埠或
request-path參數。設定後端執行個體或端點,以便在每次健康狀態檢查時,回應適當的權重資訊。
容錯移轉
您可以將每個後端執行個體群組或 NEG 分類為主要或容錯移轉,藉此影響新連線的合格後端集。
預設情況下,將執行個體群組或 NEG 新增至後端服務時,成員 VM 或端點會成為主要後端,而執行個體群組或 NEG 則會成為主要後端群組。透過容錯移轉,您可以新增容錯移轉後端群組 (執行個體群組或 NEG),其成員 VM 或端點為容錯移轉後端:
- 如要進行容錯移轉,後端服務必須至少有一個主要後端群組和至少一個容錯移轉後端群組。
- 您最多可將 50 個主要後端群組和 50 個容錯移轉後端群組新增至後端服務。
發生容錯移轉時,下列因素會決定符合資格的後端集:
- 每個後端的健康狀態
- 您設定的容錯移轉率
- 「如果後端健康狀態不良,則捨棄流量」設定
- 您是單獨使用容錯移轉,還是搭配加權負載平衡使用
容錯移轉政策
當後端服務至少有一個主要後端群組和至少一個容錯移轉後端群組時,您可以在其容錯移轉政策中調整下列設定:
- 容錯移轉率:介於
0.0和1.0之間的數字 (含)。 - 如果後端健康狀態不良,則捨棄流量:布林值,用於決定負載平衡器的最後手段。容錯移轉比率和「如果後端健康狀態不良,則捨棄流量」設定會與其他因素搭配運作,共同控管符合資格的後端組合。
- 容錯移轉時排除連線:布林值,可控制當符合資格的後端組合在主要和容錯移轉後端之間切換時,連線是否會保留在先前選取的後端上。
容錯移轉率
設定的容錯移轉比率會決定符合資格的後端集何時要在主要和容錯移轉後端之間切換。比例可以是介於 0.0 至 1.0 之間的數字 (含上下限)。如果您未指定容錯移轉比例, Google Cloud 會使用預設值 0.0。最佳做法是將容錯移轉比例設為適合用途的數字,而非依據這個預設值。
容錯移轉時排除連線
容錯移轉時排除連線:控制當一組符合資格的後端在主要和容錯移轉後端之間切換時,現有連線是否會保留在先前選取的後端 VM 或端點上。
系統預設會啟用「容錯移轉時排除連線」功能。下表根據容錯移轉時排除連線的選項和通訊協定,大致列出連線是否會持續:
| 容錯移轉時排除連線選項 | 當符合資格的後端集在主要後端和容錯移轉後端之間切換時的行為 |
|---|---|
| 已啟用 (預設) |
|
| 已停用 | 所有通訊協定:當符合資格的後端組合在主要和容錯移轉後端之間切換時,連線不會持續存在 |
在容錯移轉和容錯回復期間停用連線排除,對下列情況非常有用:
修補後端 VM。修補之前,您可以將健康狀態良好的主要後端設為無法通過健康狀態檢查,或將其權重設為零。這樣一來,符合資格的後端就能成為權重不為零的健康狀態良好容錯移轉後端。在容錯移轉和容錯回復期間停用連線排除後,負載平衡器會移除連線追蹤資料表項目,對後續封包套用後端選取步驟,並將封包傳送至其他符合資格的後端。接著,不同的後端會透過 TCP 重設關閉連線,讓用戶端 VM 快速建立與負載平衡器的新連線。
單一後端虛擬機器以確保資料一致性。如果需要確保符合資格的後端集只有一個成員 VM 或端點,請在容錯移轉和容錯回復時停用連線排除,以減少資料不一致的可能性。
如要瞭解如何停用容錯移轉和容錯回復時的連線排除功能,請參閱「停用容錯移轉和容錯回復時的連線排除功能」。
最佳做法和指引
您可以按照下列作業準則,最佳化外部直通網路負載平衡器。下列各節說明管理 UDP 封包片段的技術規定,以及測試單一用戶端負載分配的最佳做法。
處理 UDP 分段
後端服務型外部直通式網路負載平衡器可以處理分段和未分段的 UDP 封包。如果應用程式使用分段的 UDP 封包,請注意下列事項:
- UDP 封包在到達 Google CloudVPC 網路前可能會先分段。
- Google Cloud 虛擬私有雲網路會在 UDP 片段送達時轉送,不會等待所有片段送達。
- 非Google Cloud 網路和地端網路設備可能會在 UDP 片段送達時轉送、延遲分段 UDP 封包,直到所有片段都送達,或捨棄分段 UDP 封包。詳情請參閱網路供應商或網路設備的說明文件。
如果您想要分段的 UDP 封包,並需要將這些封包路由至相同的後端,請使用下列轉送規則和後端服務設定參數:
轉送規則設定:每個負載平衡的 IP 位址僅使用一個
UDP或L3_DEFAULT轉送規則,並將轉送規則設定為接受所有通訊埠的流量。這可確保所有片段都達成相同的轉送規則。即使分段封包 (第一個片段除外) 沒有目的地連接埠,將轉送規則設為處理所有連接埠的流量,也會將規則設為接收沒有連接埠資訊的 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 內於本機路由。
後續步驟
- 如要設定具有後端服務的外部直通式網路負載平衡器,僅處理 TCP 或 UDP 流量 (支援 IPv4 和 IPv6 流量),請參閱「設定具有後端服務的外部直通式網路負載平衡器」。
- 如要設定支援多個 IP 通訊協定 (支援 IPv4 和 IPv6 流量) 的外部直通式網路負載平衡器,請參閱「設定支援多個 IP 通訊協定的外部直通式網路負載平衡器」。
- 如要設定具有可用區 NEG 後端的外部直通式網路負載平衡器,請參閱「使用可用區 NEG 設定外部直通式網路負載平衡器」。
- 如要瞭解如何將外部直通式網路負載平衡器從目標集區後端轉換為區域性後端服務,請參閱「將外部直通式網路負載平衡器從目標集區轉換為後端服務」。