在 Java 生态中,Tomcat 集群通常指多台 Tomcat 实例协同工作,用于负载均衡 + 高可用 + 会话共享。实现方式一般分三层:负载均衡层、Tomcat 集群层、Session 共享方案。
下面从 架构方案 → 具体实现步骤 → 常见方案对比 系统说明。
客户端
|
Nginx / HAProxy(负载均衡)
|
+-----------+-----------+
| | |
Tomcat1 Tomcat2 Tomcat3
(集群节点)
目标:
server.xml在 <Engine> 或 <Host> 下开启 Cluster:
<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"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="4000"
autoBind="100"
selectorTimeout="5000"/>
</Channel>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"/>
</Cluster>
web.xml 中:
<distributable/>
✅ 优点:
❌ 缺点:
upstream tomcat_cluster {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
server 192.168.1.103:8080;
}
server {
listen 80;
location / {
proxy_pass http://tomcat_cluster;
}
}
upstream tomcat_cluster {
ip_hash;
server ...
}
❌ 扩容/宕机问题明显
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
spring:
session:
store-type: redis
redis:
host: 127.0.0.1
port: 6379
✅ 优点:
使用:
tomcat-redis-session-managerRedisson Tomcat Session配置 context.xml:
<Manager className="org.redisson.tomcat.RedissonSessionManager"/>
✅ 最适合微服务架构
✅ 生产环境推荐组合:
| 方案 | 适用场景 |
|---|---|
| Tomcat Session 复制 | 小规模集群 |
| Nginx + Redis | 中大型系统 |
| JWT | 微服务 / 前后端分离 |
如果你愿意,我可以:
你现在是 学习 / 面试 / 生产部署 哪种场景?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。