我正在尝试将 Apache 设置为具有 session 关联性的 2 个 Tomcat 实例的负载均衡器。
目标是让 session 坚持一台服务器,但让下一个 session (当后端服务器更改时)转到下一个可用服务器(假设使用循环算法以更容易实现)。当在 Tomcat 中使用“jvmRoute”和 Apache 中的等效“路由”时,执行路由的实际值是不会更改的路由名称,并且所有请求始终路由到单个客户端的同一后端服务器。
到目前为止,我发现仅使用 JSESSIONID cookie 时存在先有鸡还是先有蛋的问题。让我们考虑以下设置:
2 个 Tomcat 服务器监听端口 8009 和 8010 (AJP13) 1 个 Apache 服务器,配置如下
<Proxy balancer://hello-cluster>
BalancerMember ajp://127.0.0.1:8009/hello
BalancerMember ajp://127.0.0.1:8010/hello
</Proxy>
ProxyPass /hello balancer://hello-cluster stickysession=JSESSIONID
场景如下:
- 第一个请求没有 Cookie,因此 Apache 会选择负载均衡器中的下一个可用服务器来处理该请求。
- 后端 Tomcat 服务器设置 JSESSIONID,但不记录返回的实际值。
- 下一个请求到来,Apache 注意到没有为给定的 JSESSIONID 记录后端服务器,因此它选择下一个可用的服务器,在本例中是另一个服务器为第一个请求提供服务
- Tomcat 注意到 JSESSIONID 的值无效,因此它创建了一个新值。
- Apache 不会注意到 JSESSIONID 已更改以将其固定到该后端服务器。
- 返回 pt。 3
有没有办法说服 Apache 记录 Tomcat 返回的值?
最佳答案
如果您尝试使用 tomcat session 复制,也许可以。我发现这个有趣的帖子:
。 您也可以尝试使用 redis:
请告诉我您的经历。
关于apache - Apache和Tomcat的负载均衡配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18347829/