NLBクラスター内の複数のノードでIIS7が実行されています。 NLBノードはAffinity:Noneに設定されているため、新しい接続がノード全体に分散されます。パフォーマンスを向上させるためにKeepAliveをオンにする必要がありますが、クラスター内のノードの1つがなくなると、すべてのトラフィックが他のノードに移動しますが、元に戻ることはありません。 Webサービスを実行していますが、CPUを集中的に使用するタスクを実行するクライアントはわずかしかないため、一方のサーバーが破壊され、もう一方のサーバーは何もせずに停止することがわかりました。
特定の接続での要求の数を制限するApacheのMaxKeepAliveRequestsのようなものが必要です。これにより、IISは定期的にクライアントに再接続を強制し、クラスターのバランスを取ります。
これはIIS7がサポートするものですか?これは「普通の」人々がすることですか?
適切な解決策が見つからなかったので、自分で書きました。 IISおよびNLB)で構成設定を文書化しました。この記事では、MaxKeepAliveRequests設定を実装して、クライアントが同じノードに接着されたままにならないようにするために必要なHTTPモジュールコードを提供します。 NLBクラスター。
IISおよびMaxKeepAliveRequestsを使用したNLB間の接続バランシング
本当にステートレスなセッションの場合は、IIS7で次の方法でKeepAliveを完全に無効にできます。
appcmd set config /section:httpProtocol /allowKeepAlive:false
ほとんどの作業が少数のクライアントによってのみ行われる場合、これによって大幅なオーバーヘッドが追加されることはありません。ただし、必ず最初にテストしてください。