centos下tomcat集群搭建方法
CentOS下Tomcat集群搭建步骤
1. 环境准备
- 安装Java环境:Tomcat依赖JDK,所有节点需安装与Tomcat版本兼容的JDK(如Tomcat 9需JDK 8+)。
执行命令:sudo yum install java-1.8.0-openjdk-devel
,安装完成后通过java -version
验证。 - 下载并安装Tomcat:在所有节点上下载相同版本的Tomcat(如9.0.56),解压至统一目录(如
/opt/tomcat
)。
命令示例:wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz tar -xzf apache-tomcat-9.0.56.tar.gz sudo mv apache-tomcat-9.0.56 /opt/tomcat
2. 配置Tomcat集群
2.1 修改server.xml
(核心集群配置)
编辑/opt/tomcat/conf/server.xml
,在<
Engine>
标签内添加<
Cluster>
配置,启用集群通信、会话管理及故障检测:
<
Engine name="Catalina" defaultHost="localhost">
<
Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<
!-- 会话管理器(DeltaManager支持主节点失效时自动切换) -->
<
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.TcpFailureDetector"/>
<
Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<
/Channel>
<
!-- 会话复制阀(仅复制特定路径请求) -->
<
Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;
.*\.js;
.*\.jpg;
.*\.png;
.*\.css;
.*\.txt"/>
<
!-- 部署器(支持应用自动同步到集群节点) -->
<
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>
说明:
McastService
:通过组播(Multicast)实现节点自动发现,address
为组播地址(默认228.0.0.4),port
为组播端口;NioReceiver
:非阻塞IO接收器,提升通信性能;TcpFailureDetector
:自动检测节点宕机,从集群中移除故障节点。
2.2 配置context.xml
(启用集群会话)
编辑/opt/tomcat/conf/context.xml
,在<
Context>
标签内添加集群配置,确保会话数据同步:
<
Context>
<
Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
<
/Context>
说明:此配置使应用支持分布式会话,用户会话数据会在集群节点间同步。
2.3 部署应用(标记为可分布)
将应用打包为WAR文件,部署到每个Tomcat实例的webapps
目录。需在应用的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该应用需启用集群特性(如会话复制)。
3. 配置负载均衡(Nginx为例)
Tomcat集群需通过负载均衡器分发请求,以下以Nginx为例:
3.1 安装Nginx
执行命令:
sudo yum install epel-release
sudo yum install nginx
安装完成后启动Nginx:sudo systemctl start nginx
,并设置开机自启:sudo systemctl enable nginx
。
3.2 配置Nginx集群
编辑/etc/nginx/nginx.conf
,在http
块中添加upstream
配置,定义Tomcat集群节点:
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
}
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;
}
}
}
说明:
upstream
:定义集群节点列表,Nginx默认采用轮询算法分发请求;proxy_set_header
:传递客户端真实IP、协议等信息至Tomcat,确保应用获取正确请求信息。
3.3 启动Nginx
执行命令:sudo systemctl start nginx
,并设置开机自启:sudo systemctl enable nginx
。
4. 启动集群并验证
4.1 启动Tomcat实例
在每个节点上进入Tomcat的bin
目录,执行启动命令:
cd /opt/tomcat/bin
./startup.sh
启动后通过ps -ef | grep tomcat
验证进程是否存在,通过tail -f logs/catalina.out
查看启动日志。
4.2 验证集群功能
- 节点通信:访问任意Tomcat节点的管理页面(如
http://192.168.1.101:8080/manager/html
),查看“集群”栏目,确认所有节点已加入集群; - 会话同步:部署一个包含
HttpSession
操作的测试应用(如计数器),通过负载均衡器访问,验证不同节点间的会话数据是否同步; - 负载均衡:多次刷新负载均衡器地址,观察请求是否被分发至不同Tomcat节点(可通过节点日志中的访问记录验证)。
5. 可选优化
- 防火墙配置:允许Tomcat(8080端口)和Nginx(80端口)的通信,避免集群节点间无法通信。
命令示例:sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent sudo firewall-cmd --zone=public --add-port=80/tcp --permanent sudo firewall-cmd --reload
- 会话持久化:若需节点宕机后会话不丢失,可将会话数据存储至Redis(需集成
RedissonSessionManager
)。 - 性能调优:调整
server.xml
中的channelSendOptions
(如设置为8,启用异步复制)、maxThreads
(增加接收线程数)等参数,提升集群吞吐量。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos下tomcat集群搭建方法
本文地址: https://pptw.com/jishu/723438.html