如何在centos实现tomcat集群
导读:在 CentOS 上搭建 Tomcat 集群的实用步骤 一、架构与准备 架构建议:使用 Nginx 作为四层/七层反向代理与负载均衡,后端部署 2–N 个 Tomcat 实例;如需进一步提升整体可用性,可在 Nginx 前再加一层 Kee...
在 CentOS 上搭建 Tomcat 集群的实用步骤
一、架构与准备
- 架构建议:使用 Nginx 作为四层/七层反向代理与负载均衡,后端部署 2–N 个 Tomcat 实例;如需进一步提升整体可用性,可在 Nginx 前再加一层 Keepalived VIP 实现负载均衡器的高可用。会话保持可通过 Tomcat 内置集群的会话复制实现,也可采用外置 Memcached/Redis 方案。
- 环境与版本建议:CentOS 7/8/Stream,安装 Java 8/11/17(与所用 Tomcat 版本匹配),Tomcat 9/10 均可。
- 网络与防火墙:开放 80/443(Nginx)、各 Tomcat 的 8080(或自定义 HTTP 端口)、集群通信端口(见下文)、以及必要管理端口;云环境需同步配置安全组规则。
- 目录规划:建议将 Tomcat 统一放置在 /opt/tomcat/,并为每个实例使用独立目录(如 /opt/tomcat/node1、/opt/tomcat/node2)。
二、安装与基础配置
- 安装 Java(示例为 OpenJDK 8):
- 命令:
sudo yum install -y java-1.8.0-openjdk-devel - 验证:
java -version与javac -version
- 命令:
- 安装 Tomcat(示例为 Tomcat 9):
- 下载与解压:
wget https://archive.apache.org/dist/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/node1 - 如需多实例,复制目录为 node2,并分别修改各实例的 server.xml 中的 Server port(默认 8005) 与 Connector port(默认 8080),避免端口冲突。
- 下载与解压:
- 启动与验证:
- 启动:
/opt/tomcat/node1/bin/startup.sh - 验证:访问
http://< 节点IP> :8080出现 Tomcat 欢迎页。
- 启动:
三、配置 Tomcat 集群与会话复制
- 启用内置集群(最小配置):在每个实例的 $CATALINA_HOME/conf/server.xml 的 内加入:
如需更可控的复制参数,可使用如下较完整示例(按需调整):< Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
关键要点:< 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.cala.catalina.ha.tcp.ReplicationValve" filter=""/> < Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> < ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> < /Cluster>- 各实例的 Receiver port(如 4000) 必须唯一;同一主机多实例需显式设置不同端口。
- 组播地址 228.0.0.4:45564 需网络可达;云上或受限网络可改用 静态成员(StaticMembershipInterceptor) 或切换为外置会话共享方案。
- 应用开启分布式会话:在应用的 WEB-INF/web.xml 的 根节点加入:
< distributable/> - 可选优化:为各实例设置 jvmRoute(在 上)以便粘滞会话与故障排查,例如:
jvmRoute="tomcat1"、jvmRoute="tomcat2"。
四、配置 Nginx 负载均衡
- 安装 Nginx:
- 命令:
sudo yum install -y nginx
- 命令:
- 配置 upstream 与反向代理(/etc/nginx/nginx.conf 或 /etc/nginx/conf.d/tomcat.conf):
http { upstream tomcat_cluster { server 192.168.1.11:8080; server 192.168.1.12:8080; # 可按需增加权重、健康检查等 } server { listen 80; server_name yourdomain.com; 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; } } } - 启动与验证:
- 启动:
sudo systemctl start nginx & & sudo systemctl enable nginx - 验证:访问
http://< Nginx_IP> /能正常打开应用,并在多节点间轮询。
- 启动:
五、验证、扩展与常见问题
- 验证集群与会话复制:
- 部署一个能打印 JSESSIONID 的测试页,连续刷新观察是否出现 JVMRoute 后缀变化且会话不丢失(登录态/购物车等不中断)。
- 查看各节点 catalina.out 是否有集群成员加入、复制消息与异常堆栈。
- 扩展为高可用:
- 在 两台 Nginx 前部署 Keepalived,通过 VRRP 提供 VIP,实现负载均衡器故障自动切换,进一步提升整体可用性。
- 常见问题与处理:
- 端口冲突:确保各实例的 Server port、Connector port、Receiver port 唯一且防火墙放行。
- 组播不通:云环境常禁用或限制 IGMP/多播,可改用 静态成员 或采用 Memcached/Redis 会话共享方案(如 memcached-session-manager)。
- 应用未启用分布式会话:确认 web.xml 包含 。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在centos实现tomcat集群
本文地址: https://pptw.com/jishu/776790.html
