Tomcat在Ubuntu中的集群配置方法
小樊
42
2025-12-30 18:12:21
Ubuntu下搭建Tomcat集群的可落地方案
一 架构与准备
- 架构选型:前端使用Nginx或Apache HTTP Server + mod_jk做反向代理/负载均衡,后端运行多个Tomcat实例,开启会话复制实现故障切换与水平扩展。
- 节点规划:至少准备2台Ubuntu服务器(同一台也可多实例,需改端口),示例采用Tomcat 8/9与JDK 8+。
- 基础要求:
- 所有节点开启NTP时间同步,避免会话过期判断异常与集群组建失败。
- 各节点能通过本机非回环地址(非127.0.0.1)收发集群消息,必要时修正**/etc/hosts**主机名映射。
- 需要会话粘滞或容错时,确保放入Session的对象实现java.io.Serializable。
二 单机上多实例与端口规划
- 复制实例:将Tomcat目录复制为多份(如tomcat1、tomcat2),便于同机多实例测试。
- 修改关键端口(避免冲突):
- Server port(默认8005)
- HTTP Connector port(默认8080)
- AJP Connector port(默认8009)
- 示例(tomcat1→8180,tomcat2→8280;AJP对应改为8109/8209;Server分别改为8105/8205):
- tomcat1/conf/server.xml:
-
- <Connector port=“8180” protocol=“HTTP/1.1” … />
-
- tomcat2/conf/server.xml:
-
- <Connector port=“8280” protocol=“HTTP/1.1” … />
-
- 启动验证:分别启动两个实例,访问http://IP:8180与http://IP:8280确认可用。
三 配置Tomcat会话复制集群
- 启用内置集群:在server.xml的**或**下添加(Tomcat 7/8常见默认模板可直接取消注释启用):
-
- 要点:
- Membership的address/port为组播地址与端口,用于节点发现(同一集群需一致)。
- Receiver address填本机可路由IP(勿用127.0.0.1);同机多实例需为Receiver port设置不同值(如5000/5001)。
- 标记应用为可分布式:在应用的WEB-INF/web.xml中加入**,并确保会话属性对象实现Serializable**。
四 负载均衡前置配置
- 方案A Nginx反向代理(Ubuntu 18.04示例)
- 安装:sudo apt-get install nginx
- 配置/etc/nginx/nginx.conf的http段:
- upstream backend { server 192.168.1.101:8180; server 192.168.1.101:8280; }
- server { listen 80; location / { proxy_pass http://backend; } }
- 重载:sudo service nginx reload
- 方案B Apache + mod_jk
- 安装:sudo apt-get install apache2 libapache2-mod-jk
- 配置/etc/apache2/mods-enabled/jk.conf与/etc/libapache2-mod-jk/workers.properties,定义worker.list=loadbalancer与各worker.tomcatN的type ajp13、host、port(如8009),并配置JkMount /* loadbalancer。
五 组播网络与验证
- 组播支持检查与路由:
- ifconfig查看网卡是否含MULTICAST标志;必要时添加路由:
- sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev ethX
- 本地回环也建议:sudo route add -net 224.0.0.0 netmask 240.0.0.0 dev lo
- 组播连通性测试(下载tomcat-replication.jar):
- Terminal1:java -cp tomcat-replication.jar MCaster 228.0.0.4 45564
- Terminal2:java -cp tomcat-replication.jar MCaster 228.0.0.4 45564
- 集群与应用验证:
- 访问Nginx/Apache入口,登录后检查JSESSIONID后缀是否变化;停掉某实例后刷新,确认会话仍可用(无感切换)。
- 使用PSI Probe观察各节点与会话复制情况。