Tomcat在Debian中的集群配置方法
apt包管理器安装软件,保证依赖兼容性。ntp或chrony),时间差超过1秒可能导致集群无法形成。在每个节点上执行以下命令安装Tomcat(以Tomcat 9为例):
sudo apt update
sudo apt install tomcat9 tomcat9-admin -y
安装完成后,Tomcat会自动启动,可通过systemctl status tomcat9验证状态。
编辑每个Tomcat实例的/etc/tomcat9/server.xml(默认路径),在<Engine>元素内添加集群配置:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"> <!-- jvmRoute需唯一标识实例 -->
<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" <!-- 心跳发送间隔(ms) -->
dropTime="3000"/> <!-- 无心跳剔除节点时间(ms) -->
<!-- 接收器:接收集群消息 -->
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" <!-- 自动获取本机IP -->
port="4000" <!-- 接收端口(不同实例需不同) -->
autoBind="100" <!-- 端口自动绑定范围(如4000-4099) -->
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>
<!-- 会话管理:DeltaManager适用于小型集群(会话同步到所有节点) -->
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<!-- 阀门:控制请求复制 -->
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css"/> <!-- 过滤静态资源(不复制) -->
<!-- 部署器:支持集群部署(可选) -->
<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"/>
<ClusterListener className="org.apache.catalina.ha.session.JvmRouteBinderListener"/>
</Cluster>
</Engine>
关键参数说明:
jvmRoute:实例唯一标识,需与负载均衡器中的route配置一致;address/port:组播地址和端口,同一集群需保持一致;frequency/dropTime:心跳机制参数,确保节点状态同步。编辑/etc/tomcat9/context.xml,在<Context>元素内添加<Cluster>标签,启用会话复制:
<Context>
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
</Context>
或在应用的WEB-INF/web.xml中添加<distributable/>标签,标记应用支持分布式部署:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
version="3.1">
<distributable/> <!-- 允许会话在集群中复制 -->
</web-app>
使用Nginx作为负载均衡器,将请求分发到Tomcat集群节点。安装Nginx:
sudo apt install nginx -y
编辑/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:端口
server 192.168.1.103:8080; # Tomcat节点3 IP:端口
}
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;
}
}
重启Nginx使配置生效:
sudo systemctl restart nginx
sudo systemctl start tomcat9,并设置开机自启sudo systemctl enable tomcat9。http://yourdomain.com/manager/html(需提前配置Tomcat管理用户),查看“集群”栏目,确认节点已加入;myapp.war)到任意节点的webapps目录,通过负载均衡器访问,检查会话是否同步(如登录状态在节点间共享)。BackupManager(备份节点存储所有会话)替代DeltaManager(同步到所有节点),减少网络开销;ReplicationValve的filter参数中添加静态资源后缀(如.gif、.js),避免不必要的复制;jconsole、VisualVM等工具监控Tomcat性能,调整线程池大小(maxThreads)、堆内存(-Xms/-Xmx)等参数。