我无法设置具有会话复制的集群。我已成功设置具有粘性会话的集群。当我在 Google 上搜索时,我发现很多链接解释了同样的问题,例如
取消选择粘性会话自动启用会话复制吗?
但我没有找到解决方案。有人解决了这个问题吗?
答案1
交叉发布于我在 StackOverflow 上的回答对同一问题
从 Adam Cameron 所附的文章中,他提到了会话复制方面的问题 -CF10 集群的会话复制问题.这里的关键是ColdFusion 10 中已输入错误 (3361502)没有在管理员中启用会话复制的选项。该错误现已修复。您正在运行更新的版本吗?
在该错误的一条评论中,Adobe 的某个人提到了这一点:
当启用粘性会话时,会话不会被复制;当禁用粘性会话时,会话会自动复制。
因此,在 ColdFusion 10 中,当您禁用粘性会话时,应该会启用会话复制。您还必须启用 J2EE 会话变量。
会话复制也存在一些限制。从文档在这里:
会话复制还确保会话范围变量在整个集群中复制。但是,会话复制不支持会话范围 CFC 或变量中的数组复制。
经过简短的聊天后,我向原帖推荐了这篇文章 -使用 Tomcat 作为内置应用服务器其中详细介绍了如何在 ColdFusion 10 中使用集群。特别有趣的是关于集群管理的部分,标题为“将远程实例添加到集群”。其中提到了需要在每个远程实例上对 server.xml 文件进行的一些添加。
使用以下步骤将远程实例添加到集群:
- 将远程实例注册到本地机器。
- 在本地机器上创建一个集群。
- 打开远程实例的 cf_install_dir\instance-name\runtime\conf\server.xml 文件。
- 在条目
</host>
和之间添加以下块</engine>
:
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<Manager notifyListenersOnReplication="true" expireSessionsOnShutdown="false" className="org.apache.catalina.ha.session.DeltaManager">
</Manager>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership port="45565" dropTime="3000" address="228.0.0.4" className="org.apache.catalina.tribes.membership.McastService" frequency="500">
</Membership>
<Receiver port="4003" autoBind="100" address="auto" selectorTimeout="5000" maxThreads="6" className="org.apache.catalina.tribes.transport.nio.NioReceiver">
</Receiver>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender">
</Transport>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector">
</Interceptor>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor">
</Interceptor>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="">
</Valve>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve">
</Valve>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">
</ClusterListener>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener”>
</ClusterListener>
</Cluster>
5. 在上面的条目中,使用集群的多播端口更新成员资格端口。
6 . 使用本地主机的 ColdFusion 管理员,将本地实例和远程实例添加到集群中。
笔记:如果启用粘性会话,远程实例和本地实例的 JVM 路由不能相同。
7. 重新启动所有实例。