負荷分散側または tomcat のいずれかで構成が不足していると思います。誰かが解決策を助けて提供してくれれば幸いです。
私は何をしようとしていますか?
- このガイドを参照して、tomcat6 の P2P Hazelcast セッション レプリケーションを使用して 2 つの tomcat インスタンスをセットアップします。
- hazelcast-all-.jar、hazelcast-tomcat-sessionmanager-.jar、および hazelcast.xml をフォルダー $CATALINA_HOME/lib/ に配置しました。
- 以下に示すように、リスナーとコンテキスト構成を更新しました
- 以下に示すように、Tomcat フェイルオーバーと jvmRoute パラメータを更新しました。
- これまでのところ、お互いの hazelcast インスタンスに接続する tomcat インスタンスを立ち上げることができました。Tomcat ログで確認できます。
- ユーザーはロード バランサーに接続し、バランサー メンバーにルーティングされます。ここでは問題ありません。
- しかし、Tomcat インスタンスの 1 つを停止してフェールオーバーをテストし、Tom インスタンスに接続していたユーザーが同じセッションで再度サインインすることなく cat インスタンスを継続できることを確認しました。しかし、ロードバランサーが新しいセッションを作成しているようで、ユーザーが再度サインインして cat インスタンスとのセッションを確立する必要があると思います。私はそれを疑っていますが、確かではありません。
- それとも、両方の hazelcast インスタンスでセッションが複製および同期されていませんか? - これは事件です
- hazelcast セッションを監視できるクライアントはありますか? - 今私がやります
JSESSIONID の代わりに hazelcast.sessionId を設定することを参照するこの問題を参照しましたが、その方法に関する詳細は提供されていません。
バージョン -
Apache Haus - 2.2.32 (for load balancing)
Hazelcast - 3.8.6
Java 8
Tomcat - 6.0.48
Session objects that need to be clustered are Serializable.
stickysession=JSESSIONID
ロード バランサーの構成
<Proxy balancer://mycluster>
BalancerMember http://IPAddress1:8080/app/ route=tom
BalancerMember http://IPAddress2:8080/app/ route=cat
ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid
</Proxy>
ProxyPass /app/ balancer://mycluster/
ProxyPassReverse /app/ balancer://mycluster/
トムインスタンス - server.xml
<Listener className="com.hazelcast.session.P2PLifecycleListener"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tom">
トムインスタンス - context.xml
<Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>
猫インスタンス - server.xml
<Listener className="com.hazelcast.session.P2PLifecycleListener"/>
<Engine name="Catalina" defaultHost="localhost" jvmRoute="cat">
猫インスタンス - context.xml
<Manager className="com.hazelcast.session.HazelcastSessionManager" sticky=true/>
アップデート: