zoukankan      html  css  js  c++  java
  • Tomcat集群配置

    本次实验使用的tomcat版本为apache-tomcat-7.0.73。

    一、拷贝两份tomcat文件,注意端口号的修改。

    二、修改每个tomcat下server.xml配置文件的<Engine></Engine>中加入如下配置(此配置也是tomcat配置集群的默认配置):

    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
        <Manager className="org.apache.catalina.ha.session.DeltaManager" 
            expireSessionsOnShutdown="false" 
            notifyListenersOnReplication="true"/>
        <Channel className="org.apache.catalina.tribes.group.GroupChannel">
          <Membership className="org.apache.catalina.tribes.membership.McastService" 
                address="228.0.0.4" 
                port="45564" 
                frequency="500" 
                dropTime="3000"/>
          <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
                address="auto" 
                port="4000"
                autoBind="100" 
                selectorTimeout="5000" 
                maxThreads="6"/>
          <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
          </Sender>
          <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
          <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
        </Channel>
        <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
        <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
        <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
                tempDir="/tmp/war-temp/" 
                deployDir="/temp/war-deploy/" 
                watchDir="/tmp/war-listen/" 
                watchEnabled="false"/>
        <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    </Cluster>

     配置注意事项:

    • 如果tomcat是配置在同一台机器上的,那么<Receiver/>节点中用于监听传递消息的TCP端口号即属性port不能配置相同,配置范围是4000-4100。

    三、在项目的web.xml文件中配置<distributable/>,然后就可以运行测试了。

    四、集群配置属性详解

    1. <Cluster/>是tomcat集群配置节点
      • className:tomcat集群之间实现信息传递所使用的类。
      • 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。
          

    1. <Manager/>配置为如何管理集群的Session信息,tomcat提供了两种管理器:

    BackupManager:集群下产生的所有Session都将放到一个备份节点,集群下的所有节点都可以访问此备份节点,每个节点部署的应用可以不一样。
    DeltaManager:集群下某个节点创建、改动的Session,都将复制到其他节点,每个节点部署的应用要一样。这个管理器是tomcat默认的集群配置,适用于一般的小型集群。

      • className:集群管理器
      • expireSessionsOnShutdown:设置为true时,一个节点关闭,将导致集群下的所有Session失效
      • notifyListenersOnReplication:集群下节点间的Session复制、删除操作,是否通知session listeners
      • maxInactiveInterval:集群下Session的有效时间(单位:s),集群内不活动的Session,将被Tomcat回收。默认值为1800(30min)
    1. <Channel/>是tomcat集群之间进行通讯的工具,主要包括五个组件:Membership、Receiver、Sender、Transport、Interceptor。
      1. <Membership/>维护集群的可用节点列表。它可以检查到新增的节点,也可以检查到没有心跳的节点
        • className:指定Membership维护类
        • address:广播地址
        • port:广播端口
        • frequency:发送心跳(向广播地址发送UDP数据包)的时间间隔(单位:ms)。默认值为500
        • dropTime:Membership在dropTime(单位:ms)内未收到某一节点的心跳,则将该节点从可用节点列表删除。默认值为3000
      2. <Receiver/>配置消息接收器,负责接收消息,接收器分为两种:BioReceiver(阻塞式)、NioReceiver(非阻塞式)
        • className:指定Receiver使用的类
        • address:接收消息的地址
        • port:接收消息的端口
        • autoBind:端口的变化区间,如果port为4000,autoBind为100,接收器将在4000-4099间取一个端口,进行监听
        • selectorTimeout:NioReceiver内轮询的超时时间
        • maxThreads:线程池的最大线程数
      3. <Sender/>配置消息发送器,负责发送消息
      4. <Transport/>分为两种:bio.PooledMultiSender(阻塞式)、nio.PooledParallelSender(非阻塞式)
      5. <Interceptor/>配置Cluster的拦截器
        • TcpFailureDetector:网络、系统比较繁忙时,Membership可能无法及时更新可用节点列表,此时TcpFailureDetector可以拦截到某个节点关闭的信息,并尝试通过TCP连接到此节点,以确保此节点真正关闭,从而更新集群可以用节点列表。
        • MessageDispatch15Interceptor:查看Cluster组件发送消息的方式是否设置为Channel.SEND_OPTIONS_ASYNCHRONOUS(Cluster标签下的channelSendOptions为8时)。设置为Channel.SEND_OPTIONS_ASYNCHRONOUS时,MessageDispatch15Interceptor先将等待发送的消息进行排队,然后将排好队的消息转给Sender。
    2. <Valve/>可以理解为Tomcat的拦截器
      • ReplicationValve:在处理请求前后打日志;过滤不涉及Session变化的请求
      • JvmRouteBinderValve:Apache的mod_jk发生错误时,保证同一客户端的请求发送到集群的同一个节点
    3. <Deployer/>同步集群下所有节点的一致性
    4. <ClusterListener/>监听器,监听Cluster组件接收的消息,使用DeltaManager时,Cluster接收的信息通过ClusterSessionListener传递给DeltaManager
  • 相关阅读:
    有几种不同类型的自动代理?
    使用 Spring 通过什么方式访问 Hibernate?
    单片,SOA 和微服务架构有什么区别?
    如何给 Spring 容器提供配置元数据?
    在 Spring AOP 中,关注点和横切关注的区别是什么?
    Java Concurrency API 中的 Lock 接口(Lock interface) 是什么?对比同步它有什么优势?
    移动文件用哪个命令?改名用哪个命令?
    synchronized 的作用?
    “a==b”和”a.equals(b)”有什么区别?
    什么是 Spring beans?
  • 原文地址:https://www.cnblogs.com/wy2185/p/6385994.html
Copyright © 2011-2022 走看看