首页主机资讯Tomcat在Ubuntu上如何实现负载均衡

Tomcat在Ubuntu上如何实现负载均衡

时间2025-11-25 19:00:04发布访客分类主机资讯浏览1177
导读:在 Ubuntu 上实现 Tomcat 负载均衡 方案一 Nginx 反向代理与负载均衡(推荐) 安装组件 安装 Nginx 与 Tomcat(示例为 Tomcat 9): sudo apt update && sud...

在 Ubuntu 上实现 Tomcat 负载均衡

方案一 Nginx 反向代理与负载均衡(推荐)

  • 安装组件
    • 安装 Nginx 与 Tomcat(示例为 Tomcat 9):
      • sudo apt update & & sudo apt install -y nginx
      • 下载并解压 Tomcat 9 到 /usr/local/tomcat(或按需放置)。
  • 准备多个 Tomcat 实例
    • 复制实例并修改各实例的 conf/server.xml 中的端口,避免冲突(示例):
      • 实例1:HTTP Connector 端口 8080;实例2:HTTP Connector 端口 8081
      • 如在同一台机器部署多实例,还需调整 Server portAJP Connector 端口shutdown 端口 等,使其唯一。
  • 配置 Nginx 负载均衡
    • 编辑 /etc/nginx/nginx.conf/etc/nginx/sites-available/default,在 http 块中添加:
      • upstream tomcat_servers { server 192.168.1.101:8080; server 192.168.1.102:8081; }
    • server 块中:
      • listen 80; server_name your_domain_or_ip;
      • 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; }
  • 启用与验证
    • 检查配置:sudo nginx -t
    • 生效配置:sudo systemctl reload nginx(或 restart)
    • 访问 http://your_domain/ 验证分发;多次刷新应能在两个实例间轮询。可进一步配置权重、会话保持与健康检查(见下文优化项)。

方案二 Apache HTTP Server 负载均衡(支持 HTTP 与 WebSocket)

  • 适用场景:需要同时负载均衡 HTTPWebSocket,或已有 Apache 前置。
  • 启用模块与部署
    • 启用模块:sudo a2enmod proxy proxy_http proxy_wstunnel lbmethod_byrequests proxy_balancer xml2enc
    • 准备两个 Tomcat 实例(示例端口 80808082),可按需开启 AJP 端口(如 80108012)。
  • 配置 VirtualHost 示例(/etc/apache2/sites-available/balance.conf)
    • 常规 HTTP 负载均衡(可用 AJP 或 HTTP;示例用 AJP 并启用会话粘滞):
      • < Proxy “balancer://tomcatcluster”>
        • BalancerMember ajp://127.0.0.1:8010 route=jvm8080
        • BalancerMember ajp://127.0.0.1:8012 route=jvm8082
        • ProxySet lbmethod=byrequests stickysession=JSESSIONID|jsessionid
      • ProxyPass / balancer://tomcatcluster/
      • ProxyPassReverse / balancer://tomcatcluster/
    • WebSocket 负载均衡(优先匹配 /ws/ 前缀):
      • < Proxy “balancer://wscluster”>
        • BalancerMember ws://127.0.0.1:8080
        • BalancerMember ws://127.0.0.1:8082
      • ProxyPass /ws/ balancer://wscluster/ws/
      • ProxyPassReverse /ws/ balancer://wscluster/ws/
    • 管理页面(可选):< Location /balancer-manager> SetHandler balancer-manager
  • 启用站点与验证
    • 启用站点:sudo a2ensite balance.conf & & sudo a2enmod lbmethod_byrequests
    • 重载:sudo systemctl reload apache2
    • 访问 http://your_domain/balancer-manager 查看与调试后端状态。

会话保持与高可用优化

  • 会话保持
    • 使用 IP Hash:在 Nginx upstream 中加入 ip_hash; 适合简单场景但可能造成流量不均。
    • 使用 Sticky Session:Apache 可用 stickysession=JSESSIONID|jsessionid;Nginx Plus 支持 sticky cookie,开源版可通过应用层改造(如 Spring Session)或使用外置会话存储。
    • 外置会话存储:将会话存入 Redis 等分布式缓存,实现无状态与水平扩展。
  • 健康检查与故障转移
    • Nginx 可配置 max_fails、fail_timeout 并结合主动/被动健康检查(开源版以被动检查为主,必要时使用商业版或外部探活脚本)。
    • Apache 通过 BalancerMember 参数与 /balancer-manager 进行状态观察与手工/自动切换。
  • 高可用(避免单点)
    • 部署 Keepalived + Nginx 搭建 VIP,实现 Nginx 主备自动切换;Tomcat 层保持多实例即可。
  • 安全与性能
    • 启用 HTTPS/TLS、限制管理端口访问、开启防火墙(如 ufw)、隐藏版本信息。
    • 启用 压缩(gzip)、静态资源缓存、连接复用与超时调优;按需做 动静分离(Nginx 直接服务静态资源,Tomcat 仅处理动态请求)。

快速验证与常见问题

  • 验证步骤
    • 部署同一应用(如包含 < %= request.getLocalAddr() %> 的测试页)到各 Tomcat 实例。
    • 通过负载均衡器访问,刷新页面应看到不同实例的 IP 交替出现(轮询)。
    • 停止某实例后,确认请求自动转发到健康实例;恢复后观察重新加入。
  • 常见问题
    • 端口冲突:多实例需确保 HTTP/AJP/Server/shutdown 端口唯一。
    • 上下文路径:应用上下文(如 /app)需在 Nginx/Apache 的 location 中保持一致转发。
    • 头信息缺失:未正确设置 X-Real-IP / X-Forwarded-For / X-Forwarded-Proto 会导致应用获取不到真实客户端信息或生成错误重定向。
    • WebSocket:未单独为 /ws/ 前缀配置负载均衡会导致握手或长连接异常。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Tomcat在Ubuntu上如何实现负载均衡
本文地址: https://pptw.com/jishu/755834.html
CPUInfo中的physical ID有何作用 Linux CPUInfo中的flags对性能有何影响

游客 回复需填写必要信息