Debian系统中Tomcat集群搭建步骤
小樊
38
2025-11-22 07:06:34
Debian系统Tomcat集群搭建步骤
一 架构与准备
- 架构建议:前端使用 Nginx 做反向代理与负载均衡,后端部署 2–N 个 Tomcat 实例;同一主机多实例需确保各实例端口不冲突;会话保持可采用 Tomcat内置集群会话复制 或 Redis集中会话存储。
- 准备环境:更新系统并安装 OpenJDK 11(或更高版本),创建专用系统用户 tomcat,下载并解压 Apache Tomcat 9 至 /opt。
- 示例命令:
- sudo apt update && sudo apt install -y openjdk-11-jdk
- sudo groupadd tomcat && sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
- wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.76/bin/apache-tomcat-9.0.76.tar.gz
- sudo tar -zxvf apache-tomcat-9.0.76.tar.gz -C /opt && sudo mv /opt/apache-tomcat-9.0.76 /opt/tomcat
二 部署多个Tomcat实例
- 方式A 多目录多实例(推荐):复制目录并分别修改端口与实例标识。
- 复制实例:
- sudo cp -r /opt/tomcat /opt/tomcat1
- sudo cp -r /opt/tomcat /opt/tomcat2
- 修改 server.xml 关键端口(示例):
- 实例1:Server port 8005;HTTP Connector 8081;AJP(如使用)8009;Receiver 端口(见下节)如 5000
- 实例2:Server port 8006;HTTP Connector 8082;AJP 8010;Receiver 端口 5001
- 为各实例设置唯一 jvmRoute(用于会话亲和/路由):
- 方式B 单安装多实例(同一主机):通过 CATALINA_BASE 指定不同实例目录。
- 示例:
- sudo /usr/share/tomcat9/bin/startup.sh -Dcatalina.base=/opt/tomcat2
- sudo /usr/share/tomcat9/bin/startup.sh -Dcatalina.base=/opt/tomcat3
- 以 systemd 管理实例(示例为 tomcat1.service,tomcat2 类似):
- [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/tomcat1.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
- 启用:sudo systemctl daemon-reload && sudo systemctl enable --now tomcat1
三 配置负载均衡器 Nginx
- 安装:sudo apt install -y nginx
- 配置示例(/etc/nginx/sites-available/tomcat 或 /etc/nginx/nginx.conf 的 http 段内):
- upstream tomcat_cluster {
server 192.168.1.101:8081;
server 192.168.1.102:8081;
可按需增加权重、备份等:server 192.168.1.103:8081 weight=2; server 192.168.1.104:8081 backup;
}
- 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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
- 启用与检查:
- sudo ln -s /etc/nginx/sites-available/tomcat /etc/nginx/sites-enabled/
- sudo nginx -t && sudo systemctl reload nginx
四 会话保持方案
- 方案A Tomcat内置集群会话复制(DeltaManager)
- 在各实例的 server.xml 的 或 内加入:
- 要点:各实例应用版本需一致;同一主机部署时注意 Receiver 端口唯一(见下一节);跨主机需保证网络互通与组播可达。
- 方案B Redis集中会话存储(更易横向扩展与跨机房)
- 安装 Redis:sudo apt install -y redis-server
- 在应用的 META-INF/context.xml 或全局 conf/context.xml 中加入:
- 说明:需将对应依赖(如 Jedis/Lettuce 及 Tomcat Redis Store 实现)放入 $CATALINA_HOME/lib,并确保网络与权限配置正确。
五 启动验证与常见问题
- 启动与验证:
- 启动 Tomcat:sudo systemctl start tomcat1 tomcat2(或各自目录的 startup.sh)
- 访问 Nginx:打开浏览器访问 http://your-domain/ 或 http://服务器IP/,刷新多次,结合日志与响应头确认请求在实例间分发。
- 日志与连通性:tail -f /opt/tomcat*/logs/catalina.out;在各实例间使用 curl 或 nc 测试业务端口连通性。
- 常见问题与要点:
- 端口冲突:同一主机多实例需确保 Server port、HTTP、AJP、Receiver 均唯一;跨主机部署时,Receiver 端口可相同但需网络可达。
- 组播与网络:内置集群依赖 组播(Multicast) 发现节点,确保交换机/安全组未屏蔽相关流量;云环境常需改用 静态成员/TCP 或采用 Redis 方案。
- 会话亲和:如使用 Nginx,可结合 ip_hash 或基于 Cookie 的会话保持;使用内置集群时设置 jvmRoute 有助于故障转移与路由一致性。
- JVM 与资源:为各实例设置合理堆内存(如 -Xms512M -Xmx1024M)与 GC 策略,避免互相争用。
- 监控与压测:使用 htop、netstat、JMeter 等进行资源与性能验证,必要时接入 Prometheus + Grafana 做可视化监控。