首页主机资讯centos上tomcat如何进行负载均衡

centos上tomcat如何进行负载均衡

时间2025-12-10 01:35:04发布访客分类主机资讯浏览613
导读:在 CentOS 上为 Tomcat 做负载均衡的实用方案 一、方案总览与选型 常见做法是在前端部署Nginx或Apache HTTP Server做反向代理与负载均衡,后端运行多个 Tomcat 实例。Nginx 适合高并发、七层路...

在 CentOS 上为 Tomcat 做负载均衡的实用方案


一、方案总览与选型

  • 常见做法是在前端部署NginxApache HTTP Server做反向代理与负载均衡,后端运行多个 Tomcat 实例。Nginx 适合高并发、七层路由与静态资源卸载;Apache 可通过 mod_jkmod_proxy_ajp 与 Tomcat 的 AJP/1.3 协议通信。若需会话保持,可在 Nginx 用 ip_hash,或引入 Redis 集中式会话共享;若需高可用,可部署 Nginx 主备 + Keepalived VIP。下表对比常见方案:

    方案 前端组件 通信协议 优点 注意点
    Nginx + HTTP Nginx HTTP/1.1 高并发、静态分离、七层策略丰富 开源版主动健康检查能力有限
    Apache + mod_jk Apache AJP/1.3 与 Tomcat 集成紧密、成熟稳定 需维护 workers.properties
    Apache + mod_proxy_ajp Apache AJP/1.3 配置简洁、与 Apache 生态融合 与 mod_jk 二选一

    以上方案均为 CentOS 上常用实践,可按并发、协议与运维偏好选择。


二、方案一 Nginx 负载均衡与高可用

  • 安装与基础配置
    • 安装 Nginx:sudo yum install -y epel-release & & sudo yum install -y nginx
    • 配置 upstream 与反向代理(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/tomcat.conf):
      http {
      
        upstream tomcat_cluster {
          
          least_conn;
          
          server 192.168.1.101:8080 weight=5 max_fails=3 fail_timeout=30s;
          
          server 192.168.1.102:8080 weight=3 max_fails=3 fail_timeout=30s;
          
          server 192.168.1.103:8080 backup;
          
          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;
          
            proxy_connect_timeout 5s;
          
            proxy_read_timeout 30s;
      
          }
      
          # 可选:健康接口(内部使用)
          location /health {
          
            internal;
          
            proxy_pass http://tomcat_cluster/health;
      
          }
      
        }
      
      }
          
      
    • 启动:sudo systemctl enable --now nginx
  • 会话保持与扩展
    • 简单会话粘滞:在 upstream 中使用 ip_hash; (适合 IP 分布均匀的场景)。
    • 无状态会话:引入 Redis 集中式会话(如 Spring Session),避免节点宕机丢失会话。
  • 高可用
    • 部署 Nginx 主备 + Keepalived VIP,实现故障自动漂移,避免单点。

三、方案二 Apache HTTP Server 负载均衡

  • 安装与启用模块
    • 安装:sudo yum install -y httpd
    • 启用模块(示例):LoadModule proxy_module modules/mod_proxy.so、LoadModule proxy_ajp_module modules/mod_proxy_ajp.so、LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
  • 基于 mod_proxy_ajp 的负载均衡
    • 配置(/etc/httpd/conf.d/tomcat_lb.conf):
      <
          VirtualHost *:80>
          
        ServerName yourdomain.com
        <
          Proxy "balancer://mycluster">
          
          BalancerMember ajp://192.168.1.101:8009
          BalancerMember ajp://192.168.1.102:8009
          ProxySet lbmethod=byrequests
        <
          /Proxy>
          
        ProxyPass        /  balancer://mycluster/
        ProxyPassReverse /  balancer://mycluster/
      <
          /VirtualHost>
          
      
    • 启动:sudo systemctl enable --now httpd
  • 基于 mod_jk 的负载均衡
    • 安装模块:sudo yum install -y mod_jk
    • 配置 workers.properties(/etc/httpd/conf/workers.properties):
      worker.list=lb
      worker.lb.type=lb
      worker.lb.balance_workers=tomcat1,tomcat2
      
      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
      
    • 配置 httpd(/etc/httpd/conf.d/tomcat_jk.conf):
      LoadModule jk_module modules/mod_jk.so
      JkWorkersFile /etc/httpd/conf/workers.properties
      JkLogFile     /var/log/httpd/mod_jk.log
      JkLogLevel    info
      
      <
          VirtualHost *:80>
          
        ServerName yourdomain.com
        JkMount /* lb
      <
          /VirtualHost>
          
      
    • 启动:sudo systemctl enable --now httpd
  • Tomcat 侧要求
    • 每个实例需开启 AJP 连接器(server.xml):
      <
          Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
          
      
    • 多实例在同一台主机时,确保 AJP 端口不冲突

四、Tomcat 集群与会话保持

  • 会话复制(Tomcat 内置集群,适合“有状态”会话)
    • 在 server.xml 的 上添加:
      <
          Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
          
        <
          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.cajina.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>
          
      
    • 在应用的 META-INF/context.xml 或 conf/context.xml 中启用集群(或使用默认 host 级 cluster 配置)。
    • 注意:各节点需有唯一 jvmRoute,并在同一二层网络(多播)或正确配置组播参数。
  • 无状态会话(推荐)
    • 使用 Redis 集中式会话(如 Spring Session),解耦节点与会话存储,更利于弹性扩缩与故障隔离。

五、验证与运维要点

  • 健康检查与故障转移
    • Nginx 开源版可用 max_fails/fail_timeout 做被动探测;如需主动健康检查,可使用 Nginx Plus 或在前端加 /health 接口供负载均衡器探测。
  • 静态资源与压缩
    • 由 Nginx 直接服务静态资源并开启 GZIP,减轻 Tomcat 压力(proxy_pass 之外单独 location ~* .(js|css|png|jpg)$)。
  • 连接与超时
    • 合理设置 proxy_connect_timeout / proxy_read_timeout,并在 Tomcat 的 中调整 maxThreads、acceptCount、enableLookups=false 等参数以匹配并发。
  • 日志与排错
    • 核查 Nginx 的 access/error.log、Apache 的 error_log/mod_jk.log、Tomcat 的 catalina.outlocalhost_access_log,从负载均衡器到后端逐跳定位问题。

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


若转载请注明出处: centos上tomcat如何进行负载均衡
本文地址: https://pptw.com/jishu/767773.html
centos中tomcat如何配置SSL Apache2如何配置防盗劫持

游客 回复需填写必要信息