我使用 apache 作为具有粘性会话处理的 LB(使用 2 个 tomcat 作为平衡器成员)。
下面是配置。由我在 apache 级别完成 -
<Proxy balancer://mycluster>
(...)
ProxySet stickysession=JSESSIONID
BalancerMember http://{ip/hostname of tomcat1 backed:port} route=tomcat1
BalancerMember http://{ip/hostname of tomcat2 backed:port} route=tomcat2
</Proxy>
ProxyPass / “balancer://mycluster”
PorxyPassReverse / “balancer://mycluster”
在 tomcat 级别定义 jvm 路由 -
(...)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> ##where the jvmroute should be the route value set at apache config.
(...)
同样为 tomcat 2 定义了
(...)
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2"> ##where the jvmroute should be the route value set at apache config.
(...)
一切正常,但此设置的主要缺点是如果 tomcat1 出现故障,则连接到 tomcat1 的会话也会终止并且不会路由到 tomcat2。
有没有办法将粘性会话也复制到 tomcat2,或者只是如果 tomcat1 死了,那么会话被转移到 tomcat2 反之亦然?