Ubuntu Tomcat如何负载均衡
导读:Ubuntu 上实现 Tomcat 负载均衡的实用方案 方案一 Nginx 反向代理与负载均衡 安装与准备 安装 Nginx:sudo apt update && sudo apt install nginx 准备多实例...
Ubuntu 上实现 Tomcat 负载均衡的实用方案
方案一 Nginx 反向代理与负载均衡
- 安装与准备
- 安装 Nginx:sudo apt update & & sudo apt install nginx
- 准备多实例 Tomcat,分别监听不同端口(如:8080、8081),确保应用可独立访问
- Nginx 负载均衡配置示例(/etc/nginx/sites-available/loadbalance 或 /etc/nginx/nginx.conf 的 http 块内)
- 基础轮询:
upstream tomcat_servers { server 192.168.1.101:8080; server 192.168.1.102:8081; } server { listen 80; server_name example.com; location / { proxy_pass http://tomcat_servers; 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; } } - 会话粘性(基于客户端 IP):在 upstream 首行加入 ip_hash;
- 健康检查与权重:
upstream tomcat_servers { server 192.168.1.101:8080 weight=1 max_fails=3 fail_timeout=20s; server 192.168.1.102:8081 weight=1 max_fails=3 fail_timeout=20s; }
- 基础轮询:
- 使配置生效:sudo nginx -t & & sudo systemctl reload nginx
- 说明:Nginx 作为反向代理与负载均衡器,配置简单、性能稳定,适合大多数 HTTP 场景。
方案二 Apache HTTP Server 负载均衡 mod_proxy 与 mod_proxy_ajp
- 安装与启用模块
- sudo apt install apache2
- sudo a2enmod proxy proxy_http proxy_balancer lbmethod_byrequests
- HTTP 代理示例(/etc/apache2/sites-available/000-default.conf)
< VirtualHost *:80> ServerName example.com ProxyPreserveHost On ProxyPass / balancer://tomcatcluster/ ProxyPassReverse / balancer://tomcatcluster/ < Proxy balancer://tomcatcluster> BalancerMember http://192.168.1.101:8080 route=node1 BalancerMember http://192.168.1.102:8081 route=node2 ProxySet lbmethod=byrequests ProxySet stickysession=JSESSIONID|jsessionid < /Proxy> < /VirtualHost> - AJP 代理示例(可选,使用 AJP 端口如 8009/8010)
< Proxy balancer://tomcatcluster-ajp> BalancerMember ajp://192.168.1.101:8009 route=node1 BalancerMember ajp://192.168.1.102:8010 route=node2 ProxySet lbmethod=byrequests stickysession=JSESSIONID < /Proxy> ProxyPass / balancer://tomcatcluster-ajp/ ProxyPassReverse / balancer://tomcatcluster-ajp/ - 使配置生效:sudo a2ensite 000-default.conf & & sudo systemctl reload apache2
- 说明:Apache 通过 mod_proxy/mod_proxy_ajp 实现负载均衡,支持权重、会话粘性与故障转移。
会话保持与集群方案
- 会话粘性
- Nginx:在 upstream 使用 ip_hash; 实现基于客户端 IP 的粘性
- Apache:在 balancer 上使用 stickysession=JSESSIONID|jsessionid 实现粘性
- Tomcat 集群与会话复制(跨实例共享会话)
- 在 server.xml 的 Engine 或 Host 内加入:
< Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> < 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" 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.MessageDispatch15Interceptor"/> < /Channel> < Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=".*\.jsp|.*\.do"/> < Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> < ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> < /Cluster> - 在应用的 WEB-INF/web.xml 中加入 ,告知容器支持分布式会话
- 在 server.xml 的 Engine 或 Host 内加入:
- 共享会话存储(无状态/跨机房优选)
- 将会话存入 Redis 等外部缓存,实现高可用与弹性扩展
- 说明:粘性适合快速落地;集群复制适合无共享存储场景;共享缓存更利于水平扩展与容灾。
高可用与验证
- 高可用架构
- 前置两台 Nginx 做负载均衡,配合 Keepalived 提供 VIP,实现故障自动切换与高可用(主备或集群)
- 快速验证
- 部署测试页输出 SessionID 或服务器 IP,多次刷新与多端访问观察分发与粘性
- 查看负载均衡器与后端日志:tail -f /var/log/nginx/access.log /var/log/nginx/error.log 或 Apache 对应日志
- 执行 curl -I http://yourdomain/ 检查响应头与后端命中情况
- 说明:Keepalived+Nginx 可消除单点故障;日志与探针是定位分发与会话问题的首要手段。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Tomcat如何负载均衡
本文地址: https://pptw.com/jishu/770483.html
