Linux环境下Tomcat如何集群部署
导读:Linux环境下Tomcat集群部署 一 架构与准备 架构建议:前端使用Nginx/Apache HTTPD做负载均衡,后端部署2个及以上Tomcat实例组成集群,开启会话复制(DeltaManager),实现高可用与横向扩展。 环境与版...
Linux环境下Tomcat集群部署
一 架构与准备
- 架构建议:前端使用Nginx/Apache HTTPD做负载均衡,后端部署2个及以上Tomcat实例组成集群,开启会话复制(DeltaManager),实现高可用与横向扩展。
- 环境与版本:操作系统建议CentOS 7/8或Ubuntu 20.04+;JDK 1.8;Tomcat建议8.5/9.x版本一致。
- 基础准备:安装JDK并配置环境变量(如JAVA_HOME),下载解压Tomcat到不同目录(如**/opt/tomcat1**、/opt/tomcat2),保证各实例端口不冲突。
二 单节点Tomcat基础配置
- 目录与权限:解压Tomcat后,确保**/opt/tomcat/bin/*.sh**具备执行权限。
- 环境变量:在**/etc/profile或用户环境配置CATALINA_HOME/CATALINA_BASE**,便于多实例管理。
- 端口规划(示例两节点同机):
- Tomcat1:Server Port 8005,HTTP 8080,AJP 8009,Receiver 4000
- Tomcat2:Server Port 8006,HTTP 8081,AJP 8010,Receiver 4001
- 多机部署时,各实例的Receiver端口可相同;同机必须不同,避免端口占用。
三 集群会话复制配置
- 在server.xml的Engine或Host内加入Cluster配置(以Tomcat 8.5为例):
<
Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<
Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<
Channel className="org.apache.catalina.tribes.group.GroupChannel">
<
Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/>
<
Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6"/>
<
Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<
Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
<
/Sender>
<
Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<
Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
<
/Channel>
<
Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter="false"/>
<
ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
<
/Cluster>
- 在应用的META-INF/context.xml或全局conf/context.xml的Context上添加:
<
Context distributable="true">
- 关键说明:
- DeltaManager会将Session变更复制到所有节点,适合各节点应用一致的场景;如需差异化部署可考虑BackupManager。
- Membership使用组播地址228.0.0.4:45564发现节点;同网段可用,跨网段或云环境常因组播受限需改用单播/TCP或前置L4/L7负载均衡。
- Receiver address同机多实例请设为本机IP或明确绑定,避免“auto”引发识别问题;必要时将port设为不同值。
四 负载均衡部署
- Nginx示例(HTTP代理,位于**/etc/nginx/nginx.conf或/etc/nginx/conf.d/upstream.conf**):
upstream tomcat_cluster {
server 192.168.1.101:8080;
server 192.168.1.102:8080;
# 可选:ip_hash;
或 least_conn;
}
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;
}
}
- 使配置生效:执行nginx -t & & systemctl reload nginx。
- 说明:也可用Apache httpd + mod_proxy/mod_jk;若需会话粘滞可启用ip_hash或基于JSESSIONID的路由策略(注意粘滞与复制的取舍)。
五 启动验证与常见问题
- 启动与验证:依次启动各Tomcat与Nginx,访问应用并通过日志与监控确认:
- 查看catalina.out是否出现“Joining cluster/Member added”等信息;
- 访问应用,登录后获取JSESSIONID,在另一节点日志中确认session replication;
- 停掉一个节点,验证业务仍可用(会话保持或复制生效)。
- 常见问题与处理:
- 节点无法互相发现:检查组播是否被网络/云安全组限制;同机多实例确保Receiver port唯一;必要时改为单播通信或前置负载均衡。
- 会话未复制:确认应用distributable=true,且各节点部署内容一致(使用DeltaManager时);检查ReplicationValve是否生效。
- 启动日志提示“skipping state transfer. No members active in cluster group”:通常是Membership参数不一致或网络不通,核对address/port/frequency/dropTime并排查防火墙。
- 端口冲突:核对Server/HTTP/AJP/Receiver端口在各实例唯一。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux环境下Tomcat如何集群部署
本文地址: https://pptw.com/jishu/755397.html
