温馨提示×

Debian怎么配Tomcat集群

小樊
47
2026-10-03 12:40:48
栏目: 智能运维

在 Debian 上配置 Tomcat 集群,通常目标有两个:

  1. 负载均衡(用 Nginx / Apache 做前端)
  2. Session 共享(保证用户请求在节点间切换不丢登录状态)

下面给你一套生产可用的标准做法。


一、环境规划(示例)

角色 主机 说明
负载均衡 192.168.1.10 Nginx
Tomcat节点1 192.168.1.11 Tomcat 9
Tomcat节点2 192.168.1.12 Tomcat 9

所有节点 Debian 11/12 均可


二、安装 Tomcat(每个节点)

apt update
apt install -y openjdk-17-jdk

useradd -r -m -d /opt/tomcat tomcat
cd /opt
wget https://dlcdn.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
mv apache-tomcat-9.0.85 tomcat
chown -R tomcat:tomcat /opt/tomcat

systemd 示例:

vim /etc/systemd/system/tomcat.service
[Unit]
Description=Tomcat
After=network.target

[Service]
Type=forking
User=tomcat
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable --now tomcat

三、Tomcat 集群配置(关键)

1️⃣ 修改 server.xml

编辑:

vim /opt/tomcat/conf/server.xml

(1)Engine 加 jvmRoute

<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">

node2 就写 jvmRoute="node2"

(2)启用 Cluster(默认已注释)

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>

(3)确保 Receiver 自动端口

<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
          address="auto"
          port="4000"
          autoBind="100"
          selectorTimeout="5000"
          maxThreads="6"/>

2️⃣ Web 应用开启分布式

在应用的 WEB-INF/web.xml 加:

<distributable/>

四、Session 共享方案(选一种)

✅ 方案 A:Tomcat 自带 Session 复制(简单)

适合 小集群(≤3 节点)

优点:

  • 零外部依赖

缺点:

  • 节点多时性能差

已在上一步完成。


✅ 方案 B:Redis 集中 Session(推荐)

适合 中大型集群

apt install -y redis-server

Tomcat 使用:

tomcat-redis-session-manager

(Tomat 9 推荐:https://github.com/magro/redis-session-manager)


五、Nginx 负载均衡(前端)

apt install -y nginx
vim /etc/nginx/conf.d/tomcat.conf
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;
    }
}
nginx -t
systemctl reload nginx

六、验证集群

  1. 访问 http://example.com
  2. 停掉 node1
  3. 刷新页面不退出登录 ✅

七、常见问题

❌ Session 丢失

  • 没加 <distributable/>
  • jvmRoute 不一致
  • 时间不同步(ntpdate)

❌ 节点不通信

ufw allow 4000

八、推荐生产架构

Nginx
 ├── Tomcat1
 ├── Tomcat2
 └── Tomcat3
       ↘ Redis(Session)

如果你愿意,我可以:

  • 给你 Docker 版 Tomcat 集群
  • 或 Kubernetes + Tomcat
  • 或 Apache + mod_jk

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

0 踩