首页主机资讯Tomcat在CentOS中的集群如何搭建

Tomcat在CentOS中的集群如何搭建

时间2025-12-19 23:09:04发布访客分类主机资讯浏览406
导读:架构与准备 架构建议:前端使用 Nginx 做反向代理与负载均衡,后端 2 台或以上 Tomcat 组成集群,应用无状态或会话共享(推荐外置 Redis 或 Tomcat 内置组播复制)。 环境建议:CentOS 7/8、JDK 8、To...

架构与准备

  • 架构建议:前端使用 Nginx 做反向代理与负载均衡,后端 2 台或以上 Tomcat 组成集群,应用无状态或会话共享(推荐外置 Redis 或 Tomcat 内置组播复制)。
  • 环境建议:CentOS 7/8JDK 8Tomcat 9(各节点版本保持一致)。
  • 安装基础组件(两台 Tomcat 节点均执行):
    • 安装 JDK
      • sudo yum install -y java-1.8.0-openjdk-devel
    • 安装 Tomcat 9(示例)
      • wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz
      • tar xvf apache-tomcat-9.0.56.tar.gz & & sudo mv apache-tomcat-9.0.56 /opt/tomcat
  • 规划端口(避免单机多实例冲突):
    • 节点1:HTTP 8080,AJP 8009,关闭端口 8005,Receiver 端口 4000
    • 节点2:HTTP 8081,AJP 8010,关闭端口 8006,Receiver 端口 4001
  • 防火墙放行(两台 Tomcat 与 Nginx 节点均需放行):
    • sudo firewall-cmd --permanent --add-port={ 8080,8081,8009,8010,80} /tcp
    • sudo firewall-cmd --reload
  • 可选:在 Tomcat 的 bin 目录创建 setenv.sh(便于自定义内存与启动参数):
    • JAVA_OPTS=“-Xms512m -Xmx1024m -Dfile.encoding=UTF-8”

Tomcat 节点配置

  • 为引擎设置唯一路由标识(用于粘性会话与识别节点):
    • 节点1:
    • 节点2:
  • 启用集群会话复制(示例为组播复制,适合同网段;跨机房建议改用外置会话存储):
    • 在 或 内加入(两台节点基本一致,Receiver 端口不同):
      <
          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"   <
          !-- 节点2改为4001 -->
          
                    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.MessageDispatchInterceptor"/>
          
        <
          /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.ClusterSessionListener"/>
          
      <
          /Cluster>
      
      
  • 应用开启分布式会话:在应用的 WEB-INF/web.xml 中加入 。
  • 单机多实例时,确保各实例的 Server port、HTTP Connector port、AJP Connector port、Receiver port 均不冲突。

负载均衡配置

  • 安装 Nginx(负载均衡器节点执行):
    • sudo yum install -y nginx
  • 配置反向代理与负载均衡(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/tomcat.conf):
    upstream tomcat_cluster {
        
        # 可按需开启 ip_hash 实现会话粘滞(不建议与外置会话存储混用)
        # ip_hash;
        
        server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
        
        server 192.168.1.12:8081 max_fails=3 fail_timeout=30s;
    
    }
    
    
    server {
        
        listen 80;
        
        server_name _;
    
        location / {
        
            proxy_pass http://tomcat_cluster;
        
            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;
        
            proxy_connect_timeout 5s;
        
            proxy_send_timeout 10s;
        
            proxy_read_timeout 30s;
    
        }
    
    }
        
    
  • 启动与开机自启:
    • sudo systemctl enable --now nginx
  • 可选(Apache + mod_jk):使用 AJP 1.3 与 workers.properties 分发请求,配置 sticky_session=1 实现会话粘滞。

会话共享方案对比与落地

  • 内置组播复制(DeltaManager):配置简单、同网段效果好;跨机房/云上 VPC 多播受限,扩容到大量节点时复制流量较大。
  • 外置会话存储(推荐):将 Session 存入 RedisMemcached,解耦 Tomcat、易横向扩展、跨机房友好。
    • Redis 方案示例(Tomcat 端引入会话管理器与依赖,示例组件:tomcat-redis-session-manager、Jedis、commons-pool2):
      • 将相关 JAR 放入 $CATALINA_HOME/lib;在 conf/context.xml 的 中加入:
        <
            Valve className="org.apache.catalina.valves.RemoteIpValve"
               remoteIpHeader="X-Forwarded-For"
               protocolHeader="X-Forwarded-Proto"/>
            
        <
        Manager className="org.redisson.tomcat.RedissonSessionManager"
                 configPath="${
        catalina.base}
            /conf/redisson.yaml"
                 readMode="REDIS"
                 updateMode="DEFAULT"/>
            
        
      • 配置 redisson.yaml(示例单机 Redis):
        singleServerConfig:
          address: "redis://10.11.10.99:6379"
          password: "redis_123456"
        
      • 部署后重启 Tomcat,会话将存储到 Redis。
    • Memcached 方案:使用 memcached-session-manager(MSM),配置 Sticky 或 Non-Sticky 模式,适合已有 Memcached 基础设施的场景。

部署验证与常见问题

  • 部署与验证
    • 部署测试应用(含 ),或打印 session.getId()jvmRoute
      • 多次刷新页面,观察请求在 8080/8081 间分发;登录后切换节点,确认会话不丢失(粘滞或外置会话生效)。
    • 查看集群日志:
      • tail -f $CATALINA_HOME/logs/catalina.out | grep -i cluster
      • 关注 Membership 发现、复制消息、节点加入/离开等信息。
  • 常见问题排查
    • 端口冲突:单机多实例需确保 Server port、HTTP、AJP、Receiver 均唯一。
    • 组播不通:跨网段/云环境多播被限制,改用外置会话存储(Redis/Memcached)。
    • 会话粘滞与一致性:开启 ip_hash 可实现粘滞,但与外置会话存储混用可能导致误解;建议统一策略。
    • 防火墙/安全组:放行 80、8080、8081、8009、8010 等端口。
    • 应用一致性:使用 DeltaManager 时,各节点应用版本与部署内容需保持一致;使用 BackupManager 可容忍差异。

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


若转载请注明出处: Tomcat在CentOS中的集群如何搭建
本文地址: https://pptw.com/jishu/776773.html
CentOS Informix高可用性如何实现 如何编写高效的CentOS Informix SQL语句

游客 回复需填写必要信息