
I have a web app that is going to run on multiple servers. I'd like to make sure, that requests using the same session (HTTP cookie header with value JSESSIONID=x) always communicate with the same server. That is, until the session "moves" to a different server in certain circumstances (not only when the server fails, but also due to some server side caching and performance strategies).
My web app works well with that scenario, but what kind of load balancer should I use? Obviously, I could load balance on application level, but I'm looking for something more efficient. Maybe specialized hardware (maybe not)? I can't spend a lot of money...
Update
Thanks for your answers so far: I found out now, that Pound and HAProxy can be configured to look for certain cookies. I couldn't find out yet, if they also allow to update the mapping dynamically (when the session "moves" to a different app server)?
また、それを実行できる (安価な) ハードウェア ソリューションはありますか? (追加の負荷分散サーバーよりもコストが安くなりますか?)
答え1
「スティッキー(永続的)セッション」は、一般的には推奨されません。これを行うと、負荷分散のメリットの多くが失われます。負荷は分散されず、障害が発生した場合に特定のクライアントがアプリケーションにアクセスできなくなるため、高可用性が失われます。
セッションを動的にしたい場合、Java ではセッションは通常メモリに保存され、マルチキャスト経由ですべてのサーバーにクラスター化されます。より一般的には、セッションはデータベースに保存されます。
Web アプリケーションでスティッキー セッションが必要な場合は、アーキテクチャの改善が必要になる可能性があります。
ロードバランサーソリューションに関しては、多くのものがあり、このテーマについてはここで詳しく取り上げられています。LVS の. 他にもnginx。 ファウンドリネットワークBrocade に買収された は、堅実な商用製品をいくつか製造しています。これらは、ハードウェア ロード バランサーの主要な商用ソリューションです。 バラクーダまた、負荷分散に使用できる Linux/OSS ベースの「アプライアンス」もあります。
答え2
それで、解決策がいくつかあります。
セッション情報を格納するためにデータベースを使用するセッション ストレージ メソッドを作成し、複数のサーバー上にある場合は、データベースをクラスター化できます。これは、物事をどのように整理するかによって異なりますが、他のアイデアとしては、Web サーバーの背後で memcache をオンにしたサーバーを使用して、そこにセッションを格納するというものがあります。
こうすることで、セッションが 1 か所に集約され、クライアントがどの Web サーバーに誘導されるかは問題ではなくなります。
答え3
答え4
POUND - リバースプロキシとロードバランサー
Pound プログラムは、Web サーバー用のリバース プロキシ、ロード バランサー、および HTTPS フロントエンドです。Pound は、複数の Web サーバー間で負荷を分散できるようにし、ネイティブで SSL ラッパーを提供していない Web サーバーに便利な SSL ラッパーを提供するために開発されました。Pound は GPL に基づいて配布されます。保証はなく、使用、コピー、配布は自由です。
あなたが探しているのはこれかもしれません