【问题标题】:Is tomcat clustering only way for session replication?tomcat集群是会话复制的唯一方法吗?
【发布时间】:2012-01-30 17:23:40
【问题描述】:

我在使用 apache 作为前端负载平衡器的 ubuntu 服务器上测试了 Tomcat Clusteringsession replication。根据我的测试经验,我说最好不要使用 tomcat 集群,而是将每个节点作为独立运行,在没有任何会话复制的情况下彼此不认识,因为我觉得它很慢,启动 tomcat 服务需要很多时间并且消耗更多内存。并且FarmDeployer 在部署中并不总是可靠的,整个配置应该放在<Host></Host> 元素下,以便农场部署者工作以及每个虚拟主机,因此是一个巨大的 server.xml 文件。下面是我使用的节点之一的带有集群配置的 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 集群是否适合在生产环境中使用,或者是否有任何替代的会话复制方式?或者我在上述配置中遗漏了任何可以微调的东西?

欢迎任何想法。谢谢!

【问题讨论】:

    标签: session tomcat cluster-computing failovercluster session-replication


    【解决方案1】:

    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) 中找到。

    【讨论】:

    • memcached 是像 tomcat 的附加组件一样的独立产品吗?。
    • 您可以在此处阅读有关 memcached 的信息:memcached.org/about 您在一台或多台机器上安装了 memcached 服务器,客户端可以设置/获取/删除缓存项。 memcached-session-manager(作为 tomcat 会话管理器)是一个在 memcached 中/从 memcached 中存储/检索会话的客户端。
    • memcached 比 tomcat 集群高效吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    • 2013-12-14
    • 2019-11-20
    • 2022-06-20
    • 1970-01-01
    • 2011-12-21
    相关资源
    最近更新 更多