web-dev-qa-db-ja.com

Azureがアイドル状態のネットワーク接続を閉じる

シングルインスタンスのWindowsサーバー2k8R2 Azure VMで専用のクライアント/サーバーアプリケーションを実行しています。

クライアントはサーバーとの接続に大きく依存しています。ただし、何も操作せずに数分を費やすと、Azure側の何かが強制的に接続を閉じます(ログからわかる限り)。これがAzure自体またはWindowsの機能であるかどうかはわかりません。

ある種のキープアライブ機能(ソフトウェアが独占的であるため私が実行できない)を実装する以外に、とにかくこのタイムアウトを延長できますか?

負荷分散された状況でのアイドルタイムアウトの変更に関するいくつかの参照を確認しましたが、これは単なる1つのインスタンスです。

前もって感謝します!

6
NoCarrier

VMの前にあるソフトウェアロードバランサーの設計機能を使用しています。デフォルトでは、4分後にアイドル接続をすべて閉じますが、タイムアウトを4〜30分の間の任意の値に構成できます。

Azureロードバランサーの構成可能なアイドルタイムアウト

ただし、何らかのキープアライブを用意することは、インフラストラクチャ側とアプリケーション側の両方で行うことをお勧めします。将来的には頭痛の種よりもあなたを救うでしょう。

編集して、Azureがサポートするようになりました アイドル接続でのTCPリセット

8
Pedro Perez

Azure VMのTCP設定

Azure VMは、NAT(ネットワークアドレス変換)を使用してパブリックインターネットと通信します。NATデバイスは、Azure VMにパブリックIPアドレスとポートを割り当て、 VM他のデバイスと通信するためのソケットを確立します。特定の時間後にパケットがそのソケットを介してフローを停止した場合、NATデバイスはマッピングを強制終了し、ソケットは他のVMで自由に使用できます。

これは一般的なNAT動作であり、タイムアウト期間を超えてソケットが維持されることを期待するTCPベースのアプリケーションで通信の問題を引き起こす可能性があります。確立された接続状態のセッションに対して考慮すべき2つのアイドルタイムアウト設定:

azureロードバランサーを介して受信します。このタイムアウトのデフォルトは4分で、最大30分まで調整できます。 SNAT(ソースNAT)を使用したアウトバウンド。このタイムアウトは4分に設定されており、調整できません。タイムアウト制限を超えて接続が失われないようにするには、アプリケーションがセッションを存続させるか、基盤となるオペレーティングシステムを構成してそのようにするかを確認する必要があります。以下に示すように、使用する設定はLinuxシステムとWindowsシステムで異なります。

Linuxの場合、以下のカーネル変数を変更する必要があります。 net.ipv4.tcp_keepalive_time = 120 net.ipv4.tcp_keepalive_intvl = 30 net.ipv4.tcp_keepalive_probes = 8

Windowsの場合、以下のレジストリ値を変更する必要があります。 KeepAliveInterval = 30 KeepAliveTime = 120 TcpMaxDataRetransmissions = 8

上記の設定により、アイドル時間の2分(120秒)後にキープアライブパケットが送信され、その後30秒ごとに送信されます。そして、これらのパケットのうち8つが失敗すると、セッションはドロップされます。

ソース: https://github.com/wbuchwalter/Azure-content/blob/master/includes/guidance-tcp-session-timeout-include.md

4
Martin Rhodes