Tomcat 6群集 - 经过身份验证的会话复制

时间:2011-04-01 00:14:22

标签: jsf tomcat cluster-computing mod-proxy session-replication

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

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

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

我运行了以下测试:

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

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

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

1 个答案:

答案 0 :(得分:0)

您尚未在sticky_session模式下运行,并且可以使用worker.loadbalancer.sticky_session = 1

启用它

并检查:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html