没有负载均衡器的会话复制

session replication without loadbalancer

我正在尝试在两台不同机器的两台 tomcat 服务器(server1server2)之间设置 会话复制。 我正在使用 StaticMembershipInterceptorStaticMember 而不是 Multicast。我没有使用任何负载均衡器。 以下是我主要关注的网站。我提到了这个配置,因为这是我的确切要求。

http://khaidoan.wikidot.com/tomcat-cluster-session-replication-without-multicasting

我正在使用 Tomcat9.

经过上面的配置,我期待的是:

服务器 1:TomcatA
服务器 2:TomcatB

预期结果:

第一步: 我启动 Tomcat A. 加载网页。(http://server1:8080) 输入用户名和密码登录到应用程序并创建会话。

第二步: 我启动 Tomcat B. 加载网页。(http://server2:8080)。它应该自动tomcat登录到应用程序而无需输入用户名和密码。应该没有可用的登录页面。

以上配置后的实际结果:

在第二步中:登录页面可用。出现登录页面的原因是它创建了不同的会话。

当我在同一台机器的两个节点上测试相同的配置时,它工作正常。但是在不同的机器上,它不起作用。

到目前为止我尝试了什么:

我是否缺少任何其他配置?不知道为什么它不起作用。

我假设您使用的是 cookie-based session-tracking,因为它默认启用并且在 Tomcat 中优于 URL-based session-tracking 如果客户端愿意发送 JSESSIONID cookie。

Cookie 仅限于特定的主机名和路径。因此,当您登录 Tomcat A (http://server1:8080) 时,您会得到一个范围为 server1/path 的 cookie。当您访问 Tomcat B (http://server2:8080) 时,您 server1 的 cookie 未被发送,您被要求登录。

如果您希望它起作用,您需要选择以下选项之一:

  1. 使用 reverse-proxy / load-balancer
  2. 使用 multiple-IP DNS 将 server(不是 serverserver2)解析为多个 IP 地址,每个地址指向一个单独的 Tomcat 实例
  3. 禁用cookie-based 会话跟踪

但是由于浏览器遵循 HTTP cookie 处理规则,您测试事物的方式无法正常工作。