首页主机资讯Ubuntu Tomcat集群部署指南

Ubuntu Tomcat集群部署指南

时间2025-10-28 23:10:03发布访客分类主机资讯浏览1352
导读:Ubuntu Tomcat集群部署指南 一、准备工作 在开始部署前,需完成以下基础准备: 服务器环境:至少2台Ubuntu服务器(或同一服务器上的多个Tomcat实例,需配置不同端口),确保网络互通。 软件版本:推荐使用Tomcat 9及...

Ubuntu Tomcat集群部署指南

一、准备工作

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

  1. 服务器环境:至少2台Ubuntu服务器(或同一服务器上的多个Tomcat实例,需配置不同端口),确保网络互通。
  2. 软件版本:推荐使用Tomcat 9及以上版本(兼容性好、性能更优)、JDK 8或11(Tomcat 9+要求JDK 8+)。
  3. 基础工具wget(下载软件)、unzip(解压文件)、vim(编辑配置)等,可通过sudo apt update & & sudo apt install -y wget unzip vim安装。

二、安装与配置Tomcat实例

1. 下载并安装Tomcat

在所有集群节点上执行以下步骤:

# 下载Tomcat(以9.0.87为例)
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.87/bin/apache-tomcat-9.0.87.tar.gz
# 解压到/opt目录
sudo tar -zxvf apache-tomcat-9.0.87.tar.gz -C /opt
# 重命名目录(可选)
sudo mv /opt/apache-tomcat-9.0.87 /opt/tomcat-cluster-node1

重复上述步骤,下载并解压到不同目录(如/opt/tomcat-cluster-node2),用于创建多个Tomcat实例。

2. 配置环境变量

编辑/etc/profile文件,添加Tomcat环境变量:

export CATALINA_HOME=/opt/tomcat-cluster-node1  # 当前节点的Tomcat路径
export PATH=$CATALINA_HOME/bin:$PATH

使配置生效:

source /etc/profile

3. 修改端口避免冲突

每个Tomcat实例需使用不同端口,编辑conf/server.xml

<
    !-- 修改关闭端口(默认8005) -->
    
<
    Server port="8005" shutdown="SHUTDOWN">
    
<
    !-- 修改HTTP连接器端口(默认8080) -->
    
<
    Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
    
<
    !-- 修改AJP连接器端口(默认8009,用于负载均衡) -->
    
<
    Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
<
    !-- 修改Shutdown命令(避免误操作) -->
    
<
    Server port="8006" shutdown="CUSTOM_SHUTDOWN">
    

4. 启用集群配置

编辑conf/server.xml,在< Engine> 标签内添加集群配置:

<
    Engine name="Catalina" defaultHost="localhost" jmxEnabled="true">
    
  <
    !-- 集群配置 -->
    
  <
    Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
    
    <
    !-- 会话管理器(DeltaManager适用于小型集群) -->
    
    <
    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"  # 组播地址224.0.0.0-239.255.255.255port="45564"        # 组播端口
                  frequency="500"     # 心跳频率毫秒dropTime="3000"/>
       # 节点失效判定时间(毫秒)
      <
    !-- 接收器(接收其他节点消息) -->
    
      <
    Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                address="auto"        # 自动获取本机IP
                port="4000"           # 接收端口每个节点需唯一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|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
    
    <
    !-- 部署器(自动同步war包,可选) -->
    
    <
    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>
    

5. 标记可分布应用

在需要会话复制的应用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_3_1.xsd"
         version="3.1">
    
  <
    distributable/>
    
<
    /web-app>

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

1. 安装Nginx

sudo apt update
sudo apt install -y nginx

2. 配置负载均衡

编辑/etc/nginx/sites-available/default,添加以下内容:

upstream tomcat_cluster {
    
    # 轮询策略(默认)
    server 192.168.1.101:8080;
      # Tomcat节点1的IP和端口
    server 192.168.1.102:8080;
      # Tomcat节点2的IP和端口
    # 可选:权重策略(weight=2表示分配2倍请求)
    # server 192.168.1.103:8080 weight=2;

}


server {
    
    listen 80;
    
    server_name yourdomain.com;


    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;

    }

}
    

使配置生效:

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
sudo nginx -t  # 测试配置语法
sudo systemctl restart nginx

四、启动集群并测试

1. 启动所有Tomcat实例

在每个节点上执行:

/opt/tomcat-cluster-node1/bin/startup.sh  # 启动节点1
/opt/tomcat-cluster-node2/bin/startup.sh  # 启动节点2

检查进程是否运行:

ps -ef | grep tomcat

2. 验证集群功能

  • 节点发现:访问http://192.168.1.101:8080/manager/html(需提前配置Tomcat管理账号),查看“Cluster”栏目,应显示所有节点。
  • 会话复制:在应用中登录账号,关闭其中一个Tomcat节点,刷新页面应保持登录状态(说明会话已复制到其他节点)。

五、常见问题排查

  1. 组播无法通信
    • 检查Ubuntu防火墙是否允许组播流量:sudo ufw allow proto igmp to 228.0.0.4 port 45564
    • 确认所有节点的address(组播地址)和port(组播端口)一致。
  2. 节点无法加入集群
    • 检查server.xml中的address(接收器IP)是否设置为auto或正确本机IP。
    • 查看Tomcat日志(logs/catalina.out),定位具体错误(如端口冲突、网络不通)。
  3. 会话不复制
    • 确认应用web.xml中包含< distributable/> 标签。
    • 检查ReplicationValvefilter配置,确保动态请求(如JSP、Servlet)被过滤。

通过以上步骤,即可在Ubuntu上完成Tomcat集群部署,实现负载均衡与会话共享。根据实际需求,可进一步优化配置(如调整线程池大小、启用JMX监控、使用Memcached持久化会话等)。

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


若转载请注明出处: Ubuntu Tomcat集群部署指南
本文地址: https://pptw.com/jishu/737296.html
怎样监控Ubuntu Tomcat运行状态 如何提升Ubuntu Tomcat响应速度

游客 回复需填写必要信息