在 Debian 上配置 Tomcat 集群,通常包括三部分内容:
下面给你一个实战可落地的 Debian + 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
编辑 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在 WEB-INF/web.xml 中加:
<distributable/>
sudo apt install nginx -y
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
查看日志:
tail -f logs/catalina.out
| 方案 | 说明 |
|---|---|
| DeltaManager | 适合小规模集群(<10节点) |
| BackupManager | 大规模集群推荐 |
| Redis Session | 跨数据中心、云原生 |
| Nginx ip_hash | 简单但不高可用 |
address="auto"如果你愿意,我可以:
你现在是 测试环境还是生产环境?