全栈式高性能负载均衡平台需nginx与keepalived协同:nginx负责七层分发,keepalived提供vip故障转移;采用非抢占主备、同网段vip、三重健康检查、长连接复用、least_conn/ip_hash策略、可观测性监控及安全加固。

要打造一个全栈式高性能负载均衡平台,核心是让 Nginx 承担七层流量分发,Keepalived 提供 VIP 故障转移能力,二者协同形成“高可用 + 高性能”双保障。这不是简单拼装,而是围绕稳定性、可观测性、弹性伸缩和运维效率做系统设计。
明确角色分工与架构拓扑
Nginx 不是单点,而是部署在至少两台负载均衡节点上;Keepalived 在这两台节点间运行 VRRP 协议,对外暴露唯一虚拟 IP(VIP);后端应用服务器以集群方式接入 upstream 模块。整个链路为:
客户端 → VIP → Keepalived(主/备)→ Nginx 反向代理 → upstream 后端池。
关键点:
- 主备模式需配置非抢占(nopreempt),避免网络抖动引发 VIP 频繁漂移
- VIP 必须与物理网卡同网段,且所有节点能二层互通
- 建议将健康检查脚本与 Nginx 进程状态、端口连通性、业务接口响应三者结合判断
优化 Nginx 负载策略与连接复用
高性能不止靠机器多,更靠连接管理精细。Nginx 默认短连接会显著增加 TIME_WAIT 和握手开销,必须启用长连接机制:
- 在 upstream 块中添加 keepalive 32(保持 32 个空闲长连接)
- 在 location 中设置 proxy_http_version 1.1 和 proxy_set_header Connection "",清空 Connection 头以允许复用
- 搭配 least_conn 或 ip_hash 算法,避免单台后端过载或会话丢失
- 开启 proxy_buffering on 和合理 buffer 大小,减少后端响应延迟对前端的影响
强化 Keepalived 的健壮性检测
Keepalived 自带的 TCP_CHECK 容易误判,尤其当后端服务有慢响应但未宕机时。推荐使用自定义脚本检查:
- 脚本定期调用 curl -s --connect-timeout 3 http://127.0.0.1/nginx_status 验证 Nginx 工作状态
- 同时检查 ps -p $(cat /usr/local/nginx/logs/nginx.pid) > /dev/null 确认进程存活
- 若连续失败 3 次,执行 systemctl restart nginx;仍失败则 killall keepalived 主动让出 VIP
- Keepalived 配置中通过 vrrp_script 关联该脚本,并绑定到 track_script
补齐可观测性与安全基线
生产环境不能靠“看日志猜问题”。需在平台层面嵌入基础监控能力:
- 开放 /nginx_status 接口,配合 Prometheus + nginx-vts-exporter 实时采集连接数、请求速率、上游状态等指标
- 为每个 upstream server 添加 max_fails=3 fail_timeout=30s,防止雪崩传播
- 限制客户端连接数:在 http 块中配置 limit_conn_zone $binary_remote_addr zone=addr:10m,再于 server 中应用
- 关闭 Nginx 版本号(server_tokens off),禁用不必要模块(如 autoindex、webdav)降低攻击面











