0

我使用 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 反之亦然?

4

1 回答 1

1

当可能使用多个节点时,使用“粘性会话”只是一种确保同一会话的所有请求都转到同一节点的机制。如果你想要会话故障转移,你需要Clustering

有很多关于如何使用 Tomcat 进行集群的指南。在Tomcat 的 Presentations Page上也有一些关于集群如何工作以及如何配置的背景介绍。

请注意,您可能必须对应用程序进行一些更改才能使集群正常工作。

于 2017-05-24T15:43:41.177 回答