Ubuntu下Tomcat的集群配置怎么做
导读:Ubuntu下Tomcat集群配置步骤 一 环境准备与端口规划 准备至少2台 Ubuntu 服务器(同一内网),安装相同版本的 JDK 与 Tomcat。 每台机器上规划多个实例时,修改以下端口避免冲突:Server port(默认800...
Ubuntu下Tomcat集群配置步骤
一 环境准备与端口规划
- 准备至少2台 Ubuntu 服务器(同一内网),安装相同版本的 JDK 与 Tomcat。
- 每台机器上规划多个实例时,修改以下端口避免冲突:Server port(默认8005)、HTTP Connector(默认8080)、AJP Connector(默认8009)、以及集群通信的 Receiver port(默认4000)。
- 示例两台机器的实例端口规划如下(可按需调整):
| 节点 | Server port | HTTP | AJP | Receiver port |
|---|---|---|---|---|
| node1 | 8005 | 8080 | 8009 | 4000 |
| node2 | 8006 | 8081 | 8010 | 4001 |
- 建议所有节点时间同步(如配置 NTP),避免会话过期判断与集群建立异常。
二 配置Tomcat集群会话复制
- 在每个节点的 conf/server.xml 的 内添加或启用 。示例(两台机器分别使用各自的 Receiver 端口):
<
Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
<
Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
<
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.TcpFailureDetector"/>
<
Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
<
/Channel>
<
Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
<
ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
<
/Cluster>
<
/Engine>
- 在需要会话复制的应用的 WEB-INF/web.xml 中添加 。
- 放入会话的对象必须实现 java.io.Serializable。
- 如需在同一台机器运行多个实例,请确保各实例的 Receiver port 唯一,且 Engine 的 jvmRoute 唯一(如:tomcat1、tomcat2),便于后续粘性会话与路由。
三 配置负载均衡
- 方案A(Apache + mod_jk,AJP)
- 安装模块:sudo apt-get install libapache2-mod-jk
- 编辑 workers.properties(示例为两台 AJP 节点):
worker.list=loadbalancer,status worker.tomcat1.port=8009 worker.tomcat1.host=192.168.1.10 worker.tomcat1.type=ajp13 worker.tomcat1.lbfactor=1 worker.tomcat2.port=8010 worker.tomcat2.host=192.168.1.11 worker.tomcat2.type=ajp13 worker.tomcat2.lbfactor=1 worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=tomcat1,tomcat2 worker.loadbalancer.sticky_session=1 worker.status.type=status- 启用模块并配置 VirtualHost(示例):
LoadModule jk_module modules/mod_jk.so JkWorkersFile /path/to/workers.properties JkLogFile /var/log/apache2/mod_jk.log JkLogLevel info < VirtualHost *:80> ServerName yourdomain.com JkMount /* loadbalancer JkMount /jk-status status < /VirtualHost> - 方案B(Nginx,HTTP Proxy)
- 安装:sudo apt-get install nginx
- 配置 /etc/nginx/sites-available/cluster.conf:
upstream tomcat_cluster { server 192.168.1.10:8080; server 192.168.1.11:8081; } server { listen 80; 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; } }- 启用站点并重启 Nginx。
四 启动与验证
- 启动所有 Tomcat 实例,再启动 Apache/ Nginx。
- 访问应用,观察日志(catalina.out、mod_jk.log 或 nginx/access.log)确认请求被分发到不同节点。
- 验证会话复制:
- 在应用首页打印 JSESSIONID,刷新后检查是否保持同一会话或按策略变更;
- 关闭当前承载会话的节点,确认请求被其他节点接管且会话未丢失(粘性会话或外置 Session 存储生效时更明显);
- 使用 PSI Probe 等工具查看集群节点与会话状态。
五 常见问题与优化
- 组播不通:确认云环境未屏蔽 IGMP/组播,或改用 静态成员(StaticMembershipInterceptor);检查 address=228.0.0.4、port=45564 在各节点一致且网络可达。
- Receiver 绑定错误:将 Receiver address 设为非 127.0.0.1 的本机地址,确保多实例端口不冲突。
- 时间漂移:配置 NTP 同步所有节点时间。
- 会话可序列化:所有放入 HttpSession 的对象实现 Serializable。
- 应用分发:为需要复制的应用添加 。
- 会话保持策略:
- 使用 粘性会话(如 mod_jk 的 sticky_session=1)可减少复制量,但节点宕机会丢失该节点上的会话;
- 使用 外置 Session 存储(如 Memcached)可实现会话共享与故障不丢。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu下Tomcat的集群配置怎么做
本文地址: https://pptw.com/jishu/755819.html
