2011-04-01 38 views
1

我目前有两个的Tomcat 6.0.32实例(Tomcat1Tomcat2)在同一个VPS运行组成一个非常基本的集群。我通过Apache使用mod_proxy_ajp和mod_proxy_balancer作为负载均衡器(在同一个VPS上)。 我们使用基本表单身份验证(通过j_security_check)为用户创建经过身份验证的会话。的Tomcat 6集群 - 验证会话复制

负载均衡器运行正常,未成功的会话正在两个实例之间成功复制。但是,我无法在每个实例之间进行身份验证会话替换。

我使用了一个名为session.jsp的非常基本的JSP(基于JPS模板http://www.syslog.gr/articles-mainmenu-99/15-tomcat-cluster-session-replication.html)来测试会话以查看它是否是新会话并打印出JSESSIONID。我在保护区域内有一个JSP副本,在保护区域外有一个副本。

我已经运行下面的测试:

测试1)
我访问session.jsp应用程序的保护区以外的Tomcat1,我记下了JSESSIONID,并与负载平衡器确认即Tomcat1处理了该请求。然后我关闭了Tomcat1并刷新页面。该请求现在由Tomcat2处理(由负载平衡器确认)。当页面完成加载时,我看到我的原始JSESSIONID和我的会话存活下来。

测试2)
我的一个应用的保护区域内访问session.jsp上Tomcat1。这会提示我登录。登录后,我将发送到session.jsp并记下我的JSESSIONID,并使用负载均衡器确认,比Tomcat1处理了请求。然后我关闭了Tomcat1并刷新页面。该请求现在由Tomcat2处理(由负载平衡器确认)。当页面加载时,我检查我的cookie。我现在有一个新的JSESSIONID,我再次提示登录。

到目前为止,我认为已认证的会话不会像未经身份验证的会话一样被复制。这是一个很好的理由还是它指向配置问题?

回答

0

你还没有上sticky_session模式下运行,并且可与worker.loadbalancer.sticky_session = 1

而且bettter检查启用:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

+0

这是我的理解是worker.loadbalancer是mod_jk的设置。由于我们使用mod_proxy,我不相信这是相关的。 粘性会话在mod_proxy中启用,并且正在运行问题是在Tomcat实例之间复制已验证的会话。 – Ross 2011-04-01 00:44:29