複数のサーバーで実行するWebアプリがあります。同じセッション(値がJSESSIONID = xのHTTP cookieヘッダー)を使用するリクエストが常に同じサーバーと通信することを確認します。つまり、セッションが特定の状況で別のサーバーに「移動」するまで(サーバーに障害が発生したときだけでなく、サーバー側のキャッシュとパフォーマンス戦略のため)です。
私のWebアプリはそのシナリオでうまく動作しますが、どのようなロードバランサーを使用する必要がありますか?もちろん、アプリケーションレベルで負荷分散を行うこともできますが、もっと効率的なものを探しています。多分特殊なハードウェア(多分そうでないかもしれません)?お金があまり使えない...
更新
これまでの回答に感謝します。私は今 Pound および HAProxy が特定のCookieを探すように構成できることを知りました。 (セッションが別のアプリサーバーに「移動する」ときに)マッピングを動的に更新することも許可されている場合、まだ確認できませんでしたか?
また、それを実行できる(安価な)ハードウェアソリューションはありますか? (追加の負荷分散サーバーよりもコストがかかりませんか?)
HAProxyの作者であるWilly Tarreauによる記事 アプリケーションをロードバランシングでスケーラブルにする を読んだだけで、必要なすべての回答が含まれています。
これが私が学んだことの私の個人的な要約です:
記事は2006年のものですが、変更されている可能性があります。
" sticky(persistent)sessions "を使用することは通常お勧めしません。これを行うと、ロードバランシングの多くの利点が失われます。障害が発生すると、特定のクライアントがアプリケーションにアクセスできなくなるため、負荷が分散されず、高可用性が失われます。
セッションを動的にする必要があります。 Javaでは通常、メモリに格納され、マルチキャストを介してすべてのサーバーにクラスター化されます。より一般的には、セッションはデータベースに保存されます。
Webアプリケーションでスティッキーセッションが必要な場合は、アーキテクチャの改善が必要になる場合があります。
ロードバランサーソリューションに関する限り、多くのものがあり、ここでは主題について広範囲にカバーしています。 [〜#〜] lvs [〜#〜] が好きです。その他 nginx のようなもの。 Foundry Networks は、Brocadeが買収したもので、確かな商用製品を生み出しています。これらは、ハードウェアロードバランサーの主要な商用ソリューションです。 Barracuda には、負荷分散に使用できるLinux/OSSベースの「アプライアンス」もあります。
次に、いくつかの解決策を示します。
データベースを使用してセッション情報を格納するセッションストレージメソッドを記述します。複数のサーバー上にある場合は、dbをクラスター化できます。それは本当にあなたが物事を整理することに決めている方法に依存し、他のアイデアは、ウェブサーバーの背後にあるmemcacheでサーバーを使用し、そこにセッションを保存することです。
これにより、セッションが1か所にあり、クライアントがどのWebサーバーに転送されるかは問題になりません。
POUND-REVERSE-PROXY AND LOAD-BALANCER
Poundプログラムは、Webサーバーのリバースプロキシ、ロードバランサー、およびHTTPSフロントエンドです。 Poundは、複数のWebサーバー間で負荷を分散できるようにするため、およびネイティブで提供しないWebサーバー用の便利なSSLラッパーを可能にするために開発されました。ポンドはGPLに基づいて配布されます。保証はありません。無料で使用、複製、譲渡できます。
これはあなたが探しているかもしれません