首页主机资讯如何在Linux上部署Tomcat集群

如何在Linux上部署Tomcat集群

时间2025-12-01 15:08:05发布访客分类主机资讯浏览1002
导读:Linux上部署Tomcat集群 一、架构与准备 架构建议:前端使用Nginx或Apache HTTP Server做负载均衡,后端部署2个及以上Tomcat实例组成集群,开启会话复制(DeltaManager 或 BackupManag...

Linux上部署Tomcat集群

一、架构与准备

  • 架构建议:前端使用NginxApache HTTP Server做负载均衡,后端部署2个及以上Tomcat实例组成集群,开启会话复制(DeltaManager 或 BackupManager),实现高可用与故障转移。
  • 准备要点:
    • 安装**JDK 8+**并配置环境变量(JAVA_HOME、PATH)。
    • 安装Tomcat 9/10(建议同版本,便于一致性)。
    • 同一台机器部署多实例时,修改各实例的Server、HTTP、AJP、shutdown端口避免冲突。
    • 开放防火墙端口:HTTP/HTTPS、AJP(如使用)、以及集群通信端口(见下文)。
    • 负载均衡器健康检查:HTTP 200/302 探测路径(如 /health)。

二、Tomcat节点集群配置

  • 启用内置集群:在每个实例的 conf/server.xml 的 或 下加入 配置。示例(默认 DeltaManager,适合大多数场景):
<
    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=".*\.gif;
    .*\.js;
    .*\.jpg;
    .*\.png;
    .*\.htm;
    .*\.html;
    .*\.css;
    .*\.txt;
    "/>
    
  <
    Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    
  <
    Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
           tempDir="/tmp/war-temp/"
           deployDir="/tmp/war-deploy/"
           watchDir="/tmp/war-listen/"
           watchEnabled="false"/>
    
  <
    ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    
<
    /Cluster>
    
  • 关键参数说明:
    • channelSendOptions:复制模式控制;8=异步(默认,性能更好),4=同步(可靠性更高),10=异步+ACK(在异步基础上增加确认,提高可靠性)。
    • Manager:默认 DeltaManager(all-to-all 复制,适合节点少且应用一致);节点多或应用不一致可用 BackupManager(仅向部署了当前应用的节点复制,但成熟度不及 DeltaManager)。
    • Membership:组播发现节点,同一集群需使用相同 address/port(如 228.0.0.4:45564)。
    • Receiver:接收复制消息端口,默认从4000-4100自动选择;同机多实例需显式指定不同端口(如 4000、4001)。
    • ReplicationValve.filter:对静态资源不触发复制,提升性能。
  • 同一主机多实例端口规划示例(以 8080/8009 为基准,按规则偏移):
    • 实例A:Server 8005,HTTP 8080,AJP 8009,Receiver 4000
    • 实例B:Server 8006,HTTP 8081,AJP 8010,Receiver 4001
  • 可选优化(BackupManager 示例,需保证各节点配置与应用尽量一致):
<
    Manager className="org.apache.catalina.ha.session.BackupManager"
         expireSessionsOnShutdown="false"
         notifyListenersOnReplication="true"
         mapSendOptions="6"/>

  • 应用侧要求:在应用的 WEB-INF/web.xml 中加入 ,并确保放入 session 的对象实现 Serializable 接口,否则复制会失败或不生效。

三、负载均衡器配置

  • Nginx 示例(轮询,支持会话保持与被动健康检查):
upstream backend {
    
    ip_hash;
     # 会话保持(基于客户端IP)
    server 10.0.0.11:8080 max_fails=3 fail_timeout=30s;
    
    server 10.0.0.12:8080 max_fails=3 fail_timeout=30s;

    # 健康检查(被动)
}


server {
    
    listen 80;

    location / {
    
        proxy_pass http://backend;
    
        proxy_set_header Host $host;
    
        proxy_set_header X-Real-IP $remote_addr;
    
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
        proxy_set_header X-Forwarded-Proto $scheme;

    }

}
    
  • Apache HTTP Server + mod_proxy_balancer 示例(开启会话粘滞):
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<
    Proxy "balancer://mycluster">
    
    BalancerMember "http://10.0.0.11:8080" route=node1
    BalancerMember "http://10.0.0.12:8080" route=node2
    ProxySet lbmethod=byrequests
    ProxySet stickysession=JSESSIONID|jsessionid
<
    /Proxy>
    

ProxyPass        "/" "balancer://mycluster/"
ProxyPassReverse "/" "balancer://mycluster/"
  • 如使用 mod_jk(AJP),需编译并加载 mod_jk.so,配置 workers.properties 定义节点与 AJP 端口,并在 httpd.conf 中 Include 相关配置。

四、启动与验证

  • 启动顺序:先启动所有 Tomcat 实例,再启动 Nginx/Apache
  • 验证要点:
    • 访问应用首页,确认返回 JSESSIONID(浏览器 Cookie 或响应头 Set-Cookie)。
    • 登录后,在多个节点间切换(可通过负载均衡关闭某节点或临时停止实例),验证无需重复登录(会话粘滞或复制生效)。
    • 查看各节点 catalina.outlocalhost_access_log,确认请求分发与复制日志无异常。
    • 常见故障排查:
      • 节点互相发现失败:检查 组播 228.0.0.4:45564 是否被防火墙拦截,或同网段路由/交换设备限制组播。
      • 同机多实例复制异常:确认 Receiver port 唯一且未被占用。
      • 会话未复制:确认应用 web.xml 含 ,session 属性可序列化,且 ReplicationValve 未过滤相关请求路径。
      • 会话粘滞失效:Nginx 使用 ip_hash 或基于 JSESSIONID 的路由;Apache 使用 stickysession=JSESSIONID|jsessionid

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何在Linux上部署Tomcat集群
本文地址: https://pptw.com/jishu/760140.html
Linux Tomcat日志管理最佳实践是什么 Linux下Tomcat安全设置有哪些要点

游客 回复需填写必要信息