首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tomcat集群是会话复制的唯一方法吗?

tomcat集群是会话复制的唯一方法吗?
EN

Stack Overflow用户
提问于 2012-01-31 01:23:41
回答 1查看 9K关注 0票数 3

我在ubuntu服务器上用apache作为前端负载均衡器测试了Tomcat Clustering for session replication。根据我的测试经验,我认为最好不要使用tomcat集群,而是将每个节点作为独立的节点运行,而不需要任何会话复制,因为我觉得它很慢,启动tomcat服务需要很多时间,并且消耗更多的内存。而且FarmDeployer在部署时并不总是可靠的,应该将整个配置放在<Host></Host>元素下,以便场部署程序和每个虚拟主机都能工作,从而形成一个巨大的server.xml文件。下面是我使用的一个节点上的带有集群配置的tomcat虚拟主机。

代码语言:javascript
复制
<Host name="site1.mydomain.net" debug="0" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Logger className="org.apache.catalina.logger.FileLogger"
directory="logs" prefix="virtual_log1." suffix=".log" timestamp="true"/>
<Context path="" docBase="/usr/share/tomcat/webapps/myapp" debug="0" reloadable="true"/>

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<Manager className="org.apache.catalina.ha.session.DeltaManager" 
          expireSessionsOnShutdown="false"
          notifyListenersOnReplication="true"/>

        <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="192.168.1.8"
                  port="4001"
                  selectorTimeout="100"
                  maxThreads="6"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
            <Interceptor className="org.apache.catalina.tribes.group.interceptors.StaticMembershipInterceptor">
                <Member className="org.apache.catalina.tribes.membership.StaticMember"
                      port="4002"
                      securePort="-1"
                      host="192.168.1.9"
                      domain="staging-cluster"
                      uniqueId="{0,1,2,3,4,5,6,7,8,9}"/>

             <!--   <Member className="org.apache.catalina.tribes.membership.StaticMember"
                      port="4002"
                      securePort="-1"
                      host="192.168.1.9"
                      domain="staging-cluster"
                      uniqueId="{0,1,2,3,4,5,6,7,8,9}"/> -->

            </Interceptor>
        </Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

<ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
            tempDir="/usr/share/tomcat/temp/"
            deployDir="/usr/share/tomcat/webapps/"
            watchDir="/usr/share/tomcat/watch/"
            watchEnabled="true"/>
    </Cluster>
</Host>

Tomcat集群是否适合在生产环境中使用,或者是否有其他方法可用于会话复制?或者我在上面的配置中遗漏了一些可以微调的东西?

欢迎任何想法。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-02-01 04:49:08

tomcat的一种会话故障转移/会话复制解决方案是memcached-session-manager (msm),它同时支持粘性会话和非粘性会话。msm使用memcached (或任何使用memcached协议的后端)作为会话备份/存储的后端。

在粘滞模式下,会话仍然保留在tomcat中,memcached仅用作额外的备份-用于会话故障转移。

在非粘滞模式下,会话仅存储在memcached中,而不再存储在tomcat中,因为对于非粘滞会话,会话存储必须是外部的(以避免陈旧数据)。

还有对membase / membase buckets的特殊支持,这对于托管解决方案很有用,在这些解决方案中,您可以通过适当的身份验证访问特定的存储桶。

会话序列化是可插拔的,因此您不必依赖于java序列化(以及实现Serializable的类)。例如,有一个可用的kryo序列化程序,它是one of the fastest serialization strategies available

msm home page主要描述粘滞会话方法,有关您可能在mailing list上搜索或询问的非粘滞会话的详细信息。

有关配置的详细信息和示例可在msm wiki (SetupAndConfiguration)中找到。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9067979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档