Ubuntu环境下Tomcat集群部署方案
一、环境准备
在开始部署前,需完成以下基础准备工作:
- 服务器准备:至少准备2台Ubuntu服务器(如Ubuntu 22.04 LTS),确保网络互通且防火墙开放必要端口(如HTTP 80、HTTPS 443、AJP 8009、Tomcat集群通信端口)。
- Java环境安装:Tomcat依赖Java运行环境,使用OpenJDK 8或11(推荐),安装命令如下:
sudo apt update sudo apt install openjdk-11-jdk -y java -version # 验证安装(输出需包含Java版本信息) - Tomcat安装:在所有集群节点上安装相同版本的Tomcat(如Tomcat 9/10),推荐通过APT仓库安装以简化管理:
sudo apt install tomcat9 tomcat9-admin -y sudo systemctl enable --now tomcat9 # 启动Tomcat并设置开机自启 sudo systemctl status tomcat9 # 验证状态(需显示“active (running)”)
以上步骤确保所有节点具备运行Tomcat的基础环境。
二、Tomcat集群配置
1. 修改server.xml配置集群
集群的核心配置在server.xml文件中(路径:/etc/tomcat9/server.xml),需添加元素并配置相关参数:
<Engine name="Catalina" defaultHost="localhost">
<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" # 心跳频率(毫秒)
dropTime="3000"/> # 节点超时时间(毫秒)
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" # 自动获取本机IP
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>
<Manager className="org.apache.catalina.ha.session.DeltaManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"/>
<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>
关键参数说明:
address/port:多播地址和端口用于节点自动发现,同一集群内需保持一致;receiver.port:每个节点需设置为不同值(如4000、4001),避免端口冲突;DeltaManager:默认会话管理器,支持全量/增量会话复制。
2. 配置应用会话复制
默认情况下,Tomcat会将webapps目录下的应用纳入集群会话复制。若需单独配置某个应用的会话复制,在应用的WEB-INF/web.xml中添加标签:
<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_4_0.xsd"
version="4.0">
<distributable/>
web-app>
3. 避免端口冲突
每个Tomcat节点需修改以下端口(路径:/etc/tomcat9/server.xml):
- Server端口:
(默认8005,集群内需唯一); - HTTP连接器端口:
(默认8080,集群内需唯一); - AJP连接器端口:
(默认8009,集群内需唯一)。
修改后重启Tomcat使配置生效:
sudo systemctl restart tomcat9
三、负载均衡配置(以Nginx为例)
负载均衡器负责将请求分发到集群中的Tomcat节点,提高系统吞吐量和可用性。以下是Nginx的配置步骤:
1. 安装Nginx
sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx
sudo systemctl status nginx # 验证状态
2. 配置上游服务器
编辑Nginx配置文件(路径:/etc/nginx/sites-available/default),在http块中添加upstream:
http {
upstream tomcat_cluster {
server 192.168.1.101:8080; # Tomcat节点1地址
server 192.168.1.102:8080; # Tomcat节点2地址
# 可添加更多节点
}
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;
}
}
}
3. 启用配置并重启Nginx
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx
可选配置:会话粘滞(Sticky Session)
为避免用户会话在节点间频繁切换,可开启会话粘滞:
upstream tomcat_cluster {
ip_hash; # 基于客户端IP分配固定节点
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
四、应用部署与测试
1. 部署应用
将WAR文件复制到每个Tomcat节点的webapps目录(如/var/lib/tomcat9/webapps/),Tomcat会自动解压部署:
scp your-app.war user@192.168.1.101:/var/lib/tomcat9/webapps/
scp your-app.war user@192.168.1.102:/var/lib/tomcat9/webapps/
2. 验证集群功能
- 访问应用:通过负载均衡器地址(如
http://yourdomain.com)访问应用; - 查看集群节点:在应用中添加测试页面(如
/cluster-info.jsp),输出request.getServerInfo()和session.getId(),验证请求是否分发到不同节点且会话一致; - 模拟节点故障:停止某个Tomcat节点(
sudo systemctl stop tomcat9),再次访问应用,确认请求是否自动切换到其他节点。
五、高可用性与优化(可选)
1. 配置Keepalived实现VIP
为避免单点故障(如Nginx宕机),可使用Keepalived配置虚拟IP(VIP):
sudo apt install keepalived -y
编辑配置文件(/etc/keepalived/keepalived.conf):
vrrp_instance VI_1 {
state MASTER
interface eth0 # 网卡名称(通过`ip a`查看)
virtual_router_id 51 # 虚拟路由ID(集群内唯一)
priority 100 # 优先级(MASTER需高于BACKUP)
advert_int 1 # 心跳间隔(秒)
authentication {
auth_type PASS
auth_pass 1234 # 密码(集群内一致)
}
virtual_ipaddress {
192.168.1.200 # VIP地址
}
}
启动Keepalived:
sudo systemctl enable --now keepalived
ip addr show eth0 # 查看VIP是否绑定
2. 使用Redis共享会话
对于大型集群,Tomcat原生会话复制可能影响性能,建议使用Redis作为集中式会话存储:
- 安装Redis:
sudo apt install redis-server -y; - 添加Tomcat Redis会话管理器依赖(如
tomcat-redis-session-manager); - 修改
context.xml配置Redis连接:<Context> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="192.168.1.100" # Redis服务器地址 port="6379" database="0" maxInactiveInterval="1800"/> Context>
3. 监控与调优
- 监控工具:使用Prometheus+Grafana监控Tomcat节点的CPU、内存、线程池、会话数量等指标;
- 日志分析:收集Tomcat日志(
/var/log/tomcat9/catalina.out)和Nginx日志(/var/log/nginx/access.log),分析请求延迟和错误率; - JVM调优:根据应用负载调整Tomcat的JVM内存参数(
/etc/tomcat9/tomcat9.conf):JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC"
通过以上步骤,可在Ubuntu环境下搭建一个高可用的Tomcat集群,满足应用的负载均衡、会话共享和高可用需求。
以上就是关于“Ubuntu Tomcat集群部署方案”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm