如何在centos上使用tomcat集群
导读:在 CentOS 上搭建 Tomcat 集群的完整步骤 一 架构与准备 架构建议:使用Nginx/HAProxy做反向代理与负载均衡,后端部署2–N 个 Tomcat 实例;如需消除单点,可在 Nginx 前再加一层 Keepalived...
在 CentOS 上搭建 Tomcat 集群的完整步骤
一 架构与准备
- 架构建议:使用Nginx/HAProxy做反向代理与负载均衡,后端部署2–N 个 Tomcat 实例;如需消除单点,可在 Nginx 前再加一层 Keepalived VIP。会话保持可用 Nginx 的 ip_hash 或 Tomcat 的 jvmRoute + 会话复制。
- 节点规划示例:
- 负载均衡:192.168.1.10(Nginx,备机 192.168.1.11)
- Tomcat:192.168.1.21:8080/8009、192.168.1.22:8080/8010
- 基础环境:安装同版本的 JDK 8/11、相同版本的 Tomcat 9,并准备要部署的 WAR 应用。
- 防火墙放行:对 Tomcat 开放 8080/8009/8010,对 Nginx 开放 80/443,集群节点间开放 45564/4000(UDP/TCP,用于组播与会话复制)。
- 时间同步:建议所有节点启用 NTP,避免会话复制与日志排查受影响。
二 安装与端口规划
- 安装 JDK(示例为 OpenJDK 8):
- sudo yum install -y java-1.8.0-openjdk-devel
- 安装 Tomcat(示例为 Tomcat 9):
- 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 & & sudo mv apache-tomcat-9.0.56 /opt/tomcat
- 多实例端口规划(两个节点示例):
| 节点 | Server 关闭端口 | HTTP 端口 | AJP 端口 | Receiver 端口 |
|---|---|---|---|---|
| node1 | 8005 | 8080 | 8009 | 4000 |
| node2 | 8105 | 8180 | 8109 | 4001 |
- 说明:同一台机器部署多实例时,上述端口需唯一;跨机部署时,仅需保证 AJP/Receiver 端口在对应主机可达即可。
三 配置 Tomcat 集群与会话复制
- 为 Engine 设置唯一 jvmRoute(用于粘性会话与路由标识):
- node1:
- node2:
- 在 server.xml 的 Engine 内启用集群(示例为 DeltaManager,适合中小规模):
- 将 取消注释或插入;
- 典型关键参数:
- Manager:org.apache.catalina.ha.session.DeltaManager(集群内广播复制,节点多时考虑 BackupManager)
- Membership(组播发现):address=“228.0.0.4” port=“45564”
- Receiver:port=“4000/4001”(各节点唯一),address=“auto”
- Valve:ReplicationValve、JvmRouteBinderValve
- Interceptor:TcpFailureDetector、MessageDispatchInterceptor
- 在应用的 WEB-INF/web.xml 中加入 ,使应用支持分布式会话。
- 可选:在 conf/context.xml 的 中加入 < Cluster …/> 以对全局应用生效。
四 配置负载均衡
- 方案 A:Nginx(推荐,简单稳定)
- 安装:sudo yum install -y nginx
- 配置示例(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/tomcat.conf):
- upstream tomcat_cluster {
server 192.168.1.21:8080;
server 192.168.1.22:8080;
}
server {
listen 80;
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;
}
}
- upstream tomcat_cluster {
- 如需会话粘性,可改为 ip_hash; 或保留 jvmRoute + DeltaManager 实现故障切换不丢会话。
- 方案 B:Apache HTTP Server + mod_jk(AJP)
- 安装:sudo yum install -y httpd mod_jk
- 配置 workers.properties:
- worker.list=controller
- worker.tomcat1.type=ajp13; worker.tomcat1.host=192.168.1.21; worker.tomcat1.port=8009; worker.tomcat1.lbfactor=1
- worker.tomcat2.type=ajp13; worker.tomcat2.host=192.168.1.22; worker.tomcat2.port=8010; worker.tomcat2.lbfactor=1
- worker.controller.type=lb; worker.controller.balanced_workers=tomcat1,tomcat2; worker.controller.sticky_session=1
- 在 httpd.conf 中加载模块与 Include workers.properties,并 JkMount 指定应用路径。
五 启动与验证及高可用扩展
- 启动与验证
- 启动 Tomcat:/opt/tomcat/bin/startup.sh(或 systemctl start tomcat,若已配置服务)
- 启动 Nginx:sudo systemctl start nginx
- 验证:
- 访问 Nginx(如 http://192.168.1.10/),刷新多次,观察是否分发到不同 node1/node2;
- 查看 Tomcat 日志(catalina.out、localhost_access_log)与 Nginx 日志(access.log、error.log);
- 登录应用,写入会话(如设置 session 属性),重启某节点后仍能保持登录,验证会话复制/粘性生效。
- 高可用扩展(可选)
- 在 Nginx 前部署 Keepalived VIP,实现负载均衡器自身的高可用:主备两台 Nginx 通过 VRRP 协议漂移 VIP,客户端始终访问 VIP,后端 Tomcat 集群不变。
- 常见问题排查
- 端口冲突:确认 server.xml 中 8005/8080/8009 与 8105/8180/8109 唯一;
- 组播不通:确认防火墙放行 45564/4000,云主机需开启组播/安全组规则;
- AJP 访问失败:核对 workers.properties 的 host/port,以及 Tomcat 的 AJP Connector 是否启用;
- 会话不共享:确认应用 WEB-INF/web.xml 含 ,且集群配置已生效。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在centos上使用tomcat集群
本文地址: https://pptw.com/jishu/781079.html
