centos

Tomcat集群配置方法

小樊
35
2025-11-11 23:42:58
栏目: 智能运维

Tomcat集群配置方法(以CentOS为例)
Tomcat集群通过负载均衡会话复制实现高可用性与可伸缩性,核心步骤包括环境准备、Tomcat配置、负载均衡设置及验证。

一、环境准备

  1. 安装Java环境
    所有集群节点需安装与Tomcat兼容的JDK(如OpenJDK 1.8/11),以CentOS为例执行:

    sudo yum install java-1.8.0-openjdk-devel -y
    

    验证安装:java -version,需显示JDK版本信息。

  2. 下载并安装Tomcat
    在所有节点下载相同版本的Tomcat(如9.0.56),解压至指定目录(如/opt/tomcat):

    wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz
    tar xzf apache-tomcat-9.0.56.tar.gz
    sudo mv apache-tomcat-9.0.56 /opt/tomcat
    

    配置环境变量(可选,方便全局调用):编辑/etc/profile,添加:

    export CATALINA_HOME=/opt/tomcat
    export PATH=$PATH:$CATALINA_HOME/bin
    source /etc/profile
    

    启动Tomcat:/opt/tomcat/bin/startup.sh,验证端口8080是否监听:netstat -tulnp | grep 8080

二、配置Tomcat集群

  1. 修改server.xml(核心配置)
    编辑/opt/tomcat/conf/server.xml,在<Engine>元素内添加集群配置,关键参数说明:

    • MulticastService:通过组播地址(228.0.0.4)和端口(45564)实现节点发现;
    • NioReceiver:接收其他节点的复制数据,端口4000
    • ReplicationTransmitter:使用NIO并行发送数据,提升复制效率;
    • DeltaManager:管理会话复制,默认将所有会话存入内存,notifyListenersOnReplication="true"确保复制完成后通知监听器。
      示例配置:
    <Engine name="Catalina" defaultHost="localhost">
        <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.MessageDispatch15Interceptor"/>
            </Channel>
            <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" 
                   filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt"/> <!-- 过滤静态资源,减少复制开销 -->
            <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
        </Cluster>
    </Engine>
    
  2. (可选)配置context.xml
    编辑/opt/tomcat/conf/context.xml,添加集群配置以启用分布式会话

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

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

使用Nginx将客户端请求分发到Tomcat集群,提升并发处理能力。

  1. 安装Nginx

    sudo yum install epel-release -y
    sudo yum install nginx -y
    
  2. 配置负载均衡
    编辑/etc/nginx/nginx.conf,在http块中添加upstream定义集群节点(替换为实际IP),并配置proxy_pass转发请求:

    http {
        upstream tomcat_cluster {
            server 192.168.1.1:8080;  # Tomcat节点1
            server 192.168.1.2:8080;  # Tomcat节点2
            server 192.168.1.3:8080;  # Tomcat节点3
        }
    
        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;
            }
        }
    }
    
  3. 启动Nginx

    sudo systemctl start nginx
    sudo systemctl enable nginx  # 开机自启
    

四、验证集群功能

  1. 检查Tomcat集群状态
    访问任意节点的管理页面(如http://192.168.1.1:8080/manager/status),需输入管理员账号密码(在conf/tomcat-users.xml中配置),查看“Cluster”栏目,确认节点已加入集群(显示集群名称及成员列表)。

  2. 测试会话复制
    部署一个包含HttpSession操作的Web应用(如session.jsp,内容为<%= session.getId() %>),通过Nginx访问(如http://yourdomain.com/session.jsp)。刷新页面时,观察不同节点返回的Session ID是否一致,若一致则说明会话复制成功。

  3. 验证负载均衡
    多次访问http://yourdomain.com,通过netstat -tulnp | grep 8080查看请求是否被分发到不同Tomcat节点(端口8080的连接数应分布在多个节点上)。

五、注意事项

0
看了该问题的人还看了