CentOS中Tomcat集群搭建方法
导读:CentOS 上搭建 Tomcat 集群 一 架构与准备 架构建议:前端使用 Nginx/Apache HTTP Server 做反向代理或负载均衡,后端部署 2 个及以上 Tomcat 实例;会话保持可用 IP Hash/会话粘滞,或启...
CentOS 上搭建 Tomcat 集群
一 架构与准备
- 架构建议:前端使用 Nginx/Apache HTTP Server 做反向代理或负载均衡,后端部署 2 个及以上 Tomcat 实例;会话保持可用 IP Hash/会话粘滞,或启用 Tomcat 内置集群会话复制,亦可使用 Redis/Memcached 集中式会话存储。
- 基础环境:所有节点安装相同版本的 JDK 8+,并安装相同版本的 Tomcat 9(示例命令:
sudo yum install java-1.8.0-openjdk-devel;Tomcat 9 可从官方归档下载解压至 /opt/tomcat)。如使用 mod_jk,需安装 mod_jk 模块。以上为后续配置的前置条件。
二 单节点 Tomcat 基础配置
- 目录与端口:解压 Tomcat 至 /opt/tomcat;同一台机器部署多实例时,需确保各实例的 Server port(默认 8005)、Connector 端口(默认 8080)、以及集群 Receiver 端口(默认 4000) 不冲突。
- 环境变量(可选):在 /etc/profile 中设置
CATALINA_HOME并source /etc/profile,便于多实例管理。 - 启动与验证:执行 /opt/tomcat/bin/startup.sh,访问 http://服务器IP:8080 出现 Tomcat 欢迎页即正常。
三 集群会话复制配置
- 启用内置集群:在每个实例的 $CATALINA_HOME/conf/server.xml 的 内加入
< Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>;如需在 级别控制,也可在 $CATALINA_HOME/conf/context.xml 中加入相同配置。 - 典型集群通道参数(放在
< Cluster>内):- Manager:常用 DeltaManager(会话变更广播到所有节点,适合节点应用一致);也可选 BackupManager(会话备份到某节点)。
- Channel:
- Membership:组播发现,
address="228.0.0.4" port="45564" frequency="500" dropTime="3000" - Receiver:接收消息,
address="auto" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6" - Sender/Transport:推荐 nio.PooledParallelSender
- Interceptor:建议加入 TcpFailureDetector、MessageDispatchInterceptor
- Membership:组播发现,
- Valve:加入 ReplicationValve、JvmRouteBinderValve
- Listener:加入 ClusterSessionListener
- 应用标识:在应用的 WEB-INF/web.xml 中加入
< distributable/>,使会话可复制。 - 同一主机多实例:除 8080 外,将各实例的 Receiver port 设为不同值(如 4000/4001),避免端口冲突。
四 负载均衡配置
- Nginx 示例(HTTP 反向代理):
- 安装:
sudo yum install nginx - 配置片段:
http { upstream tomcat_cluster { server 192.168.1.11:8080; server 192.168.1.12: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; } } }
- 安装:
- Apache HTTP Server + mod_jk 示例:
- 启用模块并配置 workers.properties:
worker.list=loadbalancer worker.tomcat1.type=ajp13 worker.tomcat1.host=192.168.1.11 worker.tomcat1.port=8009 worker.tomcat2.type=ajp13 worker.tomcat2.host=192.168.1.12 worker.tomcat2.port=8009 worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=tomcat1,tomcat2 worker.loadbalancer.sticky_session=1 - httpd 配置:
LoadModule jk_module modules/mod_jk.so JkWorkersFile conf/workers.properties JkMount /* loadbalancer
- 启用模块并配置 workers.properties:
- 会话保持:若未启用会话复制,建议在负载均衡器开启 IP Hash 或 sticky_session;若启用复制,可关闭粘滞以均衡更充分。
五 启动与验证及常见问题
- 启动顺序:先启动所有 Tomcat 实例,再启动 Nginx/Apache;设置开机自启(如
systemctl enable tomcat与systemctl enable nginx)。 - 验证要点:
- 访问 http://负载均衡IP/ 多次刷新,观察是否分发到不同后端;
- 登录应用后查看 JSESSIONID,在节点间切换是否保持登录(粘滞或复制生效);
- 查看 catalina.out 与各实例 logs/localhost_access_log 是否有复制或连接异常;
- 防火墙/安全组放行 8080/80 及集群通信端口(如 45564/4000)。
- 常见问题与优化:
- 端口冲突:同一主机多实例需确保 Server port/Connector/Receiver 唯一;
- 组播不通:跨主机需保证网络支持 IGMP,或改用 静态成员/TCP 集群;
- 复制延迟/丢包:调整 channelSendOptions(如 8 异步 或 10 异步+ACK)、增大 Receiver maxThreads;
- 大数据会话:避免将大对象放入 Session,必要时采用 外部会话存储(Redis/Memcached);
- 监控与调优:结合 Prometheus + Grafana 监控线程池、连接数、GC 等,按指标优化 maxThreads、acceptCount、JVM 堆 等参数。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS中Tomcat集群搭建方法
本文地址: https://pptw.com/jishu/759239.html
