温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Tomcat集群怎么搭建

发布时间:2025-09-25 01:23:53 来源:亿速云 阅读:113 作者:小樊 栏目:系统运维

Tomcat集群搭建详细步骤(以CentOS为例)

1. 环境准备

  • 硬件与网络:确保所有节点(服务器)具备足够CPU、内存、存储资源,且处于同一局域网(网络延迟低、互通)。
  • 操作系统与软件:选择稳定的Linux发行版(如CentOS 7/8),所有节点安装相同版本的JDK(如OpenJDK 11)和Tomcat(如Tomcat 9/10)。
    • 安装JDK:sudo yum install java-11-openjdk-devel -y
    • 下载Tomcat:从官网获取最新稳定版(如apache-tomcat-9.0.56.tar.gz),解压至指定目录(如/opt/tomcat)。

2. 安装与配置Tomcat实例

  • 解压与目录设置:将Tomcat压缩包解压至每个节点的相同路径(如/opt/tomcat),避免路径差异导致配置错误。

  • 配置环境变量:编辑/etc/profile,添加Tomcat环境变量:

    export CATALINA_HOME=/opt/tomcat
    export PATH=$PATH:$CATALINA_HOME/bin
    

    执行source /etc/profile使配置生效。

  • 修改server.xml(核心配置):
    编辑$CATALINA_HOME/conf/server.xml,在<Engine>标签内添加集群配置,关键参数说明:

    • className:指定集群实现类(SimpleTcpCluster为默认)。
    • channelSendOptions="8":启用异步复制(提升性能)。
    • membership:通过**组播(Multicast)**维护集群节点列表(address为组播地址,port为组播端口,需全网段可达)。
    • receiver:配置消息接收器(port为节点接收端口,autoBind自动绑定端口范围)。
    • sender:使用NIO传输(PooledParallelSender提升复制效率)。
    • interceptor:添加拦截器(TcpPingInterceptor检测节点存活,TcpFailureDetector判断节点故障)。
      示例配置:
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> <!-- jvmRoute唯一标识节点 -->
      <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.TcpPingInterceptor"/>
          <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
        </Channel>
        <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
        <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
                  tempDir="/tmp/war-temp/"
                  deployDir="/tmp/war-deploy/"
                  watchDir="/tmp/war-listen/"
                  watchEnabled="false"/>
        <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
      </Cluster>
    </Engine>
    
  • 配置context.xml(可选,增强会话复制):
    编辑$CATALINA_HOME/conf/context.xml,添加<Cluster>标签,确保应用支持会话复制:

    <Context>
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
    </Context>
    
  • 修改应用web.xml(必需):
    在应用的WEB-INF/web.xml中添加<distributable/>标签,声明应用支持分布式部署(会话数据需跨节点同步):

    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             version="3.1">
      <distributable/>
    </web-app>
    

3. 配置负载均衡器(以Nginx为例)

  • 安装Nginx:
    sudo yum install epel-release -y
    sudo yum install nginx -y
    
  • 配置负载均衡:
    编辑/etc/nginx/nginx.conf,在http块中添加upstream定义集群节点,server块中配置代理转发:
    http {
      upstream tomcat_cluster {
        server 192.168.1.101:8080;  # Tomcat节点1 IP
        server 192.168.1.102:8080;  # Tomcat节点2 IP
        server 192.168.1.103:8080;  # Tomcat节点3 IP
        # 可选:权重分配(weight=2表示优先分配更多请求)
        # server 192.168.1.104:8080 weight=2;
      }
      server {
        listen 80;
        server_name yourdomain.com;  # 替换为域名或IP
        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;
        }
      }
    }
    
  • 启动Nginx:
    sudo systemctl start nginx
    sudo systemctl enable nginx  # 开机自启
    

4. 启动集群与验证

  • 启动Tomcat实例:
    在每个节点上执行:

    cd $CATALINA_HOME/bin
    ./startup.sh
    

    检查日志($CATALINA_HOME/logs/catalina.out)确认无报错。

  • 验证集群功能:

    • 访问负载均衡器IP(如http://yourdomain.com),多次刷新页面,观察Nginx日志(/var/log/nginx/access.log),确认请求被分发到不同Tomcat节点。
    • 部署一个有状态应用(如包含HttpSession的Servlet),在节点1登录后,访问节点2,检查会话是否同步(如用户名是否保持一致)。

5. 可选优化(会话复制与管理)

  • 会话复制模式:

    • DeltaManager(默认):适合小规模集群,主节点负责复制会话到所有从节点。
    • BackupManager:适合大规模集群,每个节点仅备份到指定备用节点(减少网络负载)。
      配置示例(server.xml中<Manager>标签):
    <Manager className="org.apache.catalina.ha.session.BackupManager"
             mapSendOptions="6"/>
    
  • 外部会话存储:
    若集群规模较大,建议使用Redis作为集中式会话存储(避免组播依赖),需添加Redis Session Manager依赖(如redisson-tomcat),并配置context.xml连接Redis。

  • 防火墙配置:
    开放Tomcat(8080)、Nginx(80)、集群通信端口(如4000、45564):

    sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=4000/tcp --permanent
    sudo firewall-cmd --zone=public --add-port=45564/tcp --permanent
    sudo firewall-cmd --reload
    

通过以上步骤,即可完成Tomcat集群的基础搭建。实际生产环境中,还需根据业务需求调整负载均衡策略(如加权轮询、IP哈希)、监控集群状态(如Prometheus+Grafana)、优化网络性能(如调整TCP参数)等。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手