Linux Tomcat如何实现高可用性
导读:Linux Tomcat高可用落地方案 一、总体架构与组件 前端入口层:使用Nginx/HAProxy做反向代理与负载均衡,统一暴露服务端口,隐藏后端实例。 会话层:开启Tomcat内置集群会话复制(DeltaManager),保证节点宕...
Linux Tomcat高可用落地方案
一、总体架构与组件
- 前端入口层:使用Nginx/HAProxy做反向代理与负载均衡,统一暴露服务端口,隐藏后端实例。
- 会话层:开启Tomcat内置集群会话复制(DeltaManager),保证节点宕机不丢会话;对跨机房/大规模场景可改用Redis集中会话。
- 数据层:业务数据使用数据库主从/集群或分布式缓存,避免单点。
- 入口高可用:在负载均衡器前再加一层Keepalived VIP,消除负载均衡器单点。
- 监控与告警:接入Prometheus + Grafana等,持续观测吞吐、延迟、错误率与JVM指标。
二、部署步骤
- 准备环境
- 安装JDK 8+,在多个节点部署相同版本的 Tomcat;建议每个实例使用独立目录与端口。
- 示例:下载解压 Tomcat 9 至**/opt/tomcat**,创建专用系统用户运行。
- 配置 Tomcat 集群与会话复制
- 在server.xml的Engine内加入:
- 集群:
< Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> - 节点标识:为 Engine 设置唯一jvmRoute(如 server1、server2),便于粘性会话与排障。
- 集群:
- 在context.xml(或应用 context 片段)启用会话复制:
- 管理器:
< Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/> - 监听器:
< ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
- 管理器:
- 在应用的web.xml中加入:
< distributable/>。
- 在server.xml的Engine内加入:
- 配置负载均衡(Nginx 示例)
- 安装 Nginx,配置 upstream 与反向代理:
- upstream:
server 192.168.1.11:8080; server 192.168.1.12:8080; - location:设置proxy_pass与头部转发(Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto)。
- upstream:
- 安装 Nginx,配置 upstream 与反向代理:
- 配置入口高可用(Keepalived VIP)
- 两台负载均衡器安装 Keepalived,配置VRRP与virtual_ipaddress(如 192.168.1.100),实现主备自动切换。
- 启动与验证
- 启动 Tomcat 集群与 Nginx/Keepalived;访问 VIP 验证分发与会话复制。
三、关键配置示例
- Tomcat 内置集群片段(server.xml,Engine 内)
< Engine name="Catalina" defaultHost="localhost" jvmRoute="server1"> < 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.TcpPingInterceptor"/> < Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/> < Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/> < /Channel> < Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/> < ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> < /Cluster> < /Engine> - Nginx 负载均衡片段(/etc/nginx/conf.d/tomcat.conf)
upstream tomcat_cluster { server 192.168.1.11:8080 max_fails=3 fail_timeout=30s; server 192.168.1.12:8080 max_fails=3 fail_timeout=30s; keepalive 32; } 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; } } - Keepalived 主节点片段(/etc/keepalived/keepalived.conf)
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS; auth_pass 42 } virtual_ipaddress { 192.168.1.100/24 } } - 应用侧:在WEB-INF/web.xml中加入
< distributable/>,确保会话可复制。
四、健康检查与故障转移
- 负载均衡健康检查
- Nginx:在 upstream 中使用max_fails/fail_timeout实现被动探测;商业版支持主动health_check。
- HAProxy:内置主动健康检查与多种算法(roundrobin、leastconn 等),可按应用特性选择。
- 入口高可用
- Keepalived VRRP实现秒级主备切换,对外提供稳定VIP。
- 会话容错
- 开启DeltaManager后,节点失效时请求被转发到健康节点,已复制的会话可继续使用;对写入密集场景建议结合sticky session或改为集中式会话存储(如 Redis)。
五、验证与运维要点
- 验证清单
- 分发验证:多次刷新页面,观察不同jvmRoute出现在响应或日志中。
- 会话复制:登录后关闭当前节点,刷新应仍保持登录状态。
- 故障转移:停止某实例或拔网线,确认Nginx/HAProxy摘除节点且业务不中断;恢复后自动回归。
- VIP 漂移:停止主 Keepalived,确认VIP漂移到备机。
- 运维建议
- 统一JDK/Tomcat版本与配置基线;为集群开放必要端口(如8080、4000、45564)。
- 打开访问日志与AccessLogValve,便于审计与排障。
- 接入Prometheus + Grafana监控 JVM、线程、连接、GC、吞吐与错误率,设置告警阈值。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Tomcat如何实现高可用性
本文地址: https://pptw.com/jishu/767214.html
