首页主机资讯CentOS Tomcat如何进行负载均衡

CentOS Tomcat如何进行负载均衡

时间2025-12-20 02:17:04发布访客分类主机资讯浏览1188
导读:CentOS 上部署 Tomcat 负载均衡的实用方案 方案一 Nginx 反向代理与负载均衡 安装与启动 安装:sudo yum install -y epel-release && sudo yum install...

CentOS 上部署 Tomcat 负载均衡的实用方案


方案一 Nginx 反向代理与负载均衡

  • 安装与启动
    • 安装:sudo yum install -y epel-release & & sudo yum install -y nginx
    • 启动:sudo systemctl enable --now nginx
  • 核心配置示例(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/tomcat.conf)
    • 负载均衡与反向代理:
      http {
      
        upstream tomcat_cluster {
          
          server 192.168.1.101:8080 weight=1 max_fails=3 fail_timeout=30s;
          
          server 192.168.1.102:8080 weight=1 max_fails=3 fail_timeout=30s;
      
        }
      
      
        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;
      
          }
      
        }
      
      }
          
      
    • 会话粘性(可选,同一用户固定到同一实例):在 upstream 首行加入 ip_hash;
  • 防火墙放行
    • sudo firewall-cmd --add-port=80/tcp --permanent & & sudo firewall-cmd --reload
  • 验证
    • 访问 http://< Nginx_IP> /,刷新观察是否分发到不同 Tomcat;查看 /var/log/nginx/access.log 与 error.log 排查问题。

方案二 Apache HTTP Server 负载均衡

  • 安装与启用模块
    • 安装:sudo yum install -y httpd
    • 启用模块:sudo setsebool -P httpd_can_network_connect 1(如启用 SELinux)
  • 方式 A:mod_proxy_balancer(HTTP 转发)
    • 配置示例(/etc/httpd/conf/httpd.conf 或 /etc/httpd/conf.d/proxy.conf)
      <
          Proxy balancer://mycluster>
          
        BalancerMember http://192.168.1.101:8080
        BalancerMember http://192.168.1.102:8080
        ProxySet lbmethod=byrequests
      <
          /Proxy>
          
      
      <
          VirtualHost *:80>
          
        ProxyPreserveHost On
        ProxyPass / balancer://mycluster/
        ProxyPassReverse / balancer://mycluster/
      <
          /VirtualHost>
          
      
  • 方式 B:mod_jk(AJP,需编译连接器)
    • 编译安装 tomcat-connectors 生成 mod_jk.so,配置 workers.properties 与 JkMount,示例:
      worker.list=controller
      worker.tomcat1.type=ajp13
      worker.tomcat1.host=192.168.1.101
      worker.tomcat1.port=8009
      worker.tomcat2.type=ajp13
      worker.tomcat2.host=192.168.1.102
      worker.tomcat2.port=8009
      worker.controller.type=lb
      worker.controller.balanced_workers=tomcat1,tomcat2
      worker.controller.sticky_session=1
      
  • 启动与验证
    • sudo systemctl enable --now httpd;访问域名或 IP 验证分发;查看 /var/log/httpd/access_log 与 error_log。

会话保持与共享

  • 粘性会话(无需改应用)
    • Nginx:在 upstream 中使用 ip_hash; 让同一客户端固定到同一后端。
    • Apache mod_proxy_balancer:在 Proxy 或 BalancerMember 上使用 stickysession=JSESSIONID。
  • Tomcat 集群会话复制(应用无侵入,适合横向扩容)
    • 每台 Tomcat 的 server.xml 的 增加 jvmRoute(如 jvmRoute=“tomcat1”),并启用集群:
      <
          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>
          
      
    • 在 conf/context.xml 的 中使用 DeltaManager(或 BackupManager):
      <
          Manager className="org.apache.catalina.ha.session.DeltaManager"
               expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
          
      
  • 集中式会话存储(跨语言/跨平台,推荐生产)
    • 使用 Redis 集中存储会话,将相关依赖 JAR 放入 Tomcat lib 目录,并在应用的 web.xml 配置 与 Spring Session(或 Tomcat Redis Session Manager),实现无状态与弹性扩缩容。

健康检查与故障转移

  • Nginx 被动健康检查
    • 在 upstream 中为后端设置 max_fails 与 fail_timeout(如 max_fails=3 fail_timeout=30s),自动隔离异常实例;必要时配合主动健康检查脚本或商用模块。
  • Apache 与 Tomcat
    • 使用 mod_proxy_balancer 自带故障转移;mod_jk 通过 worker 参数与 Tomcat 集群协同实现自动摘除异常节点。

快速验证与常见问题

  • 验证步骤
    • 在两台 Tomcat 的 webapps/ROOT/index.jsp 写入不同标识(如 IP 或实例名),访问负载均衡器域名/IP,刷新观察是否轮询或按权重分发;检查后端日志与负载均衡器日志确认路径与健康状态。
  • 常见问题
    • 端口与防火墙:开放 80/443(负载均衡器)与 8080(Tomcat),以及 Tomcat AJP 8009(若用 mod_jk);云主机需放行安全组规则。
    • 应用上下文路径:ProxyPass/ProxyPassReverse 与应用的 context-path 保持一致,避免 404/重定向异常。
    • 头信息传递:确保 proxy_set_header 正确设置,以便应用获取真实 IP 与协议(X-Real-IP、X-Forwarded-For、X-Forwarded-Proto)。

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


若转载请注明出处: CentOS Tomcat如何进行负载均衡
本文地址: https://pptw.com/jishu/776961.html
CentOS系统垃圾清理工具 CentOS系统回收站设置教程

游客 回复需填写必要信息