温馨提示×

debian tomcat如何配集群

小樊
40
2026-10-12 07:34:22
栏目: 智能运维

在 Debian 上配置 Tomcat 集群,通常包括三部分内容:

  1. Tomcat 实例配置(多节点)
  2. Session 复制(集群会话共享)
  3. 前端负载均衡(如 Nginx / Apache)

下面给你一个实战可落地的 Debian + Tomcat 集群方案。


一、环境准备(示例)

  • OS:Debian 11 / 12
  • Tomcat:9.x(10/11 类似)
  • 节点:
    • node1:192.168.1.11:8080
    • node2:192.168.1.12:8080
  • 负载均衡:Nginx(192.168.1.10:80)

二、安装 Tomcat(每个节点)

sudo apt update
sudo apt install tomcat9 -y

或手动下载官方二进制包(推荐生产环境):

wget https://archive.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz
tar -xzf apache-tomcat-9.0.85.tar.gz -C /opt

三、Tomcat 集群核心配置(Session 复制)

1️⃣ 开启集群(server.xml)

编辑 conf/server.xml,在 <Engine> 内添加:

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
    <Manager className="org.apache.catalina.ha.session.DeltaManager"
             expireSessionsOnShutdown="false"
             notifyListenersOnReplication="true"/>

    <Channel className="org.apache.catalina.tribes.group.GroupChannel">
        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
        </Sender>
        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="auto"
                  port="4000"
                  autoBind="100"
                  selectorTimeout="5000"/>
        <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=".*\.gif|.*\.js|.*\.css"/>

    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
              tempDir="/tmp/war-temp/"
              deployDir="/opt/tomcat/webapps/"
              watchDir="/tmp/war-listen/"
              watchEnabled="false"/>
</Cluster>

⚠️ 注意:

  • 每个节点 port="4000" 可不同
  • 防火墙需放行 4000

2️⃣ Web 应用开启分布式

在 WEB-INF/web.xml 中加:

<distributable/>

四、前端负载均衡(Nginx)

安装 Nginx

sudo apt install nginx -y

配置 upstream

upstream tomcat_cluster {
    ip_hash;
    server 192.168.1.11:8080;
    server 192.168.1.12:8080;
}

server {
    listen 80;
    server_name example.com;

    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;
    }
}

✅ ip_hash 可避免频繁跳 Session
(若已配置 Session 复制,也可不用)


五、防火墙 & 端口

# Tomcat
ufw allow 8080
# 集群通信
ufw allow 4000
# Nginx
ufw allow 80

六、验证集群

  1. 两个节点启动 Tomcat
  2. 访问 Nginx
  3. 登录后停掉一个 Tomcat
  4. 会话不丢失 ✅

查看日志:

tail -f logs/catalina.out

七、常见方案对比

方案 说明
DeltaManager 适合小规模集群(<10节点)
BackupManager 大规模集群推荐
Redis Session 跨数据中心、云原生
Nginx ip_hash 简单但不高可用

八、进阶建议

  • 生产环境用 Redis + Tomcat Session Manager
  • 使用 systemd 管理 Tomcat
  • 多网卡注意 address="auto"

如果你愿意,我可以:

  • 给你 Redis Session 集群配置
  • 给你 systemd 多实例 Tomcat 方案
  • 按 Docker / K8s 方式配置

你现在是 测试环境还是生产环境?

0 踩