Linux部署Tomcat集群实现高可用需三要素协同:多节点、会话复制与前端负载均衡;须统一JDK/Tomcat版本、时间同步、端口隔离及jvmRoute标识;启用SimpleTcpCluster并配置<distributable/>;Nginx作负载均衡,结合健康检查与Keepalived提升可靠性。

Linux 上部署 Tomcat 集群实现高可用,核心在于**多节点 + 会话复制 + 前端负载均衡**三者协同。单靠多个 Tomcat 实例并不构成高可用,必须确保请求可自动分发、会话不丢失、故障时无缝切换。
基础环境统一配置
所有节点需保持高度一致,避免因环境差异引发集群通信失败或会话不同步:
- 安装相同版本 JDK(推荐 OpenJDK 11 或 17),通过
java -version和$JAVA_HOME确认; - 使用同一版本 Tomcat(如 9.0.56 或 10.1.x),解压至统一路径(如
/opt/tomcat); - 所有节点执行
ntpdate pool.ntp.org或启用chronyd同步时间,偏差超过 5 秒可能影响集群心跳判定; - 关闭防火墙或放行关键端口:应用端口(如 8080/8081)、AJP 端口(如 8009/8010)、集群通信端口(默认 receiver port=4000,组播 port=45564)。
Tomcat 多实例端口与集群标识隔离
在同一台物理机或虚拟机部署多个 Tomcat 实例时,必须区分各组件端口并设置唯一集群身份:
- 修改
conf/server.xml中的<Server port="8005">(关闭端口),如实例1用 8005,实例2用 8006; - 调整 HTTP Connector 端口:
<Connector port="8080">→ 实例1用 8080,实例2用 8081; - 设置 AJP 端口(供 Nginx/Haproxy 反向代理):
<Connector port="8009" protocol="AJP/1.3">→ 实例1用 8009,实例2用 8010; - 在
<Engine>标签中添加唯一jvmRoute,如<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">,该值后续需与负载均衡器配置对齐。
启用内置 TCP 集群与会话复制
Tomcat 自带 SimpleTcpCluster,无需额外中间件即可实现 Session 跨节点同步,适用于局域网内稳定环境:
- 在每个实例的
conf/server.xml的<Engine>内插入完整<Cluster>块; - 组播地址(
<Membership>)需全集群一致,如address="228.0.0.4"、port="45564"; -
<Receiver>的port="4000"必须各节点不同(若单机多实例),或设为auto让 Tomcat 自动分配; - 推荐使用
DeltaManager(默认)处理增量 Session 复制,比BackupManager更轻量; - 务必在 Web 应用的
WEB-INF/web.xml中添加<distributable/>标签,否则 Session 不参与复制。
前端负载均衡与健康检查
Nginx 是最常用且轻量的选择,负责流量分发、节点探测和故障摘除:
- 配置 upstream 指向各 Tomcat AJP 或 HTTP 地址,并绑定对应
jvmRoute值,例如:upstream backend { server 192.168.1.10:8009 weight=1 max_fails=3 fail_timeout=30s; server 192.168.1.11:8009 weight=1 max_fails=3 fail_timeout=30s; } - 启用
ip_hash可保障同一客户端始终路由到同一节点(适合未开启会话复制的场景),但开启会话复制后建议用least_conn或默认轮询; - 添加健康检查路径(如
/health),并在 Tomcat 应用中返回 HTTP 200,Nginx 通过health_check指令自动剔除不可用节点; - 若需更高可靠性,可在 Nginx 层再叠加 Keepalived 实现双机热备,避免单点故障。


















