いくつかのサーバーに分散された複数のTomcatサーバーのセットアップがあり、すべて同じものを実行しています。 ApacheはApacheの上にあり、ロードバランサーはApacheサーバーの前にあります。共有セッションを使用してTomcatをクラスター化し、アプリのデプロイ中のダウンタイムとユーザーの中断を最小限に抑えたいと考えています。
クラスタリングが同じサーバー内で機能することは知っていますが、異なるマシン上のサーバー間でセッションを共有するようにTomcatをセットアップすることは可能ですか?
=> Server 1
==> Apache 1
===> Tomcat 1
=> Server 2
==> Apache 2
===> Tomcat 2
サーバー/ Tomcat 1が停止すると、ユーザーとそのセッションはサーバー/ Tomcat2に転送されます。その逆も同様です。
私は同じことを設定することに取り組んでいます、Apacheからの以下のリンクはこれを達成する方法の概要を示しています:
http://Tomcat.Apache.org/Tomcat-7.0-doc/cluster-howto.html
これには基本的に2つの部分があります:
1)セッションオブジェクトをシリアル化可能にする
2)Tomcat(server.xml)でクラスタリング構成をセットアップします。
使用するTomcatマネージャーによっては、ノード間の通信を有効にするために、ノードでマルチキャストを有効にする必要がある場合があります。セッションレプリケーションは、これらのマルチキャストpingを介してTomcatによって処理されます。このアプローチを使用している多くの人々を見て、それは彼らのために機能しました(それを行うための標準的/簡単な方法のようです)。
また、これについての詳細なブログ投稿もあります。5つの部分があり、いくつかのビデオがあります。
http://www.ramkitech.com/2012/10/Tomcat-clustering-series-simple-load.html
追伸:
2つのTomcatノードでの同じ問題に対して、同じアプローチを使用しています。私は以下に文書化されている小さな問題に直面しています。あなたが成功した/同様の問題に遭遇した場合は、これを見てください
Webセッション用のテラコッタ を見てください。
Terracottaの高速で信頼性の高いWebセッションプラグインを使用すると、データベースに過負荷をかけたり、アプリケーションを書き直したりすることなく、ステートレスWebアーキテクチャのスケーラビリティの利点を得ることができます。 Terracotta for Sessionsは、お気に入りのWebフレームワークと独自のカスタムセッションオブジェクトで動作します。
Webセッションチュートリアル は、製品を評価するために行う5つの簡単な手順を示しています(FOSS)。
セッションをデータベースに保存できるため、両方のtomcatからアクセスできます。または、tomcat間の共有ディレクトリに保存します。
セッションは memcached に保存できます。これは、両方のサーバー間で共有されます。これにより、データベース内の共有セッションやn台のサーバー間の共有ディレクトリを使用するよりも優れたパフォーマンスとスケーラビリティが得られます。