nginx与keepalived协同构建高可用api集群,通过健康检查、vip漂移和流量无缝切换消除单点故障;含多nginx节点、keepalived实例、统一vip及主动api健康检测脚本,并需适配长连接、超时、ip透传等api特性配置。

用 Nginx 和 Keepalived 搭建高可靠的 API 接口集群,核心目标是消除单点故障、保障服务持续在线,并让上游调用方无感切换。这不是简单装两个软件,而是围绕“健康感知—自动接管—流量无缝”三个环节设计的一套协同机制。
API 接口集群的关键组成要素
一个真正可用的 API 集群至少包含以下四个部分:
- 两台及以上 Nginx 节点:都部署相同版本的 Nginx,配置一致的反向代理规则(如 proxy_pass 到后端 Spring Boot / Node.js / Go 等 API 服务),支持热重载;
- Keepalived 实例:每台 Nginx 服务器上独立运行,负责 VIP(虚拟 IP)管理和状态同步;
- 统一 VIP 地址:例如 192.168.10.100,对外作为唯一入口,不绑定物理网卡,由 Keepalived 动态接管;
- 主动健康检查脚本:不只是检测 Nginx 进程是否存在,更要验证其能否真实转发 API 请求(例如 curl -f http://127.0.0.1:80/health 返回 200)。
Keepalived 必须监控 Nginx 的实际服务能力
仅靠检查 nginx 进程是否存活远远不够——进程在、配置错误、上游 API 全挂、或 worker 进程卡死,都会导致接口不可用。因此需定制检查逻辑:
- 编写 shell 脚本(如 /etc/keepalived/check_api.sh),用 curl 测试一个轻量级健康端点(如
/actuator/health或自定义/api/v1/ready); - 设置超时(
-m 3)、失败重试(--retry 2)、静默模式(-s),只关注 HTTP 状态码是否为 200; - 在 keepalived.conf 中通过
vrrp_script调用该脚本,设定weight -15——一旦检测失败,当前节点优先级立即下降,触发主备切换; - 避免误切:用
rise 2 fall 3参数,要求连续 2 次成功才恢复,连续 3 次失败才判定故障。
Nginx 配置要适配 API 场景
API 接口对连接稳定性、超时控制、Header 透传更敏感,Nginx 配置不能照搬静态资源模板:
- 启用
proxy_http_version 1.1和proxy_set_header Connection '',支持长连接复用; - 合理设置超时:
proxy_connect_timeout 5s、proxy_send_timeout 30s、proxy_read_timeout 60s,避免阻塞线程; - 透传原始客户端 IP:
proxy_set_header X-Real-IP $remote_addr、proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - 后端服务建议配置
max_fails=2 fail_timeout=15s,快速摘除异常实例,配合 Keepalived 形成双层保护。
主备切换后必须验证真实生效
VIP 漂移只是第一步,关键要看流量是否真的被新主节点承接并正确转发:
- 手动停掉主节点 Nginx 后,执行
ip addr show确认 VIP 已出现在备节点网卡上; - 从第三方机器(非集群内)curl -v http://$VIP/api/v1/status,观察响应头中的
Server字段或自定义标识,确认请求落到新节点; - 检查新主节点的 Nginx access.log,确认有实时请求写入,且返回码以 2xx 为主;
- 模拟恢复主节点:启动 Nginx → 等待健康检查恢复 → 观察 VIP 是否自动漂回(取决于 priority 和 nopreempt 配置)。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











