温馨提示×

Ubuntu Tomcat集群部署方案

小樊
46
2025-10-01 04:51:07
栏目: 智能运维

Ubuntu环境下Tomcat集群部署方案

一、环境准备

在开始部署前,需完成以下基础准备工作:

  1. 服务器准备:至少准备2台Ubuntu服务器(如Ubuntu 22.04 LTS),确保网络互通且防火墙开放必要端口(如HTTP 80、HTTPS 443、AJP 8009、Tomcat集群通信端口)。
  2. Java环境安装:Tomcat依赖Java运行环境,使用OpenJDK 8或11(推荐),安装命令如下:
    sudo apt update
    sudo apt install openjdk-11-jdk -y
    java -version  # 验证安装(输出需包含Java版本信息)
    
  3. Tomcat安装:在所有集群节点上安装相同版本的Tomcat(如Tomcat 9/10),推荐通过APT仓库安装以简化管理:
    sudo apt install tomcat9 tomcat9-admin -y
    sudo systemctl enable --now tomcat9  # 启动Tomcat并设置开机自启
    sudo systemctl status tomcat9  # 验证状态(需显示“active (running)”)
    

以上步骤确保所有节点具备运行Tomcat的基础环境。

二、Tomcat集群配置

1. 修改server.xml配置集群

集群的核心配置在server.xml文件中(路径:/etc/tomcat9/server.xml),需添加<Cluster>元素并配置相关参数:

<Engine name="Catalina" defaultHost="localhost">
    <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"       # 自动获取本机IP
                      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.MessageDispatch15Interceptor"/>
        </Channel>
        <!-- 会话管理器:负责会话复制 -->
        <Manager className="org.apache.catalina.ha.session.DeltaManager"
                 expireSessionsOnShutdown="false"
                 notifyListenersOnReplication="true"/>
        <!-- 阀门:过滤需要复制的请求 -->
        <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>

关键参数说明

  • address/port:多播地址和端口用于节点自动发现,同一集群内需保持一致;
  • receiver.port:每个节点需设置为不同值(如4000、4001),避免端口冲突;
  • DeltaManager:默认会话管理器,支持全量/增量会话复制。

2. 配置应用会话复制

默认情况下,Tomcat会将webapps目录下的应用纳入集群会话复制。若需单独配置某个应用的会话复制,在应用的WEB-INF/web.xml中添加<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>

3. 避免端口冲突

每个Tomcat节点需修改以下端口(路径:/etc/tomcat9/server.xml):

  • Server端口<Server port="8006" shutdown="SHUTDOWN">(默认8005,集群内需唯一);
  • HTTP连接器端口<Connector port="8081" protocol="HTTP/1.1" ...>(默认8080,集群内需唯一);
  • AJP连接器端口<Connector port="8010" protocol="AJP/1.3" ...>(默认8009,集群内需唯一)。

修改后重启Tomcat使配置生效:

sudo systemctl restart tomcat9

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

负载均衡器负责将请求分发到集群中的Tomcat节点,提高系统吞吐量和可用性。以下是Nginx的配置步骤:

1. 安装Nginx

sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx
sudo systemctl status nginx  # 验证状态

2. 配置上游服务器

编辑Nginx配置文件(路径:/etc/nginx/sites-available/default),在http块中添加upstream

http {
    upstream tomcat_cluster {
        server 192.168.1.101:8080;  # Tomcat节点1地址
        server 192.168.1.102:8080;  # Tomcat节点2地址
        # 可添加更多节点
    }

    server {
        listen 80;
        server_name yourdomain.com;

        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;
        }
    }
}

3. 启用配置并重启Nginx

sudo nginx -t  # 测试配置语法
sudo systemctl restart nginx

可选配置:会话粘滞(Sticky Session)

为避免用户会话在节点间频繁切换,可开启会话粘滞:

upstream tomcat_cluster {
    ip_hash;  # 基于客户端IP分配固定节点
    server 192.168.1.101:8080;
    server 192.168.1.102:8080;
}

四、应用部署与测试

1. 部署应用

将WAR文件复制到每个Tomcat节点的webapps目录(如/var/lib/tomcat9/webapps/),Tomcat会自动解压部署:

scp your-app.war user@192.168.1.101:/var/lib/tomcat9/webapps/
scp your-app.war user@192.168.1.102:/var/lib/tomcat9/webapps/

2. 验证集群功能

  • 访问应用:通过负载均衡器地址(如http://yourdomain.com)访问应用;
  • 查看集群节点:在应用中添加测试页面(如/cluster-info.jsp),输出request.getServerInfo()session.getId(),验证请求是否分发到不同节点且会话一致;
  • 模拟节点故障:停止某个Tomcat节点(sudo systemctl stop tomcat9),再次访问应用,确认请求是否自动切换到其他节点。

五、高可用性与优化(可选)

1. 配置Keepalived实现VIP

为避免单点故障(如Nginx宕机),可使用Keepalived配置虚拟IP(VIP):

sudo apt install keepalived -y

编辑配置文件(/etc/keepalived/keepalived.conf):

vrrp_instance VI_1 {
    state MASTER
    interface eth0  # 网卡名称(通过`ip a`查看)
    virtual_router_id 51  # 虚拟路由ID(集群内唯一)
    priority 100  # 优先级(MASTER需高于BACKUP)
    advert_int 1  # 心跳间隔(秒)
    authentication {
        auth_type PASS
        auth_pass 1234  # 密码(集群内一致)
    }
    virtual_ipaddress {
        192.168.1.200  # VIP地址
    }
}

启动Keepalived:

sudo systemctl enable --now keepalived
ip addr show eth0  # 查看VIP是否绑定

2. 使用Redis共享会话

对于大型集群,Tomcat原生会话复制可能影响性能,建议使用Redis作为集中式会话存储:

  • 安装Redis:sudo apt install redis-server -y
  • 添加Tomcat Redis会话管理器依赖(如tomcat-redis-session-manager);
  • 修改context.xml配置Redis连接:
    <Context>
        <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
                 host="192.168.1.100"  # Redis服务器地址
                 port="6379"
                 database="0"
                 maxInactiveInterval="1800"/>
    </Context>
    

3. 监控与调优

  • 监控工具:使用Prometheus+Grafana监控Tomcat节点的CPU、内存、线程池、会话数量等指标;
  • 日志分析:收集Tomcat日志(/var/log/tomcat9/catalina.out)和Nginx日志(/var/log/nginx/access.log),分析请求延迟和错误率;
  • JVM调优:根据应用负载调整Tomcat的JVM内存参数(/etc/tomcat9/tomcat9.conf):
    JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"
    

通过以上步骤,可在Ubuntu环境下搭建一个高可用的Tomcat集群,满足应用的负载均衡、会话共享和高可用需求。

0