Load Balancer TCP 重設和閒置逾時

您可以使用 Standard Load Balancer,藉由對某個指定規則啟用「閒置時重設 TCP」,來為您的案例建立更容易預測的應用程式行為。 Load Balancer 的預設行為是在達到流程的閒置逾時時,以無訊息模式卸除流程。 啟用 TCP 重設會導致 Load Balancer 在閒置逾時時傳送雙向 TCP 重設 (TCP 重設封包),以通知應用程式端點連線逾時且不再可用。 如有需要,端點可以立即建立新的連線。

圖表:顯示網路節點的預設 TCP 重設行為。

TCP 重設

您變更此預設行為,以及對輸入 NAT 規則、負載平衡規則和輸出規則啟用傳送閒置逾時 TCP 重設。 根據規則啟用時,Load Balancer 會在達到所有相符流程的閒置逾時時,將雙向 TCP 重設 (TCP RST 封包) 傳送至用戶端和伺服器端點。

收到 TCP RST 封包的端點會立即關閉對應的通訊端。 這會立即通知端點的連線版本,而且相同 TCP 連線上的任何未來通訊都會失敗。 如果通訊端視需要關閉並重新建立連線,而不需要等到 TCP 連線最後逾時,則應用程式可以清除連線。

在許多情況下,TCP 重設可能不需要傳送 TCP (或應用程式層) keepalive,即可重新整理流程的閒置逾時。

在 TCP 重設與保持連線之間進行選擇

請依照以下標準決定您的情境需要哪種機制:

  • 當你希望端點能立即通知閒置流關閉時,啟用 TCP 重置,讓應用程式能清理並重新建立連線,而不必等待自己的 TCP 逾時。
  • 當閒置時間超出可設定的閒置逾時範圍,或應用程式在啟用 TCP 重設時出現非預期行為時,請使用 TCP keepalive。 Keepalive 不建議用於行動應用程式,因為它們會更快耗電。
  • 當連線路徑中的某處有代理時,請使用應用層 keepalive,因為代理可能會終止由傳輸層 keepalive 維持的 TCP 連線。

透過仔細檢視整體端對端情境,您可以評估啟用 TCP 重設及調整閒置逾時時間的效益。 接著決定是否需要更多步驟以確保所需的應用行為。

可設定的 TCP 閒置逾時

Azure Load Balancer Standard 針對 Load Balancer 規則和輸入 NAT 規則的逾時範圍為 4 到 100 分鐘。 外撥規則 可設定為 4 到 120 分鐘。 預設時間是所有規則類型 4 分鐘。 如果閒置期間超過逾時值,即無法保證仍能維持用戶端與雲端服務之間的 TCP 或 HTTP 工作階段。 Azure Load Balancer Basic(已淘汰)的逾時範圍最長可達 60 分鐘。

當連線關閉時,用戶端應用程式可能會收到以下錯誤訊息:「基礎連線已關閉: 應該保持運作的連接卻被伺服器關閉。」

如果已啟用 TCP 重設,且因為任何原因而遺漏,則會針對任何後續封包重設。 如果未啟用 TCP 重設選項,則會以無訊息方式卸除封包。

常見作法是使用 TCP Keep-Alive。 此作法可讓連線保持長時間連線。 如需詳細資訊,請參閱這些 .NET 文章。 啟用 Keep-Alive 之後,就會在連線無活動期間傳送封包。 這些 Keep-Alive 封包可確保不會達到閒置逾時值,因此可以長期維持連線。

本節所述的 TCP 保活僅適用於傳入連線。 TCP 重設與可設定閒置逾時,在輸出規則上分別受到支援。 若要避免連線中斷,請使用比閒置逾時設定短的間隔來設定 TCP Keep-Alive,或增加閒置逾時值。 為了支援這些情節,可以使用可設定閒置逾時的支援。

TCP Keep-Alive 適用於電池使用時間不受約束的情節。 不建議用於行動應用程式。 在行動裝置應用程式中使用 TCP Keep-Alive 可能會更快耗盡裝置電池電力。

優先順序

請務必考慮針對不同 IP 設定的閑置逾時值可能會如何互動。

輸入

  • 如果 (輸入) 負載平衡器規則設定的閑置逾時值與所參考前端 IP 的閑置逾時不同,則負載平衡器前端 IP 閑置逾時優先。
  • 如果輸入 NAT 規則設定的閒置逾時值與所參考前端 IP 的閒置逾時不同,則負載平衡器前端 IP 閑置逾時優先。

輸出

  • 如果輸出規則的閑置逾時值與 4 分鐘不同 (也就是公用 IP 輸出閒置逾時被鎖定的值),則輸出規則閒置逾時優先。
  • 由於 NAT 閘道一律優先於負載平衡器輸出規則 (以及直接指派給 VM 的公用 IP 位址),因此會使用指派給 NAT 閘道的閒置逾時值。 (同樣地,不會考慮任何指派給 NAT GW 之 IP 的鎖定公用 IP 輸出閒置逾時 4 分鐘。)

限制

以下限制適用於 Azure Load Balancer 的 TCP 重置與閒置逾時:

  • TCP 重置只會在 TCP 連線中以 ESTABLISHED 狀態發送。
  • UDP 負載平衡規則不支援閒置逾時。
  • 當網路虛擬設備(NVA)位於路徑中時,內部負載平衡器的高可用性(HA)連接埠規則不支援 TCP 重設。 因應措施是透過網路虛擬設備,啟用具 TCP 重設功能的輸出規則。
  • 當使用者定義路由(UDR)將流量轉發到內部負載平衡器時,內部負載平衡器的 HA 埠規則不支援 TCP 閒置逾時。

後續步驟