在Ubuntu上搭建Tomcat集群的步骤
sudo apt update && sudo apt install openjdk-11-jdk -y
验证安装:java -version,确保输出显示正确版本。/opt/tomcat):wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.90/bin/apache-tomcat-9.0.90.tar.gz
sudo tar -xzf apache-tomcat-9.0.90.tar.gz -C /opt/
sudo mv /opt/apache-tomcat-9.0.90 /opt/tomcat
为避免端口冲突,后续需修改每个实例的server.xml中的端口(如8080、8009)。server.xml:在每个Tomcat实例的conf/server.xml中,取消<Engine>标签内的<Cluster>配置注释或手动添加,核心配置如下:<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> <!-- jvmRoute需唯一标识实例 -->
<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="192.168.1.101" <!-- 本地节点IP(多网卡需指定物理接口) -->
port="5000" <!-- 接收端口(不同实例需不同) -->
selectorTimeout="100"
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"/> <!-- 排除静态资源 -->
<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(本地IP)、port(接收端口)、jvmRoute(如tomcat1、tomcat2)以避免冲突。WEB-INF/web.xml中添加<distributable/>标签,告知Tomcat该应用支持集群部署。sudo apt update && sudo apt install nginx -y
/etc/nginx/sites-available/tomcat-cluster),添加以下内容: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;
}
}
启用配置:sudo ln -s /etc/nginx/sites-available/tomcat-cluster /etc/nginx/sites-enabled/,重启Nginx:sudo systemctl restart nginx。/opt/tomcat/bin/startup.sh
http://yourdomain.com,通过Tomcat管理页面(如http://yourdomain.com:8080/manager/html)查看各实例的会话数,或在应用中添加测试页面(如显示session ID),验证跨节点的会话同步。context.xml)。server.xml中的<Connector>配置)、内存分配(catalina.sh中的JAVA_OPTS)等参数提升性能。