1

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

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

我正在使用一个非常基本的 JSP,称为 session.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,并且再次提示我登录。

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

4

1 回答 1

0

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

更好的检查:http: //tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html

于 2011-04-01T00:39:54.957 回答