Tomcat集群Cluster实现原理剖析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文意在介绍对tomcat集群进行更深入详细的配置以满足特定需求。

对于WEB应用集群的技术实现而言,最大的难点就是如何能在集群中的多个节点之间保持数据的一致性,会话(Session)信息是这些数据中最重要的一块。要实现这一点,大体上有两种方式,一种是把所有Session数据放到一台服务器上或者数据库中,集群中的所有节点通过访问这台Session服务器来获取数据;另一种就是在集群中的所有节点间进行Session数据的同步拷贝,任何一个节点均保存了所有的Session数据。两种方式都各有优点,第一种方式简单、易于实现,但是存在着Session服务器发生故障会导致全系统不能正常工作的风险;第二种方式可靠性更高,任一节点的故障不会对整个系统对客户访问的响应产生影响,但是技术实现上更复杂一些。常见的平台或中间件如microsoft 和IBM WAS都会提供对两种共享方式的支持,tomcat也是这样,但是一般采用第二种方式。

当采用tomcat默认集群配置(

className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>)

时,配置的细节实际上被省略了,对于大多数应用而言,使用默认配置已经足够,完整的默认配置应该是这样:

className="org.apache.catalina.ha.tcp.SimpleTcpCluster"

channelSendOptions="8">

className="org.apache.catalina.ha.session.DeltaManager"

expireSessionsOnShutdo wn="false"

notifyListenersOnRepli cation="true"/>

className="org.apache.catalina.tribes.group.GroupChannel">

className="org.apache.catalina.tribes.membership.McastServi ce"

address="228 .0.0.4"

port="45564"

frequency="5 00"

dropTime="30 00"/>

className="org.apache.catalina.tribes.transport.nio.NioRece iver"

address="auto"

port="4000"

autoBind="100"

selectorTimeout= "5000"

maxThreads="6"/>

className="org.apache.catalina.tribes.transport.Replication Transmitter">

className="org.apache.catalina.tribes.transport.nio.PooledP arallelSender"/>

className="org.apache.catalina.tribes.group.interceptors.Tc pFailureDetector"/>

className="org.apache.catalina.tribes.group.interceptors.Me ssageDispatch15Interceptor"/>

className="org.apache.catalina.ha.tcp.ReplicationValve"

filter=""/>

className="org.apache.catalina.ha.session.JvmRouteBinderVal ve"/>

className="org.apache.catalina.ha.deploy.FarmWarDeployer"

tempDir="/tmp/war-te mp/"

deployDir="/tmp/war-deploy/"

watchDir="/tmp/war-l

isten/"

watchEnabled="false" />

className="org.apache.catalina.ha.session.JvmRouteSessionID BinderListener"/>

className="org.apache.catalina.ha.session.ClusterSessionLis tener"/>

下面笔者对这里的配置项作详细解释,以下容均是笔者阅读了tomcat官方文档后自己的理解,有些可能不对,希望读者能带着批判的眼光阅读,并欢迎指正笔者错误。

tomcat集群各节点通过建立tcp来完成Session的拷贝,拷贝有同步和异步两种模式。在同步模式下,对客户端的响应必须在Session拷贝到其他节点完成后进行;异步模式无需等待Session 拷贝完成就可响应。异步模式更高效,但是同步模式可靠性更高。同

步异步模式由 channelSendOptions参数控制,默认值是8,为异步模式,4是同步模式。在异步模式下,可以通过加上拷贝确认(Acknowledge)来提高可靠性,此时channelSendOptions设为10。

Manager用来在节点间拷贝Session,默认使用DeltaManager,DeltaManager采用的一种all-to-all的工作方式,即集群中的节点会把Session数据向所有其他节点拷贝,而不管其他节点是否部署了当前应用。当集群中的节点数量很多并且部署着不同应用时,可以使用BackupManager,BackManager仅向部署了当前应用的节点拷贝Session。但是到目前为止BackupManager并未经过大规模测试,可靠性不及DeltaManager。

Channel负责对tomcat集群的IO层进行配置。Membership 用于发现集群中的其他节点,这里的address用的是组播地址(Multicast address,了解更多组播地址详情请参见

/wu_jietian/archive/2010/04/13/5480010.aspx),使用同一个组播地址和端口的多个节点同属一个子集群,因此通过自定义组播地址和端口就可将一个大的tomcat集群分成多个子集群。Receiver用于各个节点接收其他节点发送的数据,在默认配置下tomcat会从4000-4100间依次选取一个可用的端口进行接收,自定

相关文档
最新文档