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**):
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; } }修改后执行nginx -t校验并重载:nginx -s reload。
- Apache HTTP Server + mod_proxy_balancer示例:
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/如需会话粘滞可加stickysession=JSESSIONID。
五 启动验证与常见问题
- 启动与验证:按顺序启动各Tomcat实例与负载均衡器;通过负载均衡地址访问应用,登录后操作触发session.setAttribute,随后在Manager应用的**/manager/status或应用日志中查看JSESSIONID**是否在节点间保持一致(复制成功时,其他节点日志可见相同session)。
- 常见问题与处理:
- 端口冲突:单机多实例需确保Server/Connector/AJP端口唯一;必要时调整Receiver port。
- 组播不通:确认同一网段、45564端口未被拦截;云环境需放通安全组与系统防火墙。
- 节点未加入集群:检查Membership地址/端口一致;若仍异常,可将Receiver的address由auto改为本机IP以规避多网卡/路由问题。
- 复制效率低或可靠性不足:按业务选择channelsendoptions=6/10(异步+确认)或4(同步);多应用混布时评估BackupManager。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1455615.html