温馨提示×

Linux环境下Tomcat集群搭建步骤

小樊
42
2025-11-15 06:03:40
栏目: 智能运维

Linux环境下Tomcat集群搭建步骤

一 环境准备与安装

  • 准备至少2台Linux服务器(同一内网),安装相同版本的JDK 1.8Tomcat 8.5/9.x
  • 安装JDK(以CentOS为例):sudo yum install -y java-1.8.0-openjdk-devel
  • 下载并解压Tomcat到/opt(两台保持一致):
    wget https://archive.apache.org/dist/tomcat/tomcat-9.0.56/bin/apache-tomcat-9.0.56.tar.gz
    tar xvf apache-tomcat-9.0.56.tar.gz -C /opt
    mv /opt/apache-tomcat-9.0.56 /opt/tomcat
  • 建议设置环境变量(/etc/profile):
    export CATALINA_HOME=/opt/tomcat
    export PATH=$CATALINA_HOME/bin:$PATH
    source /etc/profile
  • 如在同一台机器部署多实例,复制多份Tomcat目录并准备不同端口(示例:tomcat01/02/03)。

二 多实例端口规划与调整

  • 避免端口冲突,修改每个实例的server.xml关键端口(示例为三实例,仅列需修改项):
实例 Server关闭端口 HTTP Connector AJP Connector 集群Receiver端口
tomcat01 8005 8080 8009 4000
tomcat02 8006 8081 8010 4001
tomcat03 8007 8082 8011 4002
  • 示例(server.xml片段):








  • 说明:同一主机部署多实例时,除Server、Connector、AJP外,集群Receiver端口也需唯一(见下一节)。跨主机部署时,HTTP/AJP端口可保持一致,但各实例Server端口必须唯一。

三 配置Tomcat集群会话复制

  • 方式A 快速内置集群(适合同网段、默认组播)
    在每个实例的server.xml的内加入:

    在应用的WEB-INF/web.xml中加入:
    提示:该方式使用默认组播,适合快速验证。

  • 方式B 显式配置集群参数(可控性与可观测性更好)
    内替换为如下配置(注意Receiver端口按上表唯一):
















    关键点:

    • 组播地址/端口(228.0.0.4:45564)在同一集群内必须一致;
    • 每个实例的Receiver端口(如4000/4001/4002)必须唯一;
    • 如部署在云主机/VPC,确认安全组与网络策略允许UDP/TCP 45564与对应Receiver端口通信;
    • 为启用会话粘滞(Sticky Session),在Engine上设置jvmRoute(如node1/node2/node3),并在负载均衡器开启会话粘滞。

四 配置负载均衡

  • Nginx示例(/etc/nginx/nginx.conf):
    http {
    upstream tomcat_cluster {
    server 192.168.1.11:8080 weight=1;
    server 192.168.1.12:8080 weight=1;
    # 如需会话粘滞: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;
    }
    }
    }
  • Apache HTTP Server + mod_jk示例:
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile conf/workers.properties
    JkMount /* loadbalancer
    workers.properties:
    worker.list=loadbalancer
    worker.worker1.type=ajp13
    worker.worker1.host=node1
    worker.worker1.port=8009
    worker.worker2.type=ajp13
    worker.worker2.host=node2
    worker.worker2.port=8009
    worker.loadbalancer.type=lb
    worker.loadbalancer.balance_workers=worker1,worker2
    worker.loadbalancer.sticky_session=1
  • 提示:使用AJP时,各实例AJP端口(如8009/8010/8011)需与workers.properties一致。

五 启动与验证

  • 启动服务:
    • Tomcat:/opt/tomcat/bin/startup.sh(各实例分别启动)
    • Nginx:systemctl start nginx(或nginx)
  • 防火墙放行(以firewalld为例):
    firewall-cmd --zone=public --add-port=80/tcp --permanent
    firewall-cmd --zone=public --add-port=8080-8082/tcp --permanent
    firewall-cmd --zone=public --add-port=45564/udp --permanent
    firewall-cmd --zone=public --add-port=4000-4002/tcp --permanent
    firewall-cmd --reload
  • 验证步骤:
    • 访问Nginx地址,确认多实例轮询;
    • 登录应用,记录JSESSIONID,刷新或切换节点,验证会话是否一致(粘滞或复制生效);
    • 查看Tomcat状态页:http://节点IP:8080/manager/status(需配置manager用户);
    • 查看catalina.out与集群日志,确认无组播/复制错误。

六 常见问题与优化建议

  • 组播不通:云环境常禁用或限制IGMP/UDP 45564,可改用静态成员或外部会话存储(如Redis/Memcached)实现会话共享;
  • 端口冲突:同一主机多实例务必保证Server/Connector/AJP/Receiver端口唯一;
  • 应用需支持分布式会话:确保WEB-INF/web.xml包含****;
  • 性能与高可用:根据并发调整线程池/连接器参数,必要时引入监控与告警(如Prometheus + Grafana)。

0