nginx与keepalived集成devops流水线需实现配置即代码、健康检查可测试、部署自动校验与灰度发布;配置托管git、ci校验语法与脚本行为、部署后验证vip和服务状态、支持分批更新与slo监控。

把 Nginx 和 Keepalived 集成进 DevOps 流水线,核心不是“装上就行”,而是让高可用配置像代码一样可版本化、可测试、可回滚、可自动生效。
配置即代码:Nginx 与 Keepalived 配置统一托管
所有配置文件(nginx.conf、keepalived.conf、健康检查脚本 check_nginx.sh)必须纳入 Git 仓库,按环境(dev/staging/prod)分支管理。不直接在服务器上手工改配置,所有变更走 PR + Code Review 流程。Ansible Playbook 或 Shell 脚本作为部署入口,从 Git 拉取对应分支配置并渲染变量(如 VIP、接口名、权重),再分发到目标节点。
健康检查脚本纳入 CI 验证环节
Keepalived 的 vrrp_script 不是“写完就放着”,它属于关键业务逻辑。建议:
- 将
check_nginx.sh放入单元测试目录,用 BashUnit 或简单断言脚本验证其行为(例如:模拟 nginx 停止时是否返回非零退出码) - CI 流水线中增加「配置语法校验」步骤:
nginx -t检查配置有效性,keepalived -t验证 VRRP 配置合法性 - 健康检查脚本失败时,应触发告警并阻断发布流程,避免带缺陷配置上线
部署阶段自动启停与状态校验
流水线执行部署后,不能只依赖 systemctl start 就认为成功。需补充自动化校验:
- 调用
ip addr show确认 VIP 是否已绑定到主节点网卡 - 用
curl -I http://$VIP或openssl s_client -connect $VIP:443 -servername example.com验证服务可达性 - 通过
systemctl is-active keepalived和systemctl is-active nginx双重确认服务运行态 - 若任一检查失败,自动触发 rollback —— 即回退上一版配置并重启服务
灰度发布与滚动切换支持
在多节点 LB 场景下(如 4 台 Nginx+Keepalived 组成的集群),流水线需支持分批次更新:
- 按机房或 AZ 分组,每次只更新一个子集(如先更新 backup 节点,再切 master)
- 集成 Consul 或 Prometheus 告警指标,在更新期间监控 5xx 错误率、VIP 切换延迟、连接拒绝数等 SLO 指标
- 结合 DNS TTL 或 GSLB 权重调整,实现流量渐进式迁移,降低切换风险











