Ubuntu Tomcat集群部署指南
导读:Ubuntu Tomcat集群部署指南 一、准备工作 在开始部署前,需完成以下基础准备: 服务器环境:至少2台Ubuntu服务器(或同一服务器上的多个Tomcat实例,需配置不同端口),确保网络互通。 软件版本:推荐使用Tomcat 9及...
Ubuntu Tomcat集群部署指南
一、准备工作
在开始部署前,需完成以下基础准备:
- 服务器环境:至少2台Ubuntu服务器(或同一服务器上的多个Tomcat实例,需配置不同端口),确保网络互通。
- 软件版本:推荐使用Tomcat 9及以上版本(兼容性好、性能更优)、JDK 8或11(Tomcat 9+要求JDK 8+)。
- 基础工具:
wget(下载软件)、unzip(解压文件)、vim(编辑配置)等,可通过sudo apt update & & sudo apt install -y wget unzip vim安装。
二、安装与配置Tomcat实例
1. 下载并安装Tomcat
在所有集群节点上执行以下步骤:
# 下载Tomcat(以9.0.87为例)
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.87/bin/apache-tomcat-9.0.87.tar.gz
# 解压到/opt目录
sudo tar -zxvf apache-tomcat-9.0.87.tar.gz -C /opt
# 重命名目录(可选)
sudo mv /opt/apache-tomcat-9.0.87 /opt/tomcat-cluster-node1
重复上述步骤,下载并解压到不同目录(如/opt/tomcat-cluster-node2),用于创建多个Tomcat实例。
2. 配置环境变量
编辑/etc/profile文件,添加Tomcat环境变量:
export CATALINA_HOME=/opt/tomcat-cluster-node1 # 当前节点的Tomcat路径
export PATH=$CATALINA_HOME/bin:$PATH
使配置生效:
source /etc/profile
3. 修改端口避免冲突
每个Tomcat实例需使用不同端口,编辑conf/server.xml:
<
!-- 修改关闭端口(默认8005) -->
<
Server port="8005" shutdown="SHUTDOWN">
<
!-- 修改HTTP连接器端口(默认8080) -->
<
Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<
!-- 修改AJP连接器端口(默认8009,用于负载均衡) -->
<
Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<
!-- 修改Shutdown命令(避免误操作) -->
<
Server port="8006" shutdown="CUSTOM_SHUTDOWN">
4. 启用集群配置
编辑conf/server.xml,在<
Engine>
标签内添加集群配置:
<
Engine name="Catalina" defaultHost="localhost" jmxEnabled="true">
<
!-- 集群配置 -->
<
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" # 组播地址(224.0.0.0-239.255.255.255)
port="45564" # 组播端口
frequency="500" # 心跳频率(毫秒)
dropTime="3000"/>
# 节点失效判定时间(毫秒)
<
!-- 接收器(接收其他节点消息) -->
<
Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto" # 自动获取本机IP
port="4000" # 接收端口(每个节点需唯一)
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|.*\.jpeg|.*\.jpg|.*\.png|.*\.htm|.*\.html|.*\.css|.*\.txt"/>
<
!-- 部署器(自动同步war包,可选) -->
<
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>
5. 标记可分布应用
在需要会话复制的应用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>
三、配置负载均衡(以Nginx为例)
1. 安装Nginx
sudo apt update
sudo apt install -y nginx
2. 配置负载均衡
编辑/etc/nginx/sites-available/default,添加以下内容:
upstream tomcat_cluster {
# 轮询策略(默认)
server 192.168.1.101:8080;
# Tomcat节点1的IP和端口
server 192.168.1.102:8080;
# Tomcat节点2的IP和端口
# 可选:权重策略(weight=2表示分配2倍请求)
# server 192.168.1.103:8080 weight=2;
}
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://tomcat_cluster;
# 转发到Tomcat集群
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
使配置生效:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx
四、启动集群并测试
1. 启动所有Tomcat实例
在每个节点上执行:
/opt/tomcat-cluster-node1/bin/startup.sh # 启动节点1
/opt/tomcat-cluster-node2/bin/startup.sh # 启动节点2
检查进程是否运行:
ps -ef | grep tomcat
2. 验证集群功能
- 节点发现:访问
http://192.168.1.101:8080/manager/html(需提前配置Tomcat管理账号),查看“Cluster”栏目,应显示所有节点。 - 会话复制:在应用中登录账号,关闭其中一个Tomcat节点,刷新页面应保持登录状态(说明会话已复制到其他节点)。
五、常见问题排查
- 组播无法通信:
- 检查Ubuntu防火墙是否允许组播流量:
sudo ufw allow proto igmp to 228.0.0.4 port 45564。 - 确认所有节点的
address(组播地址)和port(组播端口)一致。
- 检查Ubuntu防火墙是否允许组播流量:
- 节点无法加入集群:
- 检查
server.xml中的address(接收器IP)是否设置为auto或正确本机IP。 - 查看Tomcat日志(
logs/catalina.out),定位具体错误(如端口冲突、网络不通)。
- 检查
- 会话不复制:
- 确认应用
web.xml中包含< distributable/>标签。 - 检查
ReplicationValve的filter配置,确保动态请求(如JSP、Servlet)被过滤。
- 确认应用
通过以上步骤,即可在Ubuntu上完成Tomcat集群部署,实现负载均衡与会话共享。根据实际需求,可进一步优化配置(如调整线程池大小、启用JMX监控、使用Memcached持久化会话等)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu Tomcat集群部署指南
本文地址: https://pptw.com/jishu/737296.html
