sudo yum install java-11-openjdk-devel -yapache-tomcat-9.0.56.tar.gz),解压至指定目录(如/opt/tomcat)。解压与目录设置:将Tomcat压缩包解压至每个节点的相同路径(如/opt/tomcat),避免路径差异导致配置错误。
配置环境变量:编辑/etc/profile,添加Tomcat环境变量:
export CATALINA_HOME=/opt/tomcat
export PATH=$PATH:$CATALINA_HOME/bin
执行source /etc/profile使配置生效。
修改server.xml(核心配置):
编辑$CATALINA_HOME/conf/server.xml,在<Engine>标签内添加集群配置,关键参数说明:
className:指定集群实现类(SimpleTcpCluster为默认)。channelSendOptions="8":启用异步复制(提升性能)。membership:通过**组播(Multicast)**维护集群节点列表(address为组播地址,port为组播端口,需全网段可达)。receiver:配置消息接收器(port为节点接收端口,autoBind自动绑定端口范围)。sender:使用NIO传输(PooledParallelSender提升复制效率)。interceptor:添加拦截器(TcpPingInterceptor检测节点存活,TcpFailureDetector判断节点故障)。<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1"> <!-- jvmRoute唯一标识节点 -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="8">
<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"
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=""/>
<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>
配置context.xml(可选,增强会话复制):
编辑$CATALINA_HOME/conf/context.xml,添加<Cluster>标签,确保应用支持会话复制:
<Context>
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
</Context>
修改应用web.xml(必需):
在应用的WEB-INF/web.xml中添加<distributable/>标签,声明应用支持分布式部署(会话数据需跨节点同步):
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
version="3.1">
<distributable/>
</web-app>
sudo yum install epel-release -y
sudo yum install nginx -y
/etc/nginx/nginx.conf,在http块中添加upstream定义集群节点,server块中配置代理转发:http {
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
# 可选:权重分配(weight=2表示优先分配更多请求)
# server 192.168.1.104:8080 weight=2;
}
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;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
sudo systemctl start nginx
sudo systemctl enable nginx # 开机自启
启动Tomcat实例:
在每个节点上执行:
cd $CATALINA_HOME/bin
./startup.sh
检查日志($CATALINA_HOME/logs/catalina.out)确认无报错。
验证集群功能:
http://yourdomain.com),多次刷新页面,观察Nginx日志(/var/log/nginx/access.log),确认请求被分发到不同Tomcat节点。HttpSession的Servlet),在节点1登录后,访问节点2,检查会话是否同步(如用户名是否保持一致)。会话复制模式:
DeltaManager(默认):适合小规模集群,主节点负责复制会话到所有从节点。BackupManager:适合大规模集群,每个节点仅备份到指定备用节点(减少网络负载)。server.xml中<Manager>标签):<Manager className="org.apache.catalina.ha.session.BackupManager"
mapSendOptions="6"/>
外部会话存储:
若集群规模较大,建议使用Redis作为集中式会话存储(避免组播依赖),需添加Redis Session Manager依赖(如redisson-tomcat),并配置context.xml连接Redis。
防火墙配置:
开放Tomcat(8080)、Nginx(80)、集群通信端口(如4000、45564):
sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo firewall-cmd --zone=public --add-port=4000/tcp --permanent
sudo firewall-cmd --zone=public --add-port=45564/tcp --permanent
sudo firewall-cmd --reload
通过以上步骤,即可完成Tomcat集群的基础搭建。实际生产环境中,还需根据业务需求调整负载均衡策略(如加权轮询、IP哈希)、监控集群状态(如Prometheus+Grafana)、优化网络性能(如调整TCP参数)等。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。