Ubuntu Tomcat集群配置教程
1. 环境准备
在开始配置前,需完成以下基础准备工作:
- 服务器要求:至少2台Ubuntu服务器(物理机或虚拟机),建议使用Ubuntu 22.04 LTS及以上版本以保证稳定性。
- Java环境:Tomcat依赖Java运行环境,需在所有节点安装相同版本的JDK(推荐OpenJDK 11或17)。安装命令:
sudo apt update && sudo apt install openjdk-11-jdk -y,验证安装:java -version。 - Tomcat安装:在所有节点下载并解压相同版本的Tomcat(推荐Tomcat 9或10)。例如:
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.87/bin/apache-tomcat-9.0.87.tar.gz,解压后移动至/opt/tomcat目录:sudo mv apache-tomcat-9.0.87 /opt/tomcat。 - 网络要求:所有节点之间需能互相通信(关闭防火墙或开放相关端口:8080(Tomcat)、8009(AJP)、4000(集群通信))。
2. 配置Tomcat集群
2.1 修改server.xml启用集群
进入/opt/tomcat/conf目录,编辑server.xml文件(备份原文件后再修改)。在标签内添加集群配置,关键参数说明:
address="228.0.0.4":集群通信的多播地址(需确保所有节点在同一网段且未被占用);port="45564":多播端口;fork="true":启用异步复制,提升性能;className="org.apache.catalina.ha.session.DeltaManager":会话管理器,用于同步会话数据。
示例配置:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<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"
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>
2.2 配置应用支持集群
在需要集群部署的应用的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>
2.3 确保会话对象可序列化
所有存入HttpSession的对象必须实现java.io.Serializable接口,否则无法同步会话数据。例如:
public class UserSession implements Serializable {
private static final long serialVersionUID = 1L;
private String username;
private String role;
// getters and setters
}
3. 配置负载均衡(以Nginx为例)
3.1 安装Nginx
在单独的服务器(或其中一个Tomcat节点)上安装Nginx:
sudo apt update
sudo apt install nginx -y
3.2 配置Nginx上游服务器组
编辑Nginx配置文件(/etc/nginx/nginx.conf或/etc/nginx/conf.d/tomcat.conf),添加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 {
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;
}
}
}
3.3 启用会话保持(可选)
若应用需要保持用户会话(如购物车),可在upstream块中添加ip_hash指令,使同一用户的请求始终转发到同一Tomcat节点:
upstream tomcat_cluster {
ip_hash; # 会话保持
server 192.168.1.101:8080;
server 192.168.1.102:8080;
}
3.4 测试并重载Nginx
验证Nginx配置语法:sudo nginx -t,若无错误则重载配置:sudo systemctl reload nginx。
4. 启动集群并验证
4.1 启动Tomcat实例
在每个Tomcat节点上,进入/opt/tomcat/bin目录,启动Tomcat:
cd /opt/tomcat/bin
./startup.sh
4.2 验证集群状态
- 查看集群成员:访问任意Tomcat节点的管理页面(如
http://192.168.1.101:8080/manager/html),登录后查看“集群”栏目,应显示所有节点已加入集群。 - 测试会话同步:在应用中创建会话(如登录操作),访问不同Tomcat节点,验证会话数据是否同步。
- 测试负载均衡:通过Nginx域名访问应用,多次刷新页面,观察请求是否被分发到不同Tomcat节点(可通过节点首页的不同内容区分)。
5. 注意事项
- 时间同步:集群节点时间差过大会导致会话同步失败,需安装
ntp服务同步时间:sudo apt install ntp -y。 - 多播地址冲突:确保
server.xml中的address参数未被其他应用占用,若有冲突可更换为其他地址(如228.0.0.5)。 - 会话对象序列化:未实现
Serializable接口的对象会导致会话同步失败,需检查应用代码。 - 高可用扩展:若需更高的可用性,可结合Keepalived实现Nginx的高可用,或使用Redis集群替代Tomcat原生会话复制(适用于大规模集群)。
以上就是关于“Ubuntu Tomcat集群配置教程”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm