Linux上Tomcat集群如何搭建
导读:Linux上Tomcat集群搭建实操指南 一 架构与准备 架构选型:前端使用Nginx/Apache HTTP Server做负载均衡,后端部署2个及以上Tomcat实例组成集群,实现流量分发与高可用。 节点规划:建议准备至少2台Linu...
Linux上Tomcat集群搭建实操指南
一 架构与准备
- 架构选型:前端使用Nginx/Apache HTTP Server做负载均衡,后端部署2个及以上Tomcat实例组成集群,实现流量分发与高可用。
- 节点规划:建议准备至少2台Linux服务器(也可单机多实例用于测试),安装相同版本的JDK与Tomcat,保证目录结构与版本一致,便于维护。
- 基础检查:确认防火墙/安全组已放行对应端口(如HTTP 80/8080、AJP 8009、Tomcat集群通信端口等),时间同步(NTP),主机名可解析。
二 部署Tomcat集群节点
- 安装JDK与Tomcat(示例为CentOS系)
- 安装JDK:sudo yum install -y java-1.8.0-openjdk-devel
- 安装Tomcat:下载并解压至/opt,如:apache-tomcat-9.0.xx.tar.gz → /opt/tomcat
- 单机多实例端口规划(示例)
- 实例1:Server 8005,HTTP 8080,AJP 8009,Receiver 4000
- 实例2:Server 8006,HTTP 8081,AJP 8010,Receiver 4001
- 修改server.xml要点
- 为各实例设置唯一jvmRoute(用于粘性会话与识别):< Engine … jvmRoute=“node1”>
- 打开集群配置(置于内):< Cluster className=“org.apache.catalina.ha.tcp.SimpleTcpCluster” … />
- 同一台机器部署多实例时,确保各实例的Server/Connector/AJP/Receiver端口均不冲突。
三 配置会话复制与通信参数
- 在Tomcat的中常用关键组件与作用
- Manager:会话管理方式
- DeltaManager:会话变更广播到所有节点,适合各节点应用一致的场景(默认)。
- BackupManager:会话集中备份到某节点,节点应用可不一致。
- Channel:节点间通信通道
- Membership:基于组播发现成员,常用默认地址228.0.0.4:45564,frequency 500ms,dropTime 3000ms。
- Receiver:接收消息,单机多实例需设置不同端口(如4000/4001),跨机可用auto或本机IP。
- Sender/Transport:发送器与传输方式,常用nio.PooledParallelSender。
- Interceptor:常用TcpFailureDetector、MessageDispatch15Interceptor。
- Valve:ReplicationValve(触发复制)、JvmRouteBinderValve(会话粘滞绑定)。
- 发送选项channelSendOptions:常用8(异步),如需确认可设为10(异步+ACK)。
- Manager:会话管理方式
- 示例最小集群片段(置于内)
- 应用侧要求
- 在应用的WEB-INF/web.xml中加入:< distributable/>
- 存入Session的对象需实现Serializable接口。
四 配置负载均衡
- 方案A Nginx(HTTP反向代理与负载均衡)
- 安装:sudo yum install -y nginx
- 配置示例(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/tomcat.conf)
- 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; } }
- 方案B Apache HTTP Server + mod_jk(AJP)
- 启用模块并加载mod_jk.so,配置workers.properties与JkMount规则,示例:
- worker.list=controller
- 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=8010
- worker.controller.type=lb; worker.controller.balance_workers=tomcat1,tomcat2; worker.controller.sticky_session=1
- httpd.conf中:LoadModule jk_module modules/mod_jk.so;JkWorkersFile conf/workers.properties;JkMount /* controller
- 启用模块并加载mod_jk.so,配置workers.properties与JkMount规则,示例:
- 启动与验证
- 启动各Tomcat与负载均衡器,访问前端地址,观察请求是否分发到不同节点;会话保持可用(粘性或复制生效)。
五 验证与常见问题
- 验证步骤
- 健康检查:访问各节点 http://IP:8080/manager/status 或应用健康检查接口,确认实例存活。
- 会话保持:登录应用,记录JSESSIONID,刷新或切换节点后检查会话是否持续可用(粘性会话或会话复制生效)。
- 故障转移:停止某Tomcat实例,确认业务仍可用且请求自动切换到其他节点。
- 常见问题与排查
- 端口冲突:单机多实例需确保Server/Connector/AJP/Receiver端口唯一。
- 组播不通:确认网络与防火墙允许228.0.0.4:45564通信;云环境或跨网段时可改用静态成员/TCP单播替代组播。
- 会话不复制:检查应用是否包含**、对象是否可序列化**,以及ReplicationValve是否生效。
- 粘性会话异常:使用mod_jk时核对jvmRoute与workers.properties中节点名一致,且sticky_session=1。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux上Tomcat集群如何搭建
本文地址: https://pptw.com/jishu/787276.html
