linux搭建tomcat集群实现高可靠性

本文介绍了如何在Linux系统中搭建Tomcat集群,通过会话复制或会话共享提升服务的高可靠性。详细讲解了配置完全复制以及主/备复制的不同部署方法,并提到了集群中的关键组件如管理器、分组、成员、信道等。同时,强调了会话在集群中的工作原理以及多播节点发现的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tomcat集群实际上是一种会话复制或会话共享

会话session指的是浏览器访问一个项目资源时开始到浏览器关闭结束,期间客户端向服务器发送请求时会携带服务器给的sessionID,只要浏览器不关闭或者会话相关标签页没关闭,那么会话会存在,直到会话自动被服务器销毁或手工销毁,浏览器或相关标签页没关闭的情况下同一浏览器访问同一项目资源时也属于同一个会话。

集群中的术语如下:

  1. 管理器:负责管理会话
  2. 分组:tomcat的逻辑分组
  3. 成员:集群参与节点
  4. 信道:传输集群消息的信道
  5. 发送器:发送复制消息
  6. 接收器:负责接收复制消息
  7. 拦截器:负责操作复制消息
  8. 传输:自定义插件,发送和接收的消息
  9. 心跳:多播节点发现,间断向其它节点发送消息来保活

注意:多播发现节点需要实现操作系统的网卡多播功能,ifconfig中如果出现MULTICAST代表支持多播功能,会话是根据主机标识的,不同的主机标识使用不同的会话

本例中的tomcat版本为tomcat.7.0.93

配置完全(ALL -- TO --ALL)复制:

在不同主机间实现集群,所有主机的实现分布web应用的web.xml需加入<distributable/>

Context需加入distributed=”true”,如下所示

Server.xml的Engine需要加入jvmRoute=”xxx”,xxx每个节点不能相同

   <Engine name="Catalina" defaultHost="localhost" jvmRoute="tc1">##jvmRoute每个节点不一样

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

   <Manager className="org.apache.catalina.ha.session.DeltaManager" ##delta代表all-2-all

        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="6.6.8.162" ##不同的接收者ip不一样

            port="4000"##同一主机的端口不同的节点port不一样

            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"/>

    <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>

    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>

</Cluster>

访问网页设置会话属性并断开访问的tomcat服务去访问另一台,可看到如下信息

另一种部署方法,更改为静态发现成员的server.xml主要配置

    <Channel className="org.apache.catalina.tribes.group.GroupChannel">
      <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
            address="6.6.8.161"
            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.TcpPingInterceptor" staticOnly="true"/>
      <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="4000"
                    host="6.6.8.161"
                    uniqueId="{6,6,8,161,0,0,0,0,0,0,0,0,0,0,0,0}"/>##唯一即可

            <Member className="org.apache.catalina.tribes.membership.StaticMember"
                    port="4000"
                    host="6.6.8.162"
                    uniqueId="{6,6,8,162,0,0,0,0,0,0,0,0,0,0,0,0}"/>
      </Interceptor>
</Channel>

 

另一种部署方法,配置主/备复制,不是全部复制,只是复制会话到一个备份节点上,更改内容如下

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
   <Manager className="org.apache.catalina.ha.session.BackupManager"##backupManager 主备复制
        expireSessionsOnShutdown="false"
        notifyListenersOnReplication="true"
        mapSendOptions="6"/>
    <Channel className="org.apache.catalina.tribes.group.GroupChannel">

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值