阅读量:2
架构总览
- 在 CentOS 上构建 Tomcat 高可用,通常采用“负载均衡层 + Tomcat 集群层 + 会话保持/复制”的三层架构。
- 负载均衡层:使用 Nginx(或 HAProxy/Apache httpd+mod_jk)对外提供统一入口,并做健康检查与故障转移。
- Tomcat 集群层:多台服务器或多实例运行相同应用,通过 SimpleTcpCluster 实现会话复制,保证节点宕机不丢会话。
- 会话与数据:优先使用“应用无状态 + 外置会话存储(如 Redis)”,或采用 Tomcat 内置的 DeltaManager 进行内存复制;共享文件/上传目录建议放到 NFS/对象存储,数据库使用主从或集群。
部署步骤
- 准备环境
- 安装 JDK 8/11,统一 Tomcat 版本 与目录结构;为每台服务器(或同机多实例)规划唯一标识(如 jvmRoute=node1)。
- 如部署多实例,修改 server.xml 中的 Server port(8005)、Connector port(8080)、AJP port(8009) 与 shutdown port,避免端口冲突。
- 部署多个 Tomcat 实例
- 建议同机多实例时按目录复制模板实例并逐一调整端口;跨机部署时保持版本与配置一致,便于运维与回滚。
- 配置 Tomcat 集群与会话复制
- 在 server.xml 的
内加入: - 集群:
- 节点标识:
(各实例唯一)
- 集群:
- 在 context.xml 启用会话复制:
-
- 在应用的 WEB-INF/web.xml 增加
,声明应用支持分布式会话。
- 在 server.xml 的
- 配置负载均衡器(以 Nginx 为例)
- 安装:sudo yum install -y nginx
- 配置 /etc/nginx/nginx.conf 或 /etc/nginx/conf.d/tomcat.conf:
- upstream:server node1:8080; server node2:8080;
- location /:proxy_pass 到 upstream;设置 Host/X-Real-IP/X-Forwarded-For/X-Forwarded-Proto 头。
- 健康检查与故障转移:在 upstream 中为 server 增加 max_fails=3 fail_timeout=30s 等参数,自动摘除异常节点。
- 启动与验证
- 启动 Tomcat 集群与 Nginx;访问负载均衡地址,观察请求在多实例间分发;登录各实例日志与监控,确认会话复制与健康检查生效。
关键配置示例
- Nginx 负载均衡与健康检查
http {
upstream tomcat_cluster {
server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.12:8080 max_fails=3 fail_timeout=30s;
# 可选:ip_hash; 或 nginx-plus 的 health_check;
}
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;
}
}
}
- Tomcat 内置集群与会话复制(server.xml 片段)
- 应用开启分布式会话(WEB-INF/web.xml)
- 可选:使用 Apache httpd + mod_jk(AJP)
# workers.properties
worker.list=loadbalancer
worker.node1.type=ajp13
worker.node1.host=192.168.1.11
worker.node1.port=8009
worker.node2.type=ajp13
worker.node2.host=192.168.1.12
worker.node2.port=8009
worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=1
# httpd.conf
LoadModule jk_module modules/mod_jk.so
JkWorkersFile conf/workers.properties
JkMount /* loadbalancer
以上示例覆盖了 Nginx/HAProxy/mod_jk 三种常见负载均衡方式、Tomcat 内置 DeltaManager 复制与 jvmRoute 使用要点。
进阶与最佳实践
- 提升入口高可用:在 Nginx 前再加一层 Keepalived VIP,实现 主备自动切换,对外暴露 虚拟IP,消除单点。
- 会话方案选型:
- 小规模且可接受内存复制时,用 DeltaManager;跨机房/大规模建议 外置 Redis/Memcached 集中会话,避免网络分区导致脑裂与复制风暴。
- 健康检查增强:
- Nginx 开源版可用 max_fails/fail_timeout 与主动探测脚本;若需更细粒度,可使用 Nginx Plus 的 health_check 或引入 HAProxy 做四层/七层健康探测。
- 单机上多实例部署:
- 按目录复制实例并逐一修改 Server/Connector/AJP 端口;用 systemd 或自定义脚本管理多实例启停与日志轮转。
- 监控与可观测性:
- 暴露 JMX 或 Prometheus JMX Exporter,结合 Grafana 做指标与告警;日志统一收集(如 rsyslog/filebeat),便于排障与审计。
验证与故障演练
- 基础验证
- 访问 VIP/域名,多次刷新或并发请求,确认请求在多个 Tomcat 实例间轮询;查看 Nginx access/error 与各实例 catalina.out,核对后端命中与健康检查状态。
- 会话保持与复制验证
- 登录应用生成 JSESSIONID,在响应头或页面中打印 session ID 与 jvmRoute;停掉当前承载实例,刷新页面,确认会话仍可用且 jvmRoute 变化符合预期(无感切换)。
- 故障演练
- 依次关闭某台 Tomcat 或模拟网络抖动,观察 Nginx 摘除节点、业务无中断;恢复节点后验证自动回归与健康检查恢复。
以上就是关于“centos下tomcat如何实现高可用性”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm