问题标签 [session-replication]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tomcat - AWS 上的 CAS 4 集群:无法识别票证
我正在尝试将 CAS (4.1) 配置为在 amazon aws 内的集群环境中工作。我已经为集群配置了 Tomcat 7,但是在 aws 上你不能使用多播自动发现,所以我已经在 tomcat 上下文中设置了数据库会话复制。会话复制似乎运行良好(同一集群内的其他应用程序正确使用它):
接下来,我在 cas 配置上配置了 jpaTicketRegistry 和 uniqueGenerators,如 cas 配置指南中所述:
和
和
现在,应用程序正在启动并且在单个节点上正常工作,但是当我启动第二个节点时,大部分时间登录票据都没有被识别,这导致客户端应用程序无法登录:
如 cas 参考中所述,我为两个节点使用不同的主机名。该票已在数据库表中注册,但似乎第二个节点无法验证它。
我不确定问题是否与会话复制、节点之间缺乏自动发现或某些配置有关。
configuration - 在 Jboss EAP 6.2 中配置会话复制
在 Jboss EAP 6.2 中是否必须使用域模式而不是独立模式来启用会话复制?
任何人都可以提供一种在 Jboss EAP 6.2 服务器中配置会话复制的正确方法吗?
java - 具有 Hazelcast 会话复制的自定义会话侦听器
我为会话复制配置了 Hazelcast:
在我的 Web 应用程序中,用户可以创建在会话中持续存在直到完成的 Order。如果订单未完成并且会话被破坏(用户注销或会话过期),我想备份该订单处理的所有数据。
如果没有 Hz 会话复制,我可以使用自定义 HttpSessionListener 实现来完成此操作,例如:
它工作正常,但使用 Hz 我得到 2 个未同步的不同会话:
印刷sesId=HZDCDC1C77E7934E03A9FE329AAB7053B0 order=Order@6a5f7445
尽管
打印sesId=8748D170885C44B425FEEAA94AAB8A86 order=null
。
似乎 Hazelcast 创建并销毁了它自己的会话,我不能(或不知道如何)监听这个会话事件。
是否可以使两个会话保持同步或实现您自己的 Listener for Hz 会话?
tomcat - 如何在 Spring Boot 1.3.x 中为嵌入式 tomcat 添加 tomcat 会话复制
我正在使用 Spring Boot 版本 1.3.1,并且我想在我的应用程序中为嵌入式 tomcat 添加 tomcat 会话复制。我有很多谷歌,但我没有找到解决方案。我已经使用 jhipster 生成了我的 spring boot 应用程序,我生成的 WebConfigurer 文件代码是:
我添加了上面的代码只是为了让你知道我在我的 web 配置文件中正在做什么。我找到了这个链接How to setup a Spring Boot application with embedded tomcat session clustering? 但这对我没有帮助,因为某些类不在我的嵌入式 tomcat 的类路径中。
如果有人之前设置过tomcat会话复制,请帮助我。
java - Tomcat会话复制问题
TL;DR - 当主节点关闭时,sessionId 中的节点名称不会更新为备份中的当前节点名称。
Tomcat 版本 - apache-tomcat-7.0.50
我设置了两个节点(我的应用程序在 2 个单独的 Tomcat 中的 2 个实例),会话复制配置(也使用粘性会话)。下面是来自 server.xml 的集群配置,它位于 Engine 标记内。它在两个节点中都相似,除了端口号:
从 tomcat 管理器中,我可以看到会话(例如:D042A0C5E380EB9E500224C87233119C.myNode1)正在登录时在主节点中创建,并在备份中正确复制。
但是,一旦主节点出现故障,我希望备份节点中的 sessionId 会更新为当前节点名称,即:D042A0C5E380EB9E500224C87233119C.myNode2
例子 :
当用户登录时:
当一个节点 1 宕机时(预期):
但是发生了什么:
我有两个问题:
1)我的理解是否应该在主节点关闭后立即在备份中更新 sessionID 是否正确?我阅读了 tomcat 文档,似乎应该这样做。
2)如果应该,你能帮我配置一下吗?我已经尝试过关于 SO 的其他问题的解决方案,但它们似乎都不起作用。
编辑:根据建议添加完整的引擎配置:
节点 1
节点 2
提前致谢!
java - 在tomcat集群环境中获取ClassNotFoundException反序列化会话属性
我有一个安装了 Liferay 6.2 的 tomcat 集群环境。每个 tomcat 都部署了许多基于 Spring 的 portlet 应用程序。我的问题是当会话复制进程运行时,我得到与我的 portlet 的自定义类相关的 ClassNotFoundException。调查这个问题我发现它是由Tomcat核心类加载器中运行的会话复制过程引起的,并且我保存在会话中的自定义类被加载到自定义portlet类加载器中。
2016 年 10 月 7 日下午 1:42:08 org.apache.catalina.session.StoreBase processExpires
严重:会话:EA336308A2FDB389CA636EDFC537BEB6.lfrtc1;java.lang.ClassNotFoundException: com.pullmantur.portal.cruise.web.result.model.vo.CruiseSearchForm at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) at org.apache.catalina.loader .WebappClassLoader.loadClass(WebappClassLoader.java:1571) 在 java.lang.Class.forName0(Native Method) 在 java.lang.Class.forName(Class.java:278) 在 org.apache.catalina.util.CustomObjectInputStream.resolveClass (CustomObjectInputStream.java:74) 在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1612) 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1517) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java: 1771) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.
有人可以帮我解决这个问题吗?
java - Java Hazelcast Tomcat Web 集群
我正在尝试使用 Hazelcast Tomcat Web 会话复制在两个 Tomcat 实例之间实现基于粘性会话的负载平衡。出于测试目的,我已将应用程序部署在两个不同的 Tomcat 实例上,并通过 Apache HTTPD 处理负载平衡。jvmroute 参数和 mod-proxy 设置很好,负载平衡没有问题。
问题在于跨两个实例的会话复制。当第一台服务器(当前为请求提供服务)出现故障时,请求将发送到第二台服务器。Hazelcast 集群识别出会话正在通过故障转移,并正在使用新会话 id(后缀为第二个服务器的 jvmroute 参数)复制会话 - 如 Hazelcast 文档中所述https://github.com/hazelcast/ hazelcast-tomcat-sessionmanager#sticky-sessions-and-tomcat)。但是,对于故障转移请求,会话属性在较旧的会话中得到更新(通过 jvmroute 发生故障)并且没有被复制,从而导致后续请求失败。
我已经浏览了文档,但目前无法找到解决方案。我确定我缺少一些设置,因为这将是故障转移方案的基本设置。
有人可以帮我吗?如果您需要任何其他详细信息,请告诉我。
[更新] 跟踪流程后,能够确定 com.hazelcast.session.HazelcastSessionChangeValve 中的 handleTomcatSessionChange 被正确调用。如果我显示请求的会话 ID 的值,则会发生 request.changeSessionId(newSessionId) 调用并发布此值,该值会更新。但是,会话 ID 本身不会更新,这会导致 request.getSession().getId() 调用中的 ID 较旧。
tomcat - 复制会话是否需要启用粘性会话?
使用复制会话时,是否还需要使用粘性会话?一起使用它们有什么好处,或者使用复制的非粘性会话有什么缺点吗?
jboss - 在 Oracle Commerce CSA 11.2 中启用会话复制
我使用 Oracle Commerce 11.2 和 CSA,并且正在尝试启用会话复制。
我有/atg/dynamo/Configuration.backingUpSessions == true
并/atg/dynamo/Configuration.sessionBackupServerPropertyList
包含以下列表:
我还在 JBoss EAP 6.2 上配置了会话复制。
它工作正常,但有时(几率约为 50%)在用户登录后,他的个人资料仍然是短暂的,他的所有属性都是null
. 在 UI 上看起来像这样
如果我设置/atg/dynamo/Configuration.backingUpSessions
它false
工作正常。所以这个问题肯定与会话备份有关。即使只有一个 jboss 实例,这个问题仍然存在。
java - Wildfly 10.1 中的会话复制
我正在尝试使用可分发的 WAR 在我的 Wildfly 10.1 应用程序中启用会话复制。
我在托管主机提供商的 2 个 RedHat 7.2 实例上运行,可以完全访问操作系统和防火墙。我无法访问为我们的流量提供服务的路由器,但是主机已确认启用了多播 UDP。
我将 SeLinux 设置为最低限度,端口在 iptables 中打开,多播 IP 已被订阅,并且我的 Wildfly 域模式配置正在使用克隆的 full-ha 配置文件和 full-ha-sockets:
这是域配置文件,除了数据源外,它是普通的:
这是套接字绑定组:
最后,服务器组:
使用 TCPDump,我可以看到来自我的两台服务器的 modcluster 流量。
我还通过以下方式运行了 McastReceiverTest(src:https ://github.com/belaban/JGroups/blob/master/tests/other/org/jgroups/tests/McastReceiverTest.java ):
并使用了以下命令:
并查看通过的 UDP 流量。
不过,我没有看到来自 wildfly 的 jgroup 的任何内容。在我的日志中,当我查找订阅的频道时,我看到
“收到通道服务器的新集群视图:[app-one:server-one|0] (1) [app-one:server-one]”
但是我从来没有在任何一个实例上看到我的第二台服务器。当我测试时,我在两个 RedHat 实例前面都有一个 F5 负载均衡器。
我有一些假设希望澄清:
我需要为 Modcluster 启用 Apache 吗?如果您没有单独的平衡机制,我认为它似乎不会用于负载平衡。
会话复制是否与运行“热-热”场景相同,以便 2 个应用程序可以运行并保持会话活动?我的理解是,我应该能够登录到服务器 A 上的应用程序,并且服务器 B 也能够保持该会话处于活动状态。我们正在努力防止对会话粘性的需要。
这可以在多服务器环境中运行还是仅适用于同一本地计算机上的 2 个实例?我假设这是跨本地计算机还是在同一防火墙后面的 2 个单独的物理/虚拟机上无关紧要。
谢谢你。
我找到了一个一直困扰我的解决方案。我的配置问题出在我的绑定 IP 中。我的 jboss.bind.address 使用 127.0.0.1,因为我的 Wildfly 配置前面有 Apache。我将绑定 IP 更改为 NIC 的 IP(在我的情况下,它是 10.* 地址)。