2013-08-21 52 views
2

我试图将Apache设置为具有会话关联的2个Tomcat实例的负载平衡器。配置Apache和Tomcat以实现负载平衡

目标是让会话保持在一台服务器上,但要有下一个会话(当它由后端服务器更改时)转到下一个可用服务器(比方说使用循环算法更容易实现)。在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 

而且这里听的情景:

  1. 第一请求没有cookie,所以Apache选择负载均衡器中的下一个可用服务器来处理请求。
  2. 后端Tomcat服务器设置JSESSIONID,但不记下返回的实际值。
  3. 下一个请求时,阿帕奇指出,有对给定JSESSIONID注意到没有后端服务器,因此它选择下一个可用的,在这种情况下,另一种为提供服务的第一个请求
  4. 的Tomcat注意到JSESSIONID的值是无效的,所以它创建一个新的。
  5. Apache不记下JSESSIONID已更改为将其固定到该后端服务器。
  6. 返回页首3

有没有办法说服Apache注意Tomcat返回的值?

回答