use*_*465 3 session tomcat session-replication cluster-computing failovercluster
我在ubuntu服务器上测试Tomcat Clustering了session replicationapache作为前端负载均衡器.根据我的测试经验,我说最好不要使用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>
Run Code Online (Sandbox Code Playgroud)
Tomcat集群是否适合在生产中使用,或者是否有任何其他方式进行会话复制?或者我在上述配置中遗漏了任何可以微调的内容?
欢迎任何想法.谢谢!
tomcat的一个会话故障转移/会话复制解决方案是memcached-session-manager(msm),支持粘性和非粘性会话.msm使用memcached(或任何后端称为memcached协议)作为会话备份/存储的后端.
在粘滞模式下,会话仍保留在tomcat中,而memcached仅用作附加备份 - 用于会话故障转移.
在非粘性模式下,会话仅存储在memcached中,而不再存储在tomcat中,与非粘性会话一样,会话存储必须是外部的(以避免过时的数据).
还有对membase/membase存储桶的特殊支持,这对于托管解决方案非常有用,您可以使用适当的身份验证访问某个存储桶.
会话序列化是可插入的,因此您不依赖于Java序列化(以及实现Serializable的类).例如,有一个kryo序列化器可用,这是最快的序列化策略之一.
该MSM主页主要介绍粘性会话的方式,对有关非粘性会话您可以搜索或询问细节上的邮件列表.
有关配置的详细信息和示例可以在msm wiki(SetupAndConfiguration)中找到.