Apache 中 Tomcat 部署怎么在主备高可用架构中实现故障自动转移

云雪吖_5118

云雪吖_5118

2026-09-02

1028人浏览

原创

apache与tomcat主备高可用由keepalived(vip漂移)、健康检查脚本(业务级探测)、apache(反向代理+后端健康剔除)和tomcat(无状态+外置会话)协同实现,核心是“谁发现故障、谁触发切换、谁承接流量”。

apache 中 tomcat 部署怎么在主备高可用架构中实现故障自动转移

Apache 与 Tomcat 联合构建主备高可用架构时,故障自动转移不是靠单个组件完成的,而是由 Keepalived(负责 VIP 漂移)、健康检查脚本(探测服务存活)、Apache(反向代理/负载分发)和 Tomcat(应用层无状态或会话外置)四者协同实现。核心在于“谁发现故障、谁触发切换、谁承接流量”。

Keepalived 管理虚拟 IP 漂移

Keepalived 是主备切换的执行中枢,通过 VRRP 协议在主节点和备节点间选举 MASTER 角色,并绑定同一个 VIP(如 10.10.0.40)。当主节点异常,备节点在几秒内接管 VIP,所有发往该 IP 的请求自然转向备机。

  • 主节点配置 state MASTER、优先级(如 priority 100),备节点设为 state BACKUP、较低优先级(如 priority 90)
  • 必须配置 track_script 关联自定义健康检查脚本(如检测 Apache 是否响应 /health 或端口 80 是否监听)
  • 一旦脚本返回非零值,Keepalived 自动降级自身状态,触发 VRRP 投票,备节点升为 MASTER 并绑定 VIP

Apache 作为反向代理承担流量分发与健康感知

Apache 不仅转发请求到后端 Tomcat,还可通过 mod_proxy_balancer 实现主动健康检查,剔除不可用节点。即使 Keepalived 已完成 VIP 切换,Apache 仍需确保不把请求打到已宕机的 Tomcat 实例上。

Apache Superset Dashboard and SQL Exploration Skill
Apache Superset Dashboard and SQL Exploration Skill

Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。

下载
  • 启用 ProxyStatus on 和 <proxy balancer:></proxy> 定义后端 Tomcat 列表
  • 配置 ping=5 参数让 Apache 每 5 秒对每个 Tomcat 发起轻量探测(如 HEAD /)
  • 结合 failonstatus=503 或自定义 retry=60,实现在连续失败后临时下线该 Tomcat 节点
  • 若使用 sticky session,需确保 jvmRoute 与 Tomcat 的 server.xml 中配置一致,避免会话错乱

Tomcat 侧保障无状态与会话可恢复

Tomcat 本身不参与 VIP 切换,但它的部署方式直接影响故障转移是否“无感”。关键是要消除本地状态依赖。

  • 禁用默认 StandardManager,改用 MemcachedSessionManager 或 RedisSessionManager,将会话存到共享缓存中
  • 确保每个 Tomcat 实例的 jvmRoute 唯一(如 jvmRoute="tomcat1"),便于 Apache 做粘性路由或故障后重映射
  • 关闭 expireSessionsOnShutdown="true",防止进程退出时主动销毁会话数据
  • 静态资源、上传文件等不能存在本地磁盘,应统一走对象存储或 NFS

健康检查脚本要真实反映服务可用性

Keepalived 的 vrrp_script 如果只检查进程是否存在,就无法发现 Apache 配置错误、Tomcat 启动但未加载应用、或数据库连不上导致 500 的情况。脚本必须深入业务层面。

  • 推荐检查路径如 curl -f -s -o /dev/null http://127.0.0.1:80/health?ready=1,后端返回 200 才算通过
  • 响应时间超 2 秒、返回非 200 状态码、或 body 不含预期字符串(如 "status":"up"),均应退出并返回非零码
  • 脚本中加入日志记录(如 echo "$(date): fail" >> /var/log/keepalived_health.log),便于复盘切换原因
  • 避免检查过于频繁(interval 2 已足够),防止压垮健康接口

相关专题

更多
如何配置Tomcat环境变量
如何配置Tomcat环境变量

配置Tomcat环境变量需要在系统中添加CATALINA_HOME变量,并将Tomcat的安装路径添加到PATH变量中。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.26

785

5

idea如何集成Tomcat
idea如何集成Tomcat

idea集成Tomcat的步骤:1、添加Tomcat服务器配置;2、配置项目部署;3、运行Tomcat服务器;4、访问项目;5、注意事项;6、关闭Tomcat服务器。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

304

5

怎么查看Tomcat源代码
怎么查看Tomcat源代码

查看Tomcat源代码的步骤:1、下载Tomcat源代码;2、在IDEA中导入Tomcat源代码;3、查看源代码;4、理解Tomcat的工作原理;5、参与社区和贡献;6、注意事项;7、持续学习和更新;8、使用工具和插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

489

5

常见的tomcat漏洞有哪些
常见的tomcat漏洞有哪些

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

285

5

tomcat日志乱码怎么解决
tomcat日志乱码怎么解决

tomcat日志乱码的解决办法:1、修改tomcat的日志编码设置;2、检查ide的编码设置;3、检查操作系统的编码设置;4、使用过滤器处理日志;5、检查外部系统的编码设置;6、检查文件编码方式等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

348

5

weblogic和tomcat有哪些区别
weblogic和tomcat有哪些区别

weblogic和tomcat的区别:1、功能;2、性能;3、规模;4、价格;5、安全性;6、配置和管理;7、社区支持;8、集成能力;9、升级和更新;10、可靠性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

349

5

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

581

5

tomcat启动闪退怎么解决
tomcat启动闪退怎么解决

tomcat启动闪退的解决办法:1、检查java环境;2、检查环境变量配置;3、检查端口被占用;4、检查配置文件编码;5、检查启动时需要的配置文件;6、检查相关文件是否丢失;7、检查防火墙和杀毒软件设置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

322

5

有哪些常见的tomcat漏洞
有哪些常见的tomcat漏洞

常见的tomcat漏洞有:1、跨站脚本攻击;2、跨站请求伪造;3、目录遍历漏洞;4、缓冲区溢出漏洞;5、配置漏洞;6、第三方组件漏洞。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

2633

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Apache Maven 官方安装指南
Apache Maven 官方安装指南

共0课时 | 0人学习

Apache Maven 官方用户中心
Apache Maven 官方用户中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习