温馨提示×

怎样实现CentOS Tomcat负载均衡

小樊
48
2026-01-02 04:20:28
栏目: 云计算

CentOS 上实现 Tomcat 负载均衡

一、方案总览

  • 常见做法是在前端部署NginxApache HTTP Server做反向代理与负载均衡,后端运行多个 Tomcat 实例。为提升可用性,可启用会话保持或会话复制(如 Tomcat 内置集群或外置 Redis 集中会话)。Nginx 适合高并发 HTTP 场景,Apache 可通过 mod_jkmod_proxy_ajp 与 Tomcat 的 AJP/1.3 协议对接。

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

  • 安装与启动
    • 安装:sudo yum install -y nginx
    • 启动与开机自启:sudo systemctl start nginx && sudo systemctl enable nginx
  • 配置 upstream 与反向代理(示例:/etc/nginx/conf.d/tomcat.conf)
    • 基本轮询:
      upstream tomcat_cluster {
          server 192.168.1.11:8080;
          server 192.168.1.12:8080;
      }
      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;
    • 健康检查与故障转移:为节点添加 max_fails=3 fail_timeout=30s 等参数,自动摘除异常实例。
  • 防火墙放行
    • 开放 80 与后端 8080sudo firewall-cmd --add-port={80,8080}/tcp --permanent && sudo firewall-cmd --reload
  • 验证
    • 访问 http://<Nginx_IP>/,刷新观察请求在多个 Tomcat 间分发;查看 /var/log/nginx/access.log 与 Tomcat 日志确认分发与健康检查效果。

三、方案二 Apache HTTP Server + mod_jk 或 mod_proxy_ajp

  • 安装与启用
    • 安装:sudo yum install -y httpd
    • 启动与开机自启:sudo systemctl start httpd && sudo systemctl enable httpd
  • 方式 A:mod_jk(AJP)
    • 编译安装 tomcat-connectors(生成 mod_jk.so),在 httpd.conf 中加载模块并配置 workers.properties 与虚拟主机 JkMount;为每个 Tomcat 配置不同的 AJP/1.3 端口(如 8009/8010),并在 Engine 上设置 jvmRoute
  • 方式 B:mod_proxy_ajp
    • 在虚拟主机中使用 BalancerMember ajp://ip:8009 定义集群成员,实现 AJP 负载均衡与反向代理。
  • 验证
    • 访问 http://<Apache_IP>/,通过日志与 Tomcat 控制台确认 AJP 连接与会话分发正常。

四、会话保持与共享

  • 会话粘滞(Nginx)
    • 在 upstream 中使用 ip_hash; 让同一客户端固定到同一后端,适用于不改动应用的快速方案(注意跨网段/NAT 与容量倾斜问题)。
  • Tomcat 内置集群会话复制
    • server.xmlEngine 上设置唯一 jvmRoute,并启用 ;在 context.xml 配置 DeltaManagerClusterListener 以进行会话复制(适合同机房、节点稳定的场景)。
  • 外置 Redis 集中会话
    • Jedis/Lettuce 等依赖及 Tomcat-Redis-Session-Manager 的 JAR 放入 $CATALINA_HOME/lib,在 context.xml 配置 (或相应实现),将 session 存储到 Redis,对横向扩容与跨机房更友好。

五、部署与验证清单

  • 多实例端口规划
    • 同机多实例需确保 Server port、HTTP 8080、AJP 8009、Shutdown 端口 等互不冲突;跨机部署时注意 防火墙/安全组 放行 80/8080/8009
  • 健康检查与摘除
    • Nginx 使用 max_fails/fail_timeout 实现被动健康检查;生产可结合主动健康检查脚本或商用探针,确保异常节点及时摘除与恢复。
  • 日志与观测
    • 核查 /var/log/nginx/error.log$CATALINA_HOME/logs/catalina.outlocalhost_access_log,确认负载分发、会话粘滞或复制是否生效。
  • 快速验证步骤
    • /webapps/ROOT/index.jsp 中加入实例标识(如 IP/端口),反复刷新页面观察分发;登录类应用验证会话是否保持或跨节点共享无误。

0