centos上tomcat高可用性配置
导读:架构与组件 前端入口:使用 Nginx 作为反向代理与负载均衡,将请求分发到后端多个 Tomcat 实例。 会话保持:Tomcat 节点间启用内置集群的 会话复制(DeltaManager),保证节点故障时会话不丢失。 入口高可用:在 N...
架构与组件
- 前端入口:使用 Nginx 作为反向代理与负载均衡,将请求分发到后端多个 Tomcat 实例。
- 会话保持:Tomcat 节点间启用内置集群的 会话复制(DeltaManager),保证节点故障时会话不丢失。
- 入口高可用:在 Nginx 前部署 Keepalived 提供 VIP,实现主备自动切换。
- 典型拓扑:两台 Nginx+Keepalived(主/备),两台或多台 Tomcat 实例。
部署步骤
- 准备环境
- 安装 JDK 8(所有节点一致版本),配置环境变量;安装并启动 Tomcat(建议同版本)。
- 规划实例端口,避免同机多实例端口冲突(如 8080/8081,对应 8005/9005 关闭端口、8009/8010 AJP 端口)。
- 配置 Tomcat 集群与会话复制
- 在 server.xml 的 上设置唯一 jvmRoute(如 node1、node2),并加入 。
- 在 conf/context.xml 的 中启用集群会话管理(DeltaManager),并为需要会话粘滞的应用在 web.xml 增加 。
- 配置 Nginx 负载均衡
- 在 /etc/nginx/conf.d/tomcat.conf 定义 upstream 指向各 Tomcat 的 8080 端口,location 中使用 proxy_pass 并传递 Host/X-Real-IP/X-Forwarded-For/X-Forwarded-Proto 等头。
- 配置 Keepalived 主备
- 两台 Nginx 分别部署 Keepalived,主节点 state=MASTER、备节点 state=BACKUP,设置 virtual_router_id 一致、priority 主高备低,配置 virtual_ipaddress(VIP);启用 vrrp_instance 与认证。
- 启动与验证
- 启动 Tomcat → 启动 Nginx → 启动 Keepalived;访问 VIP 验证轮询与故障切换。
关键配置示例
- Nginx 负载均衡(/etc/nginx/conf.d/tomcat.conf)
http {
upstream tomcat_cluster {
server 192.168.205.152:8080 max_fails=3 fail_timeout=30s;
server 192.168.205.153:8080 max_fails=3 fail_timeout=30s;
}
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 片段)
<
Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
<
Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
<
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>
<
/Engine>
- Keepalived 主节点(/etc/keepalived/keepalived.conf 片段)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS;
auth_pass 42 }
virtual_ipaddress {
192.168.205.135/24 }
}
- 应用开启会话分发(WEB-INF/web.xml)
<
web-app ...>
<
distributable/>
<
/web-app>
- 健康检查与故障转移要点
- Nginx 使用 max_fails/fail_timeout 进行后端健康检查与摘除;Keepalived 通过 VRRP 实现 VIP 漂移,主节点宕机后 VIP 自动漂移至备节点。
验证与运维
- 会话粘滞与复制验证
- 部署测试页打印 SessionID 与服务器标识,刷新与关闭节点验证会话是否保持与复制生效。
- 健康检查与摘除
- 停止某 Tomcat 实例,Nginx 应在 fail_timeout 后将实例标记为不可用并继续服务其余实例。
- 主备切换演练
- 停止主 Nginx 或关闭网卡,观察 VIP 是否漂移至备机、访问是否不受影响。
- 监控与日志
- 建议接入 Prometheus + Grafana 监控 Tomcat/Nginx 指标,集中日志便于排障。
常见问题与优化
- 组播与网络
- Tomcat 集群默认使用 UDP 组播 228.0.0.4:45564,确保云服务器或容器网络策略放通;跨机房/跨 VPC 建议改用 TCP 单播 或外置会话存储。
- 会话复制策略
- 节点多且会话较大时,考虑 BackupManager 或外置 Redis/Memcached 集中会话,降低复制风暴。
- 单点风险
- 仅一台 Nginx 仍是单点,生产建议 双机 + Keepalived VIP;对外域名解析到 VIP。
- 启动顺序
- 先启动 Tomcat 再启动 Nginx/Keepalived,避免转发到未就绪实例。
- 安全加固
- 限制管理端口与 AJP 暴露面,启用防火墙,必要时仅内网开放。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: centos上tomcat高可用性配置
本文地址: https://pptw.com/jishu/787914.html
