Tomcat在Ubuntu上的集群配置指南
sudo apt install openjdk-11-jdk)。/etc/sysctl.conf,添加以下内容:net.ipv4.icmp_echo_ignore_broadcasts=0
net.ipv4.conf.all.mc_forwarding=1
net.ipv4.conf.default.mc_forwarding=1
执行sudo sysctl -p使配置生效。在所有节点上执行以下步骤:
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gz
tar xvf apache-tomcat-9.0.56.tar.gz
sudo mv apache-tomcat-9.0.56 /opt/tomcat
cd /opt/tomcat/bin
./startup.sh
访问http://<节点IP>:8080,确认Tomcat运行正常。server.xml(关键配置)编辑/opt/tomcat/conf/server.xml,在<Engine>标签内添加集群配置(以SimpleTcpCluster为例):
<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" <!-- 组播地址(224.0.0.0-239.255.255.255) -->
port="45564" <!-- 组播端口 -->
frequency="500" <!-- 心跳频率(ms) -->
dropTime="3000"/> <!-- 节点超时时间(ms) -->
<!-- 接收器(本地监听端口,多实例需修改port避免冲突) -->
<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>
<!-- 会话复制阀(过滤无需复制的请求,如静态资源) -->
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif|.*\.js|.*\.jpg|.*\.png|.*\.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>
说明:
address和port:组播地址和端口需在同一集群内保持一致,用于节点发现。Receiver port:多实例需修改为不同端口(如4001、4002),避免冲突。filter:排除静态资源(如图片、CSS),减少不必要的复制开销。编辑需集群部署的应用的WEB-INF/web.xml,添加<distributable/>标签:
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
version="3.1">
<distributable/> <!-- 标识应用支持分布式部署 -->
</web-app>
说明:该标签告知Tomcat该应用需启用会话复制功能。
使用Nginx作为负载均衡器(推荐),实现请求分发和故障转移:
sudo apt update
sudo apt install nginx
/etc/nginx/sites-available/tomcat_cluster(新建文件),添加以下内容:upstream tomcat_cluster {
server <节点1IP>:8080; # 替换为节点1的IP
server <节点2IP>:8080; # 替换为节点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;
}
}
sudo ln -s /etc/nginx/sites-available/tomcat_cluster /etc/nginx/sites-enabled/
sudo nginx -t # 测试配置语法
sudo systemctl restart nginx
说明:Nginx默认使用轮询算法分发请求,支持sticky_session(粘性会话,可选)避免会话频繁切换。
http://<节点IP>:8080/manager/html),查看“集群”栏目,应显示所有节点状态为“running”。HttpSession的应用(如session.jsp,内容为<%= session.getId() %>),通过Nginx访问。刷新页面,观察会话ID是否在不同节点间保持一致(如节点1返回ABC123,节点2也返回ABC123)。ntp同步时间:sudo apt install ntp
sudo systemctl enable ntp
sudo systemctl start ntp
context.xml,使用PersistentManager)。PSI Probe(Tomcat监控工具)实时查看集群状态、会话数量、请求分发情况。通过以上步骤,即可在Ubuntu上完成Tomcat集群配置,实现负载均衡、高可用性和会话复制功能。