以下是在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