以下是在CentOS上配置Tomcat集群的核心步骤,基于搜索结果整理:
安装JDK
确保所有节点安装相同版本的JDK(如OpenJDK 11):
sudo yum install java-11-openjdk-devel
下载并解压Tomcat
在每个节点解压Tomcat到指定目录(如/opt/tomcat):
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.85/bin/apache-tomcat-9.0.85.tar.gz
tar -xzf apache-tomcat-9.0.85.tar.gz -C /opt
修改server.xml
在conf/server.xml中启用集群,关键配置如下:
<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" maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
</Cluster>
</Engine>
修改context.xml
在conf/context.xml中添加<distributable/>标签,启用会话复制:
<Context>
<distributable/>
</Context>
配置集群节点唯一标识
在conf/server.xml的<Engine>标签中添加jvmRoute属性(需与负载均衡器配置一致):
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
每个节点的jvmRoute需唯一(如node1、node2)
安装Nginx
sudo yum install nginx
配置Nginx集群转发
编辑/etc/nginx/nginx.conf,添加upstream模块:
http {
upstream tomcat_cluster {
server 192.168.1.101:8080; # Tomcat节点1
server 192.168.1.102:8080; # Tomcat节点2
server 192.168.1.103:8080; # Tomcat节点3
}
server {
listen 80;
location / {
proxy_pass http://tomcat_cluster;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
启动Nginx
sudo systemctl start nginx
sudo systemctl enable nginx
启动Tomcat实例
在每个节点执行:
/opt/tomcat/bin/startup.sh
测试集群功能
max_fails和fail_timeout,自动剔除故障节点。sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --add-port=4000/tcp --permanent
sudo firewall-cmd --reload