session - tomcat集群是 session 复制的唯一方式吗?

标签 session tomcat cluster-computing failovercluster session-replication

我测试了Tomcat Clustering对于 session replication在使用 apache 作为前端负载平衡器的 ubuntu 服务器上。根据我的测试经验,我说最好不要使用 tomcat 集群,而是将每个节点独立运行,在没有任何 session 复制的情况下彼此不了解,因为我觉得它很慢,启动 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 的一个 session 故障转移/ session 复制解决方案是 memcached-session-manager (msm),支持粘性和非粘性 session 。 msm 使用memcached (或任何使用 memcached 协议(protocol)的后端)作为 session 备份/存储的后端。

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

在非粘性模式下, session 仅存储在 memcached 中,不再存储在 tomcat 中,与非粘性 session 一样, session 存储必须是外部的(以避免数据过时)。

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

session 序列化是可插入的,因此您不受 Java 序列化(和实现可序列化的类)的束缚。例如。有一个kryo序列化器可用,即 one of the fastest serialization strategies available .

msm home page主要介绍sticky session的方法,非sticky session的细节可以搜索或在mailing list上询问.

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

关于session - tomcat集群是 session 复制的唯一方式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9067979/

相关文章:

c# - WCF 服务中跨 session 持续存在的静态变量

Php 登录有效,但忽略 MySQL 脚本中的用户类型字段

eclipse webapp欢迎文件显示错误

APACHE-TOMCAT 谁能详细说明哪一个是网络服务器和网络容器?

replication - R + W > N 对 Cassandra 集群有什么影响?

Hadoop 多节点集群 : Connection failed with slave node

php - 你好,我如何向我的页面显示来自 2 个不同表的数据

java - Tomcat 6.0 上的 SSL

cluster-computing - 为什么建议创建节点数为奇数的集群

java - 在同一个 glassfish 实例中保持多个 session