没有负载均衡器的会话复制
session replication without loadbalancer
我正在尝试在两台不同机器的两台 tomcat 服务器(server1
、server2
)之间设置 会话复制。
我正在使用 StaticMembershipInterceptor
和 StaticMember
而不是 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登录到应用程序而无需输入用户名和密码。应该没有可用的登录页面。
以上配置后的实际结果:
在第二步中:登录页面可用。出现登录页面的原因是它创建了不同的会话。
当我在同一台机器的两个节点上测试相同的配置时,它工作正常。但是在不同的机器上,它不起作用。
到目前为止我尝试了什么:
检查了两个 tomcat 的日志文件 - 我可以看到连接是
成立。
确保有可分发的标签
也在context.xml
中添加了相同的内容
尝试在标签内添加,正如我在几个论坛中看到的那样。
检查 netstat -ano 我可以看到两个端口都在 4100 处侦听
机器
我是否缺少任何其他配置?不知道为什么它不起作用。
我假设您使用的是 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 未被发送,您被要求登录。
如果您希望它起作用,您需要选择以下选项之一:
- 使用 reverse-proxy / load-balancer
- 使用 multiple-IP DNS 将
server
(不是 server
或 server2
)解析为多个 IP 地址,每个地址指向一个单独的 Tomcat 实例
- 禁用cookie-based 会话跟踪
但是由于浏览器遵循 HTTP cookie 处理规则,您测试事物的方式无法正常工作。
我正在尝试在两台不同机器的两台 tomcat 服务器(server1
、server2
)之间设置 会话复制。
我正在使用 StaticMembershipInterceptor
和 StaticMember
而不是 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登录到应用程序而无需输入用户名和密码。应该没有可用的登录页面。
以上配置后的实际结果:
在第二步中:登录页面可用。出现登录页面的原因是它创建了不同的会话。
当我在同一台机器的两个节点上测试相同的配置时,它工作正常。但是在不同的机器上,它不起作用。
到目前为止我尝试了什么:
检查了两个 tomcat 的日志文件 - 我可以看到连接是 成立。
确保有可分发的标签
也在context.xml
中添加了相同的内容尝试在标签内添加,正如我在几个论坛中看到的那样。
检查 netstat -ano 我可以看到两个端口都在 4100 处侦听 机器
我是否缺少任何其他配置?不知道为什么它不起作用。
我假设您使用的是 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 未被发送,您被要求登录。
如果您希望它起作用,您需要选择以下选项之一:
- 使用 reverse-proxy / load-balancer
- 使用 multiple-IP DNS 将
server
(不是server
或server2
)解析为多个 IP 地址,每个地址指向一个单独的 Tomcat 实例 - 禁用cookie-based 会话跟踪
但是由于浏览器遵循 HTTP cookie 处理规则,您测试事物的方式无法正常工作。