Ubuntu环境下搭建Tomcat集群的详细步骤
JAVA_HOME)。java -version验证),并解压Tomcat到指定目录(如/opt/tomcat)。tar -zxvf apache-tomcat-x.x.x.tar.gz -C /opt/,重命名为tomcat(便于管理)。/etc/profile,添加export CATALINA_HOME=/opt/tomcat,执行source /etc/profile生效。conf/server.xml中的以下端口(示例为两台节点的配置差异):
Server Port=8005、Connector Port=8080、AJP Port=8009;Server Port=9005、Connector Port=9080、AJP Port=9009(确保端口不重复)。编辑每台服务器conf/server.xml文件,在<Engine>标签内添加集群配置(关键参数说明见注释):
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> <!-- jvmRoute需唯一,对应负载均衡节点标识 -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<!-- 会话管理器:DeltaManager用于主节点复制,BackupManager用于备份节点 -->
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<!-- 集群通信通道:组播(Multicast)用于节点发现 -->
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<!-- 组播地址(224.0.0.0-239.255.255.255)和端口,所有节点需一致 -->
<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.TcpPingInterceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
</Channel>
<!-- 负载均衡阀:控制请求是否复制到其他节点 -->
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.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>
jvmRoute:每台节点需唯一(如node1、node2),对应负载均衡配置中的balance_workers名称;4000、4001),避免端口冲突。为了让应用支持集群会话同步,需在应用的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>
<distributable/>的应用会话才会被复制,未标注的应用会话仅在当前节点有效。Tomcat集群需要负载均衡器将请求分发到各节点,以下是Nginx的配置步骤:
sudo apt update && sudo apt install nginx。/etc/nginx/sites-available/default,添加以下内容:upstream tomcat_cluster {
server 192.168.1.101:8080; # 节点1的IP和Tomcat端口
server 192.168.1.102:9080; # 节点2的IP和Tomcat端口
# 可添加更多节点
}
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;
}
}
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/,然后重启Nginx:sudo systemctl restart nginx。/opt/tomcat/bin/startup.sh,通过ps -ef | grep tomcat验证进程是否启动。http://节点IP:8080/manager/status(需输入管理员账号密码),查看“Cluster”栏目中的节点列表(显示所有节点已加入集群)。http://yourdomain.com(通过Nginx负载均衡),登录应用并记录Session ID;/opt/tomcat/bin/shutdown.sh);通过以上步骤,即可在Ubuntu环境下搭建一个基本的Tomcat集群,实现负载均衡和高可用性。根据实际需求,可进一步调整集群配置(如优化组播参数、调整复制模式)以满足高并发场景。