Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无多播的tomcat会话复制_Java_Tomcat_Multicast_Failovercluster - Fatal编程技术网

Java 无多播的tomcat会话复制

Java 无多播的tomcat会话复制,java,tomcat,multicast,failovercluster,Java,Tomcat,Multicast,Failovercluster,我计划使用托管提供商租用的2台专用根服务器。这些机器将在集群中运行Tomcat6。 如果我以后再添加其他机器,它们不太可能通过多播访问,因为它们将位于不同的子网中 是否可以在没有多播的情况下运行tomcat?Tomcat6集群的所有教程都包括多播心跳。SimpleTcpCluster有其他选择吗 或者其他替代方案更适合这种情况?无法控制两台服务器之间的距离(它们可能位于两个不同的数据中心),也没有专用的服务器间通信线路,我宁愿通过循环DNS或负载均衡器运行它们,将客户端重定向到www1.your

我计划使用托管提供商租用的2台专用根服务器。这些机器将在集群中运行Tomcat6。 如果我以后再添加其他机器,它们不太可能通过多播访问,因为它们将位于不同的子网中

是否可以在没有多播的情况下运行tomcat?Tomcat6集群的所有教程都包括多播心跳。SimpleTcpCluster有其他选择吗


或者其他替代方案更适合这种情况?

无法控制两台服务器之间的距离(它们可能位于两个不同的数据中心),也没有专用的服务器间通信线路,我宁愿通过循环DNS或负载均衡器运行它们,将客户端重定向到www1.yourdomain.xxx或www2.yourdomain.xxx,并小心处理服务器通信

如果服务器之间的通信量很大,您可能会改变您的体系结构,优化您的应用程序,使其“适合”一台服务器(至少在一段时间内),或者使用专用主机,控制服务器的位置、距离和布线。否则,您的服务器间通信、心跳等将使用与其通信的客户端相同的通道(例如,相同的网段),这可能会降低每个人的速度


如果你真的期待那么多的负担,我想至少涉及到一些钱,不是吗?明智地使用它,并使用您的设置技能解决问题,这比在没有控制或专用线路的情况下设置分布式集群更困难

在给出我的另一个答案后,看到对这个问题的评论,我对你的问题感到困惑。。。是关于会话复制吗?集群通信?最好是陈述您的问题,而不是计划中的解决方案本身就存在问题

我将陈述一些可能的问题,并给出快速答案:

您的应用程序是CPU/RAM密集型的
  • 对其进行分析、优化,然后重试
  • 购买更大/更好的服务器
您的应用程序是带宽密集型的
  • 使用您在问题中提到的cheapo集群很可能会使情况变得更糟,因为服务器间通信和客户机-服务器通信使用相同的(隐藏)通道
  • 您可能能够分离不同类型的带宽,例如,通过让动态内容从不同于静态内容的服务器提供服务:此处不需要服务器间通信
您的应用程序是存储密集型的
  • 得到一个更大的服务器
  • 选择专用主机,并根据需要安装尽可能多的旋转磁盘
  • 看看其他型号(如amazons S3存储)是否适合您)
您的应用程序可能会被删除
  • 确定以上哪些因素(或其他因素)决定了应用程序的限制,然后修复该问题
您只需要会话复制吗?
  • Tomcats SessionManager接口很小,可以自己轻松实现/扩展。将其用于您喜欢的任何会话复制。有关更多信息,请参阅文档和实现
更多想法
  • 看看更灵活的设置,如EC2(亚马逊)、谷歌产品或其他云计算设置。利用自己的云存储和服务器间通信设施。请注意不要过多地依赖此基础架构

我当然忘记了一些东西,但这可能提供了一些起点。更具体地了解潜在问题的性质,以获得更好的答案:)

我正在尝试部署耶鲁中央认证服务器(CAS),我希望将其群集以实现冗余,因为这是基础设施的关键部分。CAS要求复制会话,因为在用户登录应用程序a并导航到参与单点登录域的应用程序B后,应用程序B向CAS发送一个请求,以确定用户是否具有活动的“票证”。由于没有设备向应用程序B指示它应将自身寻址到哪个节点以验证票证,因此必须将一个节点中的所有活动票证复制到群集中的所有节点。换句话说,会话粘性在这里不是解决方案,因为应用程序B在验证用户cookie中的票证时,不知道用户登录的应用程序a中原始会话的sessionId

因此,CAS要求跨所有节点复制会话。网络支持多播的要求增加了大量的开销,使得这种方法的部署有点重。我在谷歌代码测试了这个项目:


这看起来非常有用,部署起来也很简单(至少在linux操作系统上是如此),但不幸的是,它只提供会话故障切换,而不是会话复制解决方案。

只需使用即可。它工作得很好。多年来,我们一直在使用它进行20台Tomcat服务器共享会话的设置。您可以有一个或两个memcached服务器来处理会话复制

另一个选择是使用数据库进行此。。。我写这篇文章是作为一个评论,因为我不知道tomcat是否可以“开箱即用”地做到这一点,也不确定CAS以及它实际上是如何工作的。然而,听起来好像你需要memcached会话管理器的非粘性会话支持,我只是想让你知道我刚刚上传了一个具有非粘性会话支持的构建:你可以将它与上面提到的其他1.3.6 JAR一起使用。要使用非粘性会话,必须将属性sticky=“false”添加到manager配置中(尚未记录为尚未发布)。如果您有任何问题,我们也会邀请您在邮件列表中提问:-)祝您玩得开心!