CentOS下Tomcat集群搭建步骤
导读:CentOS 下 Tomcat 集群搭建步骤 一 环境准备与安装 准备至少 2 台 CentOS 7/8 服务器,建议内网互通,规划好 VIP/域名 与业务端口(HTTP 默认 8080,AJP 默认 8009,关闭端口默认 8005)。...
CentOS 下 Tomcat 集群搭建步骤
一 环境准备与安装
- 准备至少 2 台 CentOS 7/8 服务器,建议内网互通,规划好 VIP/域名 与业务端口(HTTP 默认 8080,AJP 默认 8009,关闭端口默认 8005)。
- 安装 JDK 8(所有节点版本保持一致):
- 安装 OpenJDK:
sudo yum install -y java-1.8.0-openjdk-devel - 或安装 Oracle JDK 并设置环境变量(/etc/profile):
export JAVA_HOME=/usr/java/jdk1.8.0_xxxexport PATH=$JAVA_HOME/bin:$PATH
- 安装 OpenJDK:
- 下载并解压 Apache Tomcat 9(所有节点版本保持一致):
wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.56/bin/apache-tomcat-9.0.56.tar.gztar xvf apache-tomcat-9.0.56.tar.gz -C /optsudo mv /opt/apache-tomcat-9.0.56 /opt/tomcat
- 创建专用用户并赋权:
sudo useradd -r -m -U -d /opt/tomcat -s /sbin/nologin tomcatsudo chown -R tomcat:tomcat /opt/tomcat
- 开放防火墙端口(示例):
sudo firewall-cmd --permanent --add-port=8080/tcpsudo firewall-cmd --permanent --add-port=8009/tcpsudo firewall-cmd --reload
- 可选:为便于 systemd 管理,在
$CATALINA_HOME/bin/catalina.sh顶部添加CATALINA_PID=/var/run/tomcat.pid,并创建 systemd 服务(示例见文末附录)。
二 多实例与基础配置
- 在同一台机器部署多实例时,需修改各实例的 Server、Connector、AJP、Shutdown 端口避免冲突;跨机器部署则保持默认端口一致即可。
- 示例(实例 1 使用默认端口,实例 2 调整如下):
- server.xml:
< Server port="8105" shutdown="SHUTDOWN">< Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />< Connector port="8109" protocol="AJP/1.3" redirectPort="8443" />
- server.xml:
- 为会话粘滞与路由识别,给每个实例的 Engine 设置唯一 jvmRoute(如:node1、node2):
< Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
- 部署应用:将 WAR 放入各实例的 webapps/ 目录,Tomcat 启动会自动部署。
三 配置 Tomcat 集群会话复制
- 方式 A 内置组播复制(SimpleTcpCluster,适合同网段)
- 在 server.xml 的 Engine 内加入(或确保存在)如下片段:
< 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=""/> < Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> < ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/> < /Cluster> - 说明:
- 组播地址 228.0.0.4 与端口 45564 需在所有节点保持一致;如跨网段或云环境禁用了组播,请改用外置会话存储(方式 B)。
- 各实例的 Receiver port=4000 在同一台机器需不同,跨机器可一致。
- 在 server.xml 的 Engine 内加入(或确保存在)如下片段:
- 方式 B 外置会话存储(Redis/Memcached,跨机房/云环境推荐)
- 引入相应 Valve/Filter(如 Redisson、Memcached Session Manager 等),将 session 存入集中缓存,天然支持扩缩容与跨网段。
- 应用需支持会话序列化:确保会话属性实现 Serializable。
四 部署负载均衡
- 方案 1:Nginx 作为反向代理与负载均衡(推荐,简单通用)
- 安装:
sudo yum install -y nginx - 配置 /etc/nginx/nginx.conf(示例):
http { upstream tomcat_cluster { server 192.168.10.11:8080; server 192.168.10.12:8080; # 可选:开启会话粘滞(配合 jvmRoute) # ip_hash; } 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; } } } - 启动:
sudo systemctl enable --now nginx
- 安装:
- 方案 2:Apache HTTP Server + mod_jk(AJP,传统方案)
- 安装 Apache 与编译/启用 mod_jk,配置 workers.properties(示例):
worker.list=loadbalancer worker.worker1.type=ajp13 worker.worker1.host=192.168.10.11 worker.worker1.port=8009 worker.worker2.type=ajp13 worker.worker2.host=192.168.10.12 worker.worker2.port=8009 worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=worker1,worker2 worker.loadbalancer.sticky_session=1 - 在 httpd.conf 中加载 mod_jk 并挂载应用:
JkMount /* loadbalancer。
- 安装 Apache 与编译/启用 mod_jk,配置 workers.properties(示例):
五 启动与验证
- 启动服务:
- Tomcat:
sudo -u tomcat /opt/tomcat/bin/startup.sh(或使用 systemd) - Nginx:
sudo systemctl start nginx
- Tomcat:
- 健康检查:
curl -I http://< LB_IP> /应返回 200/302 等成功状态码ss -lntp | grep -E '8080|8009|80'检查端口监听
- 会话保持验证:
- 部署测试页面(打印 session.getId() 与 jvmRoute),多次刷新或并发访问,确认请求在节点间切换时 session 不丢失;若使用 jvmRoute,登录后不应出现频繁被踢出。
- 日志排查:
- Tomcat:
tail -f /opt/tomcat/logs/catalina.out /opt/tomcat/logs/localhost*.log - 集群复制:关注 ReplicationValve、Cluster 相关日志
- Nginx:
tail -f /var/log/nginx/access.log /var/log/nginx/error.log
- Tomcat:
- 扩缩容与维护:新增节点时保持 Tomcat 版本、应用版本、集群配置 一致;变更前在 Nginx upstream 中先摘除节点,完成滚动升级后再恢复。
附录 systemd 服务示例
- 创建文件:/usr/lib/systemd/system/tomcat.service
[Unit] Description=Apache Tomcat After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/var/run/tomcat.pid Environment=JAVA_HOME=/usr/java/jdk1.8.0_xxx Environment=CATALINA_HOME=/opt/tomcat ExecStart=/opt/tomcat/bin/startup.sh ExecStop=/opt/tomcat/bin/shutdown.sh User=tomcat Group=tomcat PrivateTmp=true [Install] WantedBy=multi-user.target - 启用与启动:
sudo systemctl daemon-reloadsudo systemctl enable --now tomcat
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS下Tomcat集群搭建步骤
本文地址: https://pptw.com/jishu/785599.html
