3

我在使用apache作为前端负载均衡器的ubuntu服务器上测试Tomcat Clusteringsession replication。从我的测试经验来看,我认为最好不要使用tomcat集群,而是将每个节点作为独立运行,不知道没有任何会话复制,因为我觉得它很慢,需要很多时间来启动tomcat服务并消耗更多的内存。并且FarmDeployer在部署中始终不可靠,整个配置应该放在<Host></Host>元素中,以便农场部署者工作,并且还要为每个虚拟主机以及一个巨大的server.xml文件。下面是来自我使用的节点之一的集群配置的tomcat虚拟主机。是tomcat集群会话复制的唯一方式吗?

<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集群是否适合在生产环境中使用,或者是否有任何备用方式进行会话复制?或者我错过了上述配置中可以很好调整的任何内容?

欢迎任何想法。谢谢!为Tomcat

回答

6

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

在粘模会话仍保存在Tomcat和Memcached是仅作为额外的备份 - 为会话故障转移。

在非粘性模式会话只存储在分布式缓存,并不再在Tomcat中,与非粘性会话的会话存储必须是外部(以避免陈旧的数据)。

还有对membase/membase buckets的特殊支持,这对托管解决方案非常有用,您可以通过适当的身份验证访问某个存储桶。

会话序列化是可插入的,所以你没有绑定到java序列化(和实现Serializable的类)。例如。有一个kryo串行器可用,它是one of the fastest serialization strategies available

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

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

+0

'memcached'是一个独立的产品,就像tomcat的附加组件? – user465465 2012-02-01 06:58:11

+0

你可以阅读这里的memcached:http://memcached.org/about 您在一个或多个机器上安装一个memcached服务器,客户端可以设置/获取/删除缓存项。 memcached-session-manager(作为tomcat会话管理器)则是一个客户端在/从memcached中存储/检索会话。 – MartinGrotzke 2012-02-02 12:34:01

+0

在tomcat集群上memcached是否高效? – user12458 2014-12-09 14:50:30