首页主机资讯CentOS下Tomcat集群搭建步骤

CentOS下Tomcat集群搭建步骤

时间2026-01-19 10:49:04发布访客分类主机资讯浏览245
导读:CentOS 下 Tomcat 集群搭建步骤 一 环境准备与安装 准备至少 2 台 CentOS 7/8 服务器,建议内网互通,规划好 VIP/域名 与业务端口(HTTP 默认 8080,AJP 默认 8009,关闭端口默认 8005)。...

CentOS 下 Tomcat 集群搭建步骤

一 环境准备与安装

  • 准备至少 2 台 CentOS 7/8 服务器,建议内网互通,规划好 VIP/域名 与业务端口(HTTP 默认 8080,AJP 默认 8009,关闭端口默认 8005)。
  • 安装 JDK 8(所有节点版本保持一致):
    • 安装 OpenJDK:sudo yum install -y java-1.8.0-openjdk-devel
    • 或安装 Oracle JDK 并设置环境变量(/etc/profile):
      • export JAVA_HOME=/usr/java/jdk1.8.0_xxx
      • export PATH=$JAVA_HOME/bin:$PATH
  • 下载并解压 Apache 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 -C /opt
    • sudo mv /opt/apache-tomcat-9.0.56 /opt/tomcat
  • 创建专用用户并赋权:
    • sudo useradd -r -m -U -d /opt/tomcat -s /sbin/nologin tomcat
    • sudo chown -R tomcat:tomcat /opt/tomcat
  • 开放防火墙端口(示例):
    • sudo firewall-cmd --permanent --add-port=8080/tcp
    • sudo firewall-cmd --permanent --add-port=8009/tcp
    • sudo firewall-cmd --reload
  • 可选:为便于 systemd 管理,在 $CATALINA_HOME/bin/catalina.sh 顶部添加 CATALINA_PID=/var/run/tomcat.pid,并创建 systemd 服务(示例见文末附录)。

二 多实例与基础配置

  • 在同一台机器部署多实例时,需修改各实例的 Server、Connector、AJP、Shutdown 端口避免冲突;跨机器部署则保持默认端口一致即可。
  • 示例(实例 1 使用默认端口,实例 2 调整如下):
    • server.xml:
      • < Server port="8105" shutdown="SHUTDOWN">
      • < Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
      • < Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
  • 为会话粘滞与路由识别,给每个实例的 Engine 设置唯一 jvmRoute(如:node1、node2):
    • < Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
  • 部署应用:将 WAR 放入各实例的 webapps/ 目录,Tomcat 启动会自动部署。

三 配置 Tomcat 集群会话复制

  • 方式 A 内置组播复制(SimpleTcpCluster,适合同网段)
    • server.xmlEngine 内加入(或确保存在)如下片段:
      <
          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.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>
      
      
    • 说明:
      • 组播地址 228.0.0.4 与端口 45564 需在所有节点保持一致;如跨网段或云环境禁用了组播,请改用外置会话存储(方式 B)。
      • 各实例的 Receiver port=4000 在同一台机器需不同,跨机器可一致。
  • 方式 B 外置会话存储(Redis/Memcached,跨机房/云环境推荐)
    • 引入相应 Valve/Filter(如 Redisson、Memcached Session Manager 等),将 session 存入集中缓存,天然支持扩缩容与跨网段。
  • 应用需支持会话序列化:确保会话属性实现 Serializable

四 部署负载均衡

  • 方案 1:Nginx 作为反向代理与负载均衡(推荐,简单通用)
    • 安装:sudo yum install -y nginx
    • 配置 /etc/nginx/nginx.conf(示例):
      http {
      
        upstream tomcat_cluster {
          
          server 192.168.10.11:8080;
          
          server 192.168.10.12:8080;
          
          # 可选:开启会话粘滞(配合 jvmRoute)
          # ip_hash;
      
        }
      
        server {
          
          listen 80;
      
          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;
      
          }
      
        }
      
      }
          
      
    • 启动:sudo systemctl enable --now nginx
  • 方案 2:Apache HTTP Server + mod_jk(AJP,传统方案)
    • 安装 Apache 与编译/启用 mod_jk,配置 workers.properties(示例):
      worker.list=loadbalancer
      worker.worker1.type=ajp13
      worker.worker1.host=192.168.10.11
      worker.worker1.port=8009
      worker.worker2.type=ajp13
      worker.worker2.host=192.168.10.12
      worker.worker2.port=8009
      worker.loadbalancer.type=lb
      worker.loadbalancer.balance_workers=worker1,worker2
      worker.loadbalancer.sticky_session=1
      
    • 在 httpd.conf 中加载 mod_jk 并挂载应用:JkMount /* loadbalancer

五 启动与验证

  • 启动服务:
    • Tomcat:sudo -u tomcat /opt/tomcat/bin/startup.sh(或使用 systemd)
    • Nginx:sudo systemctl start nginx
  • 健康检查:
    • curl -I http://< LB_IP> / 应返回 200/302 等成功状态码
    • ss -lntp | grep -E '8080|8009|80' 检查端口监听
  • 会话保持验证:
    • 部署测试页面(打印 session.getId()jvmRoute),多次刷新或并发访问,确认请求在节点间切换时 session 不丢失;若使用 jvmRoute,登录后不应出现频繁被踢出。
  • 日志排查:
    • Tomcat:tail -f /opt/tomcat/logs/catalina.out /opt/tomcat/logs/localhost*.log
    • 集群复制:关注 ReplicationValveCluster 相关日志
    • Nginx:tail -f /var/log/nginx/access.log /var/log/nginx/error.log
  • 扩缩容与维护:新增节点时保持 Tomcat 版本、应用版本、集群配置 一致;变更前在 Nginx upstream 中先摘除节点,完成滚动升级后再恢复。

附录 systemd 服务示例

  • 创建文件:/usr/lib/systemd/system/tomcat.service
    [Unit]
    Description=Apache Tomcat
    After=network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/var/run/tomcat.pid
    Environment=JAVA_HOME=/usr/java/jdk1.8.0_xxx
    Environment=CATALINA_HOME=/opt/tomcat
    ExecStart=/opt/tomcat/bin/startup.sh
    ExecStop=/opt/tomcat/bin/shutdown.sh
    User=tomcat
    Group=tomcat
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
  • 启用与启动:
    • sudo systemctl daemon-reload
    • sudo systemctl enable --now tomcat

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


若转载请注明出处: CentOS下Tomcat集群搭建步骤
本文地址: https://pptw.com/jishu/785599.html
怎样备份和恢复CentOS中的Tomcat 如何提高Apache2在CentOS上的稳定性

游客 回复需填写必要信息