配置Apache和Tomcat以实现负载平衡

时间:2013-08-21 02:19:01

标签: apache tomcat load-balancing

我正在尝试将Apache设置为具有会话亲和性的2个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. 下一个请求进来,Apache注意到没有为给定的JSESSIONID注明后端服务器,因此它选择下一个可用的服务器,在这种情况下,另一个服务器作为第一个请求提供服务
  4. Tomcat注意到JSESSIONID的值无效,因此它会创建一个新值。
  5. Apache没有注意到JSESSIONID已更改为将其固定到该后端服务器。
  6. 回到pt。 3
  7. 有没有办法说服Apache注意Tomcat返回的值?

1 个答案:

答案 0 :(得分:2)

也许你尝试使用tomcat会话复制。我找到了这篇有趣的帖子:

。 您也可以尝试使用redis:

请告诉我你的经历。