Linux环境下Tomcat如何进行集群部署
导读:Linux环境下Tomcat集群部署指南 一 架构与准备 架构建议:前端使用Nginx或Apache HTTP Server做负载均衡,后端部署2个及以上Tomcat节点组成集群,实现会话复制与故障转移。同一台物理机可部署多实例,但需避免...
Linux环境下Tomcat集群部署指南
一 架构与准备
- 架构建议:前端使用Nginx或Apache HTTP Server做负载均衡,后端部署2个及以上Tomcat节点组成集群,实现会话复制与故障转移。同一台物理机可部署多实例,但需避免端口冲突并合理规划网络与防火墙策略。
- 基础环境:选择稳定的Linux发行版(如CentOS 7/8或Ubuntu 20.04+),安装JDK 1.8+,各节点Tomcat版本保持一致,应用包一致,便于会话复制与维护。
- 网络与防火墙:开放负载均衡器与Tomcat节点的必要端口(如8080/8005/8009或自定义业务端口),组播通信端口(默认45564)需在同一二层网络可达;云服务器需同时配置安全组与系统防火墙。
二 单机多实例端口规划与配置
- 目录与变量:解压两份Tomcat到不同目录(如**/opt/tomcat1**、/opt/tomcat2),在**/etc/profile或各实例的bin/catalina.sh中设置不同的CATALINA_BASE/CATALINA_HOME**,避免环境变量互相覆盖。
- 端口规划:保持一个实例使用默认端口,另一个实例将以下端口在原值基础上**+1000**(示例):
- Server关闭端口:8005 → 9005
- HTTP连接器端口:8080 → 9080
- AJP连接器端口:8009 → 9009
- 关键配置:在conf/server.xml的**上统一添加URIEncoding=“UTF-8”,避免中文乱码;分别启动两个实例验证访问(如http://IP:8080与http://IP:9080**)。
三 集群会话复制配置
- 启用集群:在每个实例的conf/server.xml的**或内加入;为需要会话复制的增加属性distributable=“true”**。
- 典型最小配置(示例为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> - 参数要点:
- Membership使用组播地址228.0.0.4:45564进行节点发现,同一集群必须使用相同地址与端口。
- Receiver port(如4000)在同一台机器部署多实例时需配置为不同端口。
- channelsendoptions控制复制模式:默认8为异步,更高效的6为异步且带确认;4为同步。
- Manager可选DeltaManager(默认,all-to-all复制)或BackupManager(仅向部署了当前应用的节点复制,适合多应用混布)。
四 负载均衡部署
- Nginx示例(HTTP代理,位于**/etc/nginx/nginx.conf或/etc/nginx/conf.d/upstream.conf**):
修改后执行nginx -t校验并重载:nginx -s reload。upstream tomcat_cluster { server 192.168.1.101:8080; server 192.168.1.102:8080; # 可选:ip_hash; 实现会话粘滞(不建议依赖,优先会话复制) } 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; } } - Apache HTTP Server + mod_proxy_balancer示例:
如需会话粘滞可加stickysession=JSESSIONID。ProxyRequests Off < Proxy balancer://mycluster> BalancerMember http://10.1.2.161:8080 BalancerMember http://10.1.2.193:8080 < /Proxy> ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/
五 启动验证与常见问题
- 启动与验证:按顺序启动各Tomcat实例与负载均衡器;通过负载均衡地址访问应用,登录后操作触发session.setAttribute,随后在Manager应用的**/manager/status或应用日志中查看JSESSIONID**是否在节点间保持一致(复制成功时,其他节点日志可见相同session)。
- 常见问题与处理:
- 端口冲突:单机多实例需确保Server/Connector/AJP端口唯一;必要时调整Receiver port。
- 组播不通:确认同一网段、45564端口未被拦截;云环境需放通安全组与系统防火墙。
- 节点未加入集群:检查Membership地址/端口一致;若仍异常,可将Receiver的address由auto改为本机IP以规避多网卡/路由问题。
- 复制效率低或可靠性不足:按业务选择channelsendoptions=6/10(异步+确认)或4(同步);多应用混布时评估BackupManager。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux环境下Tomcat如何进行集群部署
本文地址: https://pptw.com/jishu/753051.html
