Tomcat在Linux如何进行集群配置
导读:Linux 下 Tomcat 集群配置实操指南 一 架构与准备 架构选型:前端使用Nginx/HAProxy/Apache+mod_jk做负载均衡,后端部署2 个及以上 Tomcat 实例组成集群,实现负载均衡与会话复制。 基础环境:各节...
Linux 下 Tomcat 集群配置实操指南
一 架构与准备
- 架构选型:前端使用Nginx/HAProxy/Apache+mod_jk做负载均衡,后端部署2 个及以上 Tomcat 实例组成集群,实现负载均衡与会话复制。
- 基础环境:各节点安装相同版本的 JDK 与 Tomcat,建议 JDK 8+、Tomcat 8.5/9.x;统一目录结构,便于维护。
- 网络与防火墙:开放必要端口(如 8080/8009/8443 等),集群节点间网络互通;若跨主机部署,确保交换机/安全组未拦截多播或指定接收端口。
- 应用准备:将应用同时部署到所有节点;为支持会话复制,Web 应用需满足可分布式要求(见下文“会话复制要求”)。
二 配置 Tomcat 集群节点
- 修改 server.xml 启用集群:在每个实例的 conf/server.xml 的 或 内加入 SimpleTcpCluster 配置(二选一,推荐放在 Engine 级别,统一生效)。示例关键项:
- 使用 DeltaManager 进行全量节点会话复制;如需仅向备份节点复制可用 BackupManager(视规模与一致性需求而定)。
- 调整 Receiver 端口(各节点唯一),如 4000/4001;多播地址 228.0.0.4:45564 用于节点发现;可按需添加拦截器与阀。
- 同一台机器运行多实例时,确保 Server port、Connector port、AJP port、Receiver port 均不冲突。
- 示例片段(放到 内):
< Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8"> < 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=""/> < ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> < /Cluster> - 可选优化:为支持“会话粘滞”与路由恢复,给每个实例设置 jvmRoute(在 server.xml 的 Engine 上)如 jvmRoute=“tomcat1”,并在负载均衡器启用 sticky session。
三 配置负载均衡
- Nginx 示例(HTTP 模式,轮询/权重):
http { upstream tomcat_cluster { server 192.168.1.11:8080 weight=1; server 192.168.1.12:8080 weight=1; # 可添加更多节点 } 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_jk 示例(AJP 模式,支持会话粘滞):
- workers.properties:
worker.list=loadbalancer,status worker.tomcat1.port=8009 worker.tomcat1.host=192.168.1.11 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=1 worker.tomcat2.port=8009 worker.tomcat2.host=192.168.1.12 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1 worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=tomcat1,tomcat2 worker.loadbalancer.sticky_session=1 worker.status.type=status - httpd.conf 或 00-base.conf 片段:
LoadModule jk_module modules/mod_jk.so JkWorkersFile /path/to/workers.properties JkLogFile /var/log/httpd/mod_jk.log JkLogLevel info < VirtualHost *:80> ServerName yourdomain.com JkMount /* loadbalancer JkMount /jk-status status < /VirtualHost>
- workers.properties:
- 提示:Nginx 侧重 HTTP 反向代理与简单负载;Apache+mod_jk 通过 AJP 8009 与 Tomcat 集成,便于精细控制(如粘滞会话、节点状态监控)。
四 会话复制与应用要求
- 应用配置:在应用的 WEB-INF/web.xml 中加入 ,标记应用支持分布式会话;会话属性对象需实现 Serializable,避免复制失败。
- 复制阀与上下文:在 server.xml 的 内已加入 ReplicationValve;若使用 FarmWarDeployer 可做集群内 WAR 同步(可选)。
- 同一主机多实例:若出现节点无法加入集群或会话复制异常,可将 Receiver 的 address 从 auto 改为实例的真实 IP(如 192.168.x.x),并确保各实例 Receiver port 唯一。
- 验证步骤:部署测试应用(显示 session.getId() 与会话属性),访问前端地址,观察请求是否分发到不同节点且会话保持;查看 catalina.out 与各节点的集群日志,确认 MemberAdded/MemberDisappeared 与复制事件正常。
五 常见问题与排查
- 端口冲突:同一台机器运行多实例时,需分别调整 Server port、HTTP 8080、AJP 8009、Receiver port(如 4000/4001) 等,避免“Address already in use”。
- 多播受限:部分云厂商/网络环境限制 IGMP 多播,可改用 静态成员(StaticMembershipInterceptor) 或切换为 mod_jk/AJP 直连方式;必要时将 Receiver address 固定为内网 IP。
- 会话粘滞:使用 Nginx 可通过 ip_hash 或商业版 sticky 实现;使用 mod_jk 设置 sticky_session=1 更直观。
- 启动顺序与网络:确保所有节点在负载均衡器之后启动,且安全组/防火墙放行相关端口;首次加入集群若日志提示“No members active in cluster group”,检查多播连通性与 Receiver 配置。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Tomcat在Linux如何进行集群配置
本文地址: https://pptw.com/jishu/762308.html
