Ubuntu JSP应用如何实现高可用性
小樊
35
2026-01-12 09:20:01
架构总览
- 在 Ubuntu 上构建高可用的 JSP 应用,通常采用“负载均衡层 + 多实例 Tomcat 层 + 共享会话/数据层”的三层架构。
- 负载均衡层:使用 Nginx 或 Apache HTTP Server 做反向代理/负载均衡;在入口再叠加 Keepalived + VIP 实现控制平面的故障切换,避免单点。
- 应用层:至少部署 2 台 Tomcat 实例(不同端口或不同主机),统一对外提供 HTTP 8080 或 AJP 8009 服务。
- 数据与会话:数据库主从或集群;会话使用 Tomcat 集群会话复制 或外置 Redis 集中会话,保证故障切换时用户不丢失登录态。
部署步骤
- 准备环境
- 安装 OpenJDK 11(或项目所需版本):sudo apt update && sudo apt install openjdk-11-jdk
- 安装 Tomcat 9(示例):sudo apt install tomcat9
- 安装 Nginx:sudo apt install nginx
- 部署多个 Tomcat 实例
- 方式 A(单机多实例):复制 $CATALINA_HOME,分别修改 server.xml 中的 Server port、Connector 8080、AJP 8009、shutdown 端口 避免冲突。
- 方式 B(多机多实例):每台机器部署一个 Tomcat,保持版本与配置一致,便于横向扩展。
- 配置负载均衡(以 Nginx 为例)
- 在 /etc/nginx/nginx.conf 或 /etc/nginx/sites-available/default 中定义 upstream 与反向代理:
- upstream tomcat_cluster { server 10.0.0.11:8080; server 10.0.0.12:8080; }
- 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:sudo systemctl restart nginx
- 会话保持与集群(二选一或组合)
- Tomcat 内置集群:在 server.xml 的 Engine 下加入 ,并为各实例配置一致的 jvmRoute 与组播通信参数。
- 外置会话:引入 Redis 等集中会话存储,应用改造为无状态会话。
- 数据库高可用
- 采用主从复制/读写分离/集群(如 InnoDB Cluster、ProxySQL),应用使用连接池并合理设置超时与重试。
- 健康检查与优雅下线
- Nginx 配置主动健康检查或被动重试;Tomcat 支持优雅停机与部署策略(蓝绿/金丝雀)以减少中断。
- 监控与告警
- 监控 JVM GC、线程、连接池、QPS/RT、HTTP 5xx、系统资源;日志集中化与告警联动。
关键配置示例
- Nginx 负载均衡(HTTP)
- upstream backend { server 10.0.0.11:8080; server 10.0.0.12:8080; }
- server { listen 80; location / { proxy_pass http://backend; 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; } }
- Apache HTTP Server 负载均衡(AJP + mod_proxy_balancer)
- 启用模块:sudo a2enmod proxy proxy_http proxy_ajp lbmethod_byrequests
- <Proxy balancer://mycluster> BalancerMember ajp://10.0.0.11:8009 BalancerMember ajp://10.0.0.12:8009
- ProxyPass / balancer://mycluster/ ProxyPassReverse / balancer://mycluster/
- Tomcat 集群片段(server.xml)
- (配合 Receiver/Valve 等参数按需细化)
高可用增强
- 入口双机 + VIP:两台 Nginx/Keepalived 主机组成主备,使用 VRRP 共享虚拟 IP(VIP)。示例:state MASTER/BACKUP、priority 100/90、virtual_ipaddress { 192.168.1.100 };主机故障自动切换,保障控制面不中断。
- 会话容灾:优先使用 Redis 集中会话;若用 Tomcat 集群复制,确保网络稳定与序列化安全,避免因网络分区导致脑裂。
- 连接与会话泄漏治理:配置 数据库连接池(最大连接、超时、验证查询),设置 会话超时 与惰性回收,防止 OOM 与连接枯竭。
- 静态资源与前端优化:启用 压缩、合并、CDN,减少后端渲染与带宽压力,提升首屏与整体体验。
测试与运维清单
- 验证项:
- 负载均衡分发到多个 Tomcat 实例(日志或返回体标记)。
- 会话保持:登录后访问不同节点仍能保持登录态(集群或 Redis 生效)。
- 故障演练:停止主 Nginx 或某台 Tomcat,观察 VIP 漂移 与业务恢复时间。
- 回滚预案:版本发布采用 蓝绿/金丝雀,异常一键回滚。
- 日常运维:
- 持续监控 JVM GC、线程、连接池、HTTP 5xx、磁盘/IO、网络;设置阈值告警。
- 定期压测与容量评估,按峰谷动态扩缩实例;配置 日志轮转 与审计。