Linux Tomcat如何实现集群部署
Linux Tomcat 集群部署实操指南
一 架构与准备
- 架构选型:前端使用Nginx/HAProxy做负载均衡,后端部署2–N 个 Tomcat 实例组成集群,通过 Tomcat 内置的组播 TCP 集群实现会话复制,达到高可用与横向扩展的目的。
- 环境建议:
- 操作系统:CentOS 7/8、Debian 11/12 等稳定发行版。
- Java:JDK 8 或 JDK 11(与所用 Tomcat 版本匹配)。
- Tomcat:9.x 为主流稳定版本。
- 网络:同一二层网段/VPC,确保节点间互通;若跨机房,优先改用单播或外部会话存储。
- 基础安装示例(以 CentOS 为例):
- 安装 JDK:sudo yum install -y java-1.8.0-openjdk-devel
- 安装 Tomcat:
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz
tar xvf apache-tomcat-9.0.56.tar.gz -C /opt
sudo mv /opt/apache-tomcat-9.0.56 /opt/tomcat
以上为后续配置与负载均衡的前置条件。
二 配置 Tomcat 集群节点
- 多实例端口隔离(同一台机器演示两个实例):
- 修改 server.xml 中的 Server port(如:8005/8006)、Connector port(如:8080/8081)、AJP port(如:8009/8010)、jvmRoute(如:tomcat1/tomcat2)。
- 示例(仅展示关键差异):
- 实例1:Server port=8005;Connector port=8080;AJP=8009;jvmRoute=tomcat1
- 实例2:Server port=8006;Connector port=8081;AJP=8010;jvmRoute=tomcat2
- 启用内置集群(推荐在每个实例的 Engine 内加入 SimpleTcpCluster):
- 最小可用配置(放入 Engine 标签内):
- 常用完整配置(含会话管理与复制阀,便于开箱即用):
- 说明:
- 组播地址 228.0.0.4:45564 为示例,生产可自定义;同一集群内必须一致。
- Receiver port(如 4000)需在每个实例上唯一。
- 若使用 AJP 接入前端(httpd/mod_jk),请同步配置各实例的 AJP 端口与 jvmRoute。
- 最小可用配置(放入 Engine 标签内):
- 应用会话可分发:在应用的 WEB-INF/web.xml 中加入 ,并确保放入 session 的对象实现 Serializable。
三 配置负载均衡
- Nginx 示例(HTTP 反向代理,位于前端):
- 安装:sudo yum install -y nginx(或 apt 安装)
- 配置 /etc/nginx/nginx.conf(http 段内):
upstream tomcat_cluster {
server 192.168.1.11:8080;
server 192.168.1.12:8080;可按需开启:ip_hash; 或配置权重/健康检查
}
server {
listen 80;
server_name yourdomain.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;
proxy_set_header X-Forwarded-Proto $scheme;
}
} - 启动:sudo systemctl start nginx & & sudo systemctl enable nginx
- 可选方案:使用 HAProxy 或 Apache httpd + mod_jk/AJP 实现负载均衡与会话粘滞(Sticky Session)。
四 启动与验证
- 启动顺序:先启动所有 Tomcat 实例,再启动 Nginx/HAProxy。
- 基础验证:
- 访问前端地址,刷新多次,观察各 Tomcat 实例日志是否交替命中。
- 登录应用,写入会话数据(如用户标识),在另一节点继续操作,验证会话保持(DeltaManager 复制生效)。
- 查看 catalina.out 与 localhost_access_log,确认无端口冲突与集群加入异常。
- 常见问题速查:
- 端口冲突:检查 Server/Connector/AJP/Receiver 端口唯一性。
- 组播不通:确认云厂商安全组/物理交换机未屏蔽 IGMP/组播,或改用单播配置。
- 会话不复制:确认应用 web.xml 含 ,放入 session 的对象可序列化,且 ReplicationValve 已启用。
五 生产优化与安全建议
- 会话与一致性:读多写少场景可用 DeltaManager;跨地域/大规模建议引入 外部会话存储(如 Redis)替代内置复制。
- 部署方式:优先使用外部共享静态资源(Nginx 静态目录/CDN),减轻节点压力。
- 粘性与会话亲和:无状态优先;如需粘性,可在 Nginx 使用 ip_hash 或基于 Cookie 的会话保持。
- 监控与告警:采集 JVM/线程/GC/连接池 指标与访问日志,设置节点宕机与复制延迟告警。
- 启动与运行身份:建议使用非 root 专用用户运行 Tomcat,并配置 systemd 服务(示例模板见下文)。
- 网络与内核:开启 TCP keepalive,合理设置 ulimit -n,避免文件句柄不足。
附:systemd 服务模板(多实例示例)
-
文件:/etc/systemd/system/tomcat1.service
[Unit]
Description=Tomcat 9 servlet container
After=network.target[Service]
Type=forking
User=tomcat
Group=tomcat
Environment=“JAVA_HOME=/usr/lib/jvm/default-java”
Environment=“CATALINA_PID=/opt/tomcat1/temp/tomcat.pid”
Environment=“CATALINA_HOME=/opt/tomcat”
Environment=“CATALINA_BASE=/opt/tomcat1”
Environment=“CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC”
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh
Restart=always[Install]
WantedBy=multi-user.target -
将 CATALINA_BASE 指向各实例目录(如 /opt/tomcat1、/opt/tomcat2),分别启用服务:
sudo systemctl daemon-reload & & sudo systemctl enable --now tomcat1 tomcat2。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Tomcat如何实现集群部署
本文地址: https://pptw.com/jishu/767216.html
