首页主机资讯Ubuntu下Tomcat的集群配置怎么做

Ubuntu下Tomcat的集群配置怎么做

时间2025-11-25 18:45:12发布访客分类主机资讯浏览337
导读:Ubuntu下Tomcat集群配置步骤 一 环境准备与端口规划 准备至少2台 Ubuntu 服务器(同一内网),安装相同版本的 JDK 与 Tomcat。 每台机器上规划多个实例时,修改以下端口避免冲突:Server port(默认800...

Ubuntu下Tomcat集群配置步骤

一 环境准备与端口规划

  • 准备至少2台 Ubuntu 服务器(同一内网),安装相同版本的 JDKTomcat
  • 每台机器上规划多个实例时,修改以下端口避免冲突:Server port(默认8005)HTTP Connector(默认8080)AJP Connector(默认8009)、以及集群通信的 Receiver port(默认4000)
  • 示例两台机器的实例端口规划如下(可按需调整):
节点 Server port HTTP AJP Receiver port
node1 8005 8080 8009 4000
node2 8006 8081 8010 4001
  • 建议所有节点时间同步(如配置 NTP),避免会话过期判断与集群建立异常。

二 配置Tomcat集群会话复制

  • 在每个节点的 conf/server.xml 内添加或启用 。示例(两台机器分别使用各自的 Receiver 端口):
<
    Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
    
  <
    Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
    
    <
    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=""/>
    
    <
    ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
    
  <
    /Cluster>
    
<
    /Engine>
    
  • 在需要会话复制的应用的 WEB-INF/web.xml 中添加
  • 放入会话的对象必须实现 java.io.Serializable
  • 如需在同一台机器运行多个实例,请确保各实例的 Receiver port 唯一,且 Engine 的 jvmRoute 唯一(如:tomcat1、tomcat2),便于后续粘性会话与路由。

三 配置负载均衡

  • 方案A(Apache + mod_jk,AJP)
    1. 安装模块:sudo apt-get install libapache2-mod-jk
    2. 编辑 workers.properties(示例为两台 AJP 节点):
    worker.list=loadbalancer,status
    worker.tomcat1.port=8009
    worker.tomcat1.host=192.168.1.10
    worker.tomcat1.type=ajp13
    worker.tomcat1.lbfactor=1
    
    worker.tomcat2.port=8010
    worker.tomcat2.host=192.168.1.11
    worker.tomcat2.type=ajp13
    worker.tomcat2.lbfactor=1
    
    worker.loadbalancer.type=lb
    worker.loadbalancer.balance_workers=tomcat1,tomcat2
    worker.loadbalancer.sticky_session=1
    worker.status.type=status
    
    1. 启用模块并配置 VirtualHost(示例):
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile /path/to/workers.properties
    JkLogFile /var/log/apache2/mod_jk.log
    JkLogLevel info
    
    <
        VirtualHost *:80>
        
      ServerName yourdomain.com
      JkMount /* loadbalancer
      JkMount /jk-status status
    <
        /VirtualHost>
    
    
  • 方案B(Nginx,HTTP Proxy)
    1. 安装:sudo apt-get install nginx
    2. 配置 /etc/nginx/sites-available/cluster.conf:
    upstream tomcat_cluster {
        
      server 192.168.1.10:8080;
        
      server 192.168.1.11:8081;
    
    }
    
    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;
    
      }
    
    }
        
    
    1. 启用站点并重启 Nginx。

四 启动与验证

  • 启动所有 Tomcat 实例,再启动 Apache/ Nginx
  • 访问应用,观察日志(catalina.out、mod_jk.log 或 nginx/access.log)确认请求被分发到不同节点。
  • 验证会话复制:
    • 在应用首页打印 JSESSIONID,刷新后检查是否保持同一会话或按策略变更;
    • 关闭当前承载会话的节点,确认请求被其他节点接管且会话未丢失(粘性会话或外置 Session 存储生效时更明显);
    • 使用 PSI Probe 等工具查看集群节点与会话状态。

五 常见问题与优化

  • 组播不通:确认云环境未屏蔽 IGMP/组播,或改用 静态成员(StaticMembershipInterceptor);检查 address=228.0.0.4、port=45564 在各节点一致且网络可达。
  • Receiver 绑定错误:将 Receiver address 设为非 127.0.0.1 的本机地址,确保多实例端口不冲突。
  • 时间漂移:配置 NTP 同步所有节点时间。
  • 会话可序列化:所有放入 HttpSession 的对象实现 Serializable
  • 应用分发:为需要复制的应用添加
  • 会话保持策略:
    • 使用 粘性会话(如 mod_jk 的 sticky_session=1)可减少复制量,但节点宕机会丢失该节点上的会话;
    • 使用 外置 Session 存储(如 Memcached)可实现会话共享与故障不丢。

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


若转载请注明出处: Ubuntu下Tomcat的集群配置怎么做
本文地址: https://pptw.com/jishu/755819.html
Ubuntu中Tomcat的自动重启怎么设置 在Ubuntu上如何解决Tomcat端口冲突

游客 回复需填写必要信息