首页主机资讯centos上tomcat高可用性配置

centos上tomcat高可用性配置

时间2026-01-21 01:24:04发布访客分类主机资讯浏览1502
导读:架构与组件 前端入口:使用 Nginx 作为反向代理与负载均衡,将请求分发到后端多个 Tomcat 实例。 会话保持:Tomcat 节点间启用内置集群的 会话复制(DeltaManager),保证节点故障时会话不丢失。 入口高可用:在 N...

架构与组件

  • 前端入口:使用 Nginx 作为反向代理与负载均衡,将请求分发到后端多个 Tomcat 实例。
  • 会话保持:Tomcat 节点间启用内置集群的 会话复制(DeltaManager),保证节点故障时会话不丢失。
  • 入口高可用:在 Nginx 前部署 Keepalived 提供 VIP,实现主备自动切换。
  • 典型拓扑:两台 Nginx+Keepalived(主/备),两台或多台 Tomcat 实例。

部署步骤

  • 准备环境
    • 安装 JDK 8(所有节点一致版本),配置环境变量;安装并启动 Tomcat(建议同版本)。
    • 规划实例端口,避免同机多实例端口冲突(如 8080/8081,对应 8005/9005 关闭端口、8009/8010 AJP 端口)。
  • 配置 Tomcat 集群与会话复制
    • 在 server.xml 的 上设置唯一 jvmRoute(如 node1、node2),并加入
    • 在 conf/context.xml 的 中启用集群会话管理(DeltaManager),并为需要会话粘滞的应用在 web.xml 增加
  • 配置 Nginx 负载均衡
    • 在 /etc/nginx/conf.d/tomcat.conf 定义 upstream 指向各 Tomcat 的 8080 端口,location 中使用 proxy_pass 并传递 Host/X-Real-IP/X-Forwarded-For/X-Forwarded-Proto 等头。
  • 配置 Keepalived 主备
    • 两台 Nginx 分别部署 Keepalived,主节点 state=MASTER、备节点 state=BACKUP,设置 virtual_router_id 一致、priority 主高备低,配置 virtual_ipaddress(VIP);启用 vrrp_instance 与认证。
  • 启动与验证
    • 启动 Tomcat → 启动 Nginx → 启动 Keepalived;访问 VIP 验证轮询与故障切换。

关键配置示例

  • Nginx 负载均衡(/etc/nginx/conf.d/tomcat.conf)
http {

  upstream tomcat_cluster {
    
    server 192.168.205.152:8080 max_fails=3 fail_timeout=30s;
    
    server 192.168.205.153:8080 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;

    }

  }

}
    
  • Tomcat 集群与会话复制(server.xml 片段)
<
    Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
    
  <
    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.TcpFailureDetector"/>
    
      <
    Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
    
    <
    /Channel>
    
    <
    Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
    
    <
    Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    
    <
    ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    
  <
    /Cluster>
    
<
    /Engine>

  • Keepalived 主节点(/etc/keepalived/keepalived.conf 片段)
vrrp_instance VI_1 {

  state MASTER
  interface eth0
  virtual_router_id 51
  priority 100
  advert_int 1
  authentication {
     auth_type PASS;
 auth_pass 42 }

  virtual_ipaddress {
 192.168.205.135/24 }

}
    
  • 应用开启会话分发(WEB-INF/web.xml)
<
    web-app ...>
    
  <
    distributable/>
    
<
    /web-app>
    
  • 健康检查与故障转移要点
    • Nginx 使用 max_fails/fail_timeout 进行后端健康检查与摘除;Keepalived 通过 VRRP 实现 VIP 漂移,主节点宕机后 VIP 自动漂移至备节点。

验证与运维

  • 会话粘滞与复制验证
    • 部署测试页打印 SessionID 与服务器标识,刷新与关闭节点验证会话是否保持与复制生效。
  • 健康检查与摘除
    • 停止某 Tomcat 实例,Nginx 应在 fail_timeout 后将实例标记为不可用并继续服务其余实例。
  • 主备切换演练
    • 停止主 Nginx 或关闭网卡,观察 VIP 是否漂移至备机、访问是否不受影响。
  • 监控与日志
    • 建议接入 Prometheus + Grafana 监控 Tomcat/Nginx 指标,集中日志便于排障。

常见问题与优化

  • 组播与网络
    • Tomcat 集群默认使用 UDP 组播 228.0.0.4:45564,确保云服务器或容器网络策略放通;跨机房/跨 VPC 建议改用 TCP 单播 或外置会话存储。
  • 会话复制策略
    • 节点多且会话较大时,考虑 BackupManager 或外置 Redis/Memcached 集中会话,降低复制风暴。
  • 单点风险
    • 仅一台 Nginx 仍是单点,生产建议 双机 + Keepalived VIP;对外域名解析到 VIP
  • 启动顺序
    • 先启动 Tomcat 再启动 Nginx/Keepalived,避免转发到未就绪实例。
  • 安全加固
    • 限制管理端口与 AJP 暴露面,启用防火墙,必要时仅内网开放。

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


若转载请注明出处: centos上tomcat高可用性配置
本文地址: https://pptw.com/jishu/787914.html
centos nginx域名解析问题 centos中tomcat错误代码解析

游客 回复需填写必要信息