linux

Linux Tomcat集群部署方案

小樊
37
2025-10-27 08:32:14
栏目: 智能运维

Linux环境下Tomcat集群部署方案

一、环境准备

在开始部署前,需完成以下基础环境配置:

  1. Java环境:所有Tomcat节点需安装相同版本的JDK(建议使用OpenJDK 11及以上),通过java -version验证安装;
  2. Tomcat安装:在每台Linux服务器(如CentOS)上下载并解压相同版本的Tomcat(如9.0.x),建议将Tomcat安装在/opt/tomcat目录下;
  3. 网络互通:确保所有Tomcat节点之间网络可达,关闭防火墙或开放必要端口(如Tomcat的8080端口、集群通信的4000端口、AJP的8009端口等)。

二、Tomcat集群核心配置

1. 配置server.xml(集群核心设置)

编辑每台Tomcat节点的conf/server.xml文件,在<Engine>标签内添加集群配置,关键参数说明如下:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> <!-- jvmRoute需唯一标识节点(如node1、node2) -->
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
        <!-- 集群通信配置 -->
        <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>
        <!-- 会话管理器:负责会话复制(DeltaManager支持全量/增量复制) -->
        <Manager className="org.apache.catalina.ha.session.DeltaManager" 
                 expireSessionsOnShutdown="false" 
                 notifyListenersOnReplication="true"/>
        <!-- 部署器:支持应用的自动同步(可选) -->
        <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>

2. 配置context.xml(会话复制开关)

编辑每台Tomcat节点的conf/context.xml文件,在<Context>标签内添加以下内容,启用会话复制:

<Context>
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
</Context>

3. 配置web.xml(应用分布式支持)

编辑需要集群部署的应用的WEB-INF/web.xml文件,在<web-app>标签内添加<distributable/>标签,声明应用支持分布式部署:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
                             http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
         version="4.0">
    <distributable/>
</web-app>

三、负载均衡配置(Nginx示例)

使用Nginx作为反向代理,将请求分发到多个Tomcat节点,实现负载均衡。以下是关键配置步骤:

1. 安装Nginx

在负载均衡服务器上安装Nginx:

sudo yum install epel-release -y
sudo yum install nginx -y

2. 配置负载均衡

编辑Nginx配置文件(如/etc/nginx/nginx.conf/etc/nginx/conf.d/tomcat.conf),添加upstream模块定义Tomcat集群:

http {
    upstream tomcat_cluster {
        server 192.168.1.101:8080;  # Tomcat节点1
        server 192.168.1.102:8080;  # Tomcat节点2
        server 192.168.1.103:8080;  # Tomcat节点3
        # 可选:权重分配(weight=2表示该节点处理2倍请求)
        # server 192.168.1.104:8080 weight=2;
    }

    server {
        listen 80;
        server_name yourdomain.com;  # 替换为你的域名或IP

        location / {
            proxy_pass http://tomcat_cluster;  # 转发到Tomcat集群
            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;
        }
    }
}

3. 启动Nginx

保存配置后,启动Nginx并设置开机自启:

sudo systemctl start nginx
sudo systemctl enable nginx

四、会话复制配置(可选但推荐)

若应用需要保持会话一致性(如登录状态、购物车数据),需配置Tomcat会话复制。上述server.xml中的DeltaManager已支持会话复制,但可通过以下方式优化:

五、故障转移与高可用

为提升集群可靠性,需配置故障转移机制:

  1. Nginx健康检查:在upstream模块中添加max_failsfail_timeout参数,自动剔除故障节点:
    upstream tomcat_cluster {
        server 192.168.1.101:8080 max_fails=3 fail_timeout=30s;  # 3次失败后剔除,30秒后重试
        server 192.168.1.102:8080 max_fails=3 fail_timeout=30s;
        server 192.168.1.103:8080 max_fails=3 fail_timeout=30s;
    }
    
  2. Keepalived实现VIP:通过Keepalived为Tomcat集群分配虚拟IP(VIP),当主节点故障时,VIP自动切换到备用节点(适用于需要固定IP的场景)。

六、测试与验证

  1. 启动所有Tomcat节点:在每个节点上执行/opt/tomcat/bin/startup.sh启动Tomcat;
  2. 访问负载均衡地址:通过浏览器访问Nginx的IP或域名,多次刷新页面,观察请求是否分发到不同Tomcat节点(可通过Tomcat的logs/access_log查看访问日志);
  3. 验证会话复制:在应用中登录账号,切换节点后检查是否保持登录状态(需确保<distributable/>已配置);
  4. 模拟节点故障:停止某台Tomcat节点,观察Nginx是否自动将请求分发到其他健康节点。

七、优化建议

0
看了该问题的人还看了