tomcat学习三

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

其实<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>等同于如下配置(以下是Cluster的默认配置)

[html]  view plain  copy
  1. <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  
  2.                  channelSendOptions="8">  
  3.    
  4.           <Manager className="org.apache.catalina.ha.session.DeltaManager"  
  5.                    expireSessionsOnShutdown="false"  
  6.                    notifyListenersOnReplication="true"/>  
  7.    
  8.           <Channel className="org.apache.catalina.tribes.group.GroupChannel">  
  9.             <Membership className="org.apache.catalina.tribes.membership.McastService"  
  10.                         address="228.0.0.4"  
  11.                         port="45564"  
  12.                         frequency="500"  
  13.                         dropTime="3000"/>  
  14.             <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"  
  15.                       address="auto"  
  16.                       port="4000"  
  17.                       autoBind="100"  
  18.                       selectorTimeout="5000"  
  19.                       maxThreads="6"/>  
  20.    
  21.             <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">  
  22.               <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>  
  23.             </Sender>  
  24.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>  
  25.             <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>  
  26.           </Channel>  
  27.    
  28.           <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"  
  29.                  filter=""/>  
  30.           <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>  
  31.    
  32.           <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"  
  33.                     tempDir="/tmp/war-temp/"  
  34.                     deployDir="/tmp/war-deploy/"  
  35.                     watchDir="/tmp/war-listen/"  
  36.                     watchEnabled="false"/>  
  37.    
  38.           <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
  39. </Cluster>  

Cluster

Tomcat集群配置。集群的配置比较复杂,默认的集群配置可以满足一般的开发需求

常用属性:

className-指定Cluster使用的类

channelSendOptions-Cluster发送消息的方式

channelSendOptions可以设置为2、4、8、10,每个数字代表一种方式

2 = Channel.SEND_OPTIONS_USE_ACK(确认发送)

4 = Channel.SEND_OPTIONS_SYNCHRONIZED_ACK(同步发送) 

8 = Channel.SEND_OPTIONS_ASYNCHRONOUS(异步发送)

在异步模式下,可以通过加上确认发送(Acknowledge)来提高可靠性,此时channelSendOptions设为10

Manager

Manager决定如何管理集群的Session信息。Tomcat提供了两种ManagerBackupManager和DeltaManager

BackupManager-集群下的所有Session,将放到一个备份节点。集群下的所有节点都可以访问此备份节点

DeltaManager-集群下某一节点生成、改动的Session,将复制到其他节点。DeltaManager是Tomcat默认的集群Manager,能满足一般的开发需求

使用DeltaManager每个节点部署的应用要一样;使用BackupManager每个节点部署的应用可以不一样

常用属性:

className-指定实现org.apache.catalina.ha.ClusterManager接口的类

expireSessionsOnShutdown-设置为true时,一个节点关闭,将导致集群下的所有Session失效

notifyListenersOnReplication-集群下节点间的Session复制、删除操作,是否通知session listeners

maxInactiveInterval-集群下Session的有效时间(单位:s)maxInactiveInterval内未活动的Session,将被Tomcat回收。默认值为1800(30min)

Channel

ChannelTomcat节点之间进行通讯的工具。Channel包括5个组件:Membership、Sender、Transport、Receiver、Interceptor

Membership

Membership维护集群的可用节点列表。它可以检查到新增的节点,也可以检查到没有心跳的节点

常用属性:

className-指定Membership使用的类

address-组播地址

port-组播端口

frequency-发送心跳(向组播地址发送UDP数据包)的时间间隔(单位:ms)。默认值为500

dropTime-MembershipdropTime(单位:ms)内未收到某一节点的心跳,则将该节点从可用节点列表删除。默认值为3000

组播(Multicast):一个发送者和多个接收者之间实现一对多的网络连接。一个发送者同时给多个接收者传输相同的数据,只需复制一份相同的数据包。它提高了数据传送效率,减少了骨干网络出现拥塞的可能性

相同组播地址、端口的Tomcat节点,可以组成集群下的子集群

Sender

发送器,负责发送消息

Sender内嵌了Transport组件,Transport真正负责发送消息

Transport分为两种:bio.PooledMultiSender(阻塞式)nio.PooledParallelSender(非阻塞式

Receiver

接收器,负责接收消息

接收器分为两种:BioReceiver(阻塞式)NioReceiver(非阻塞式)

常用属性:

className-指定Receiver使用的类

address-接收消息的地址

port-接收消息的端口

autoBind-端口的变化区间

如果port为4000,autoBind为100,接收器将在4000-4099间取一个端口,进行监听

selectorTimeout-NioReceiver内轮询的超时时间

maxThreads-线程池的最大线程数

Interceptor

Cluster的拦截器

TcpFailureDetector-网络、系统比较繁忙时,Membership可能无法及时更新可用节点列表,此时TcpFailureDetector可以拦截到某个节点关闭的信息,并尝试通过TCP连接到此节点,以确保此节点真正关闭,从而更新集群可以用节点列表

MessageDispatch15Interceptor-MessageDispatch15Interceptor查看Cluster组件发送消息的方式是否设置为Channel.SEND_OPTIONS_ASYNCHRONOUS(Cluster标签下的channelSendOptions为8)。设置为Channel.SEND_OPTIONS_ASYNCHRONOUS时,MessageDispatch15Interceptor先将等待发送的消息进行排队,然后将排好队的消息转给Sender

Valve

Valve可以理解为Tomcat的拦截器

ReplicationValve-在处理请求前后打日志;过滤不涉及Session变化的请求

JvmRouteBinderValve-Apachemod_jk发生错误时,保证同一客户端的请求发送到集群的同一个节点

Deployer

同步集群下所有节点的一致性。Deployer没试验成功过。。。

ClusterListener

监听器,监听Cluster组件接收的消息

使用DeltaManager时,Cluster接收的信息通过ClusterSessionListener传递给DeltaManager

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值