負載平衡器 TCP 重設和閒置逾時
您可以使用 Standard Load Balancer,藉由對某個指定規則啟用「閒置時重設 TCP」,來為您的案例建立更容易預測的應用程式行為。 Load Balancer 的預設行為是在達到流程的閒置逾時時,以無訊息模式卸除流程。 啟用 TCP 重設會導致 Load Balancer 在閒置逾時時傳送雙向 TCP 重設 (TCP 重設封包),以通知應用程式端點連線逾時且不再可用。 如有需要,端點可以立即建立新的連線。
TCP 重設
您變更此預設行為,以及對輸入 NAT 規則、負載平衡規則和輸出規則啟用傳送閒置逾時 TCP 重設。 根據規則啟用時,Load Balancer 會在達到所有相符流程的閒置逾時時,將雙向 TCP 重設 (TCP RST 封包) 傳送至用戶端和伺服器端點。
收到 TCP REST 封包的端點會立即關閉對應的通訊端。 這會立即通知端點的連線版本,而且相同 TCP 連線上的任何未來通訊都會失敗。 如果通訊端視需要關閉並重新建立連線,而不需要等到 TCP 連線最後逾時,則應用程式可以清除連線。
在許多情節下,TCP 重設可以減少傳送 TCP (或應用程式層) Keepalive 以重新整理流程的閒置逾時。
如果閒置持續時間超過設定限制,或您的應用程式顯示已啟用 TCP 重設的非預期行為,您可能仍然需要使用 TCP Keepalive 或應用程式層Keepalive 來監視 TCP 連線的作用性。 此外,Keepalive 仍然適用於在路徑的某處 Proxy 處理連線時,特別是應用程式層 Keepalive。
藉由仔細檢查整個端對端案例,您可以判斷啟用 TCP 重設和調整閒置逾時的優點。 然後,您會決定是否需要更多步驟,以確保所需的應用程式行為。
可設定的 TCP 閒置逾時
Azure Load Balancer Standard 針對負載平衡器規則、輸出規則和輸入 NAT 規則,有 4 分鐘到 100 分鐘的逾時範圍。 預設值是 4 分鐘。 如果閒置期間超過逾時值,即無法保證仍能維持用戶端與雲端服務之間的 TCP 或 HTTP 工作階段。 Azure Load Balancer Basic 最多有 30 分鐘的逾時範圍。
當連線關閉時,用戶端應用程式可能會收到以下錯誤訊息:「基礎連線已關閉: 應該保持運作的連接卻被伺服器關閉。」
如果已啟用 TCP 重設,且因為任何原因而遺漏,則會針對任何後續封包重設。 如果未啟用 TCP 重設選項,則會以無訊息方式卸除封包。
常見作法是使用 TCP Keep-Alive。 此作法可讓連線保持長時間連線。 如需詳細資訊,請參閱這些 .NET 文章。 啟用 Keep-Alive 之後,就會在連線無活動期間傳送封包。 這些 Keep-Alive 封包可確保不會達到閒置逾時值,因此可以長期維持連線。
此設定僅適用於輸入連線。 若要避免連線中斷,請使用比閒置逾時設定短的間隔來設定 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 分鐘。)
限制
- TCP 重設只會在 TCP 連接處於已建立狀態時傳送。
- TCP 閒置逾時不會影響 UDP 通訊協定上的負載平衡規則。
- 當網路虛擬設備在路徑中時,不支援內部負載平衡器 HA 連接埠的 TCP 重設。 因應措施是使用輸出規則搭配從網路虛擬設備的 TCP 重設。
下一步
- 深入了解 Standard Load Balancer。
- 深入了解輸出規則。
- 設定閒置逾時的 TCP RST