nginx高可用运维规范核心是固化“防单点、可切换、快恢复、易验证”流程:明确主/备节点职责边界,配置强制版本化与变量模板,常态化自动巡检+三级故障响应,每月真实切换演练,并通过日志审计实现全链路可追溯。

建立针对 Nginx 高可用集群的运维规范,核心是把“防单点、可切换、快恢复、易验证”落到日常操作中,不是堆配置,而是固化流程和责任。
明确角色与职责边界
避免“谁都管、谁都不负责”:
- 主节点运维人:负责主 Keepalived 配置更新、VIP 状态监控、主 Nginx 日志巡检;变更前必须同步通知备节点负责人
- 备节点运维人:每日验证本地 Nginx + Keepalived 进程存活、检查 /usr/local/src/nginx_check.sh 可执行且返回正确、确认虚拟 IP 未意外绑定
- 共管项:虚拟 IP(如 192.168.200.100)的申请/释放、virtual_router_id 和 auth_pass 密码变更,必须双人复核并记录在运维日志
配置标准化与版本管控
所有配置禁止手工直改线上,统一走版本化流程:
- keepalived.conf 中的 state、priority、interface、virtual_ipaddress 必须用变量模板生成,禁止硬编码 IP 或优先级数值
- 检测脚本 nginx_check.sh 必须包含超时控制与二次确认逻辑,例如:
if [ $(ps -C nginx --no-header | wc -l) -eq 0 ]; then /usr/local/nginx/sbin/nginx -t && /usr/local/nginx/sbin/nginx || killall keepalived; fi - 所有配置文件纳入 Git 仓库,分支策略为:main(生产)→ release(预发)→ dev(开发),每次上线需附带变更说明和回滚步骤
常态化巡检与故障响应 SOP
把“等出事再救”变成“提前发现苗头”:
- 每小时自动采集:ip a | grep "inet.*192.168"(确认 VIP 所在节点)、systemctl is-active keepalived、curl -I http://127.0.0.1:80 -s -o /dev/null -w "%{http_code}\n"
- 主节点异常时,触发三级响应:
① 自动尝试重启 Nginx(若失败)→ ② 检查 Keepalived 日志(/var/log/messages 中含 VRRP_Instance 关键字)→ ③ 若 90 秒内未恢复 VIP,人工介入强制切换并排查网卡或 VRRP 组播问题 - 每月一次真实切换演练:主动停主节点 Keepalived,验证 VIP 是否 3 秒内漂移到备节点,且业务请求无中断(HTTP 状态码始终为 200)
日志与审计闭环管理
让每一次变更、每一次切换都可追溯:
- Nginx 访问日志必须包含 $remote_addr 和 $upstream_addr,用于故障时区分是客户端问题还是上游服务问题
- Keepalived 启动/停止/状态变更必须写入独立审计日志(如 /var/log/keepalived-audit.log),由 rsyslog 转发至中心日志平台
- 所有手动执行的 systemctl restart keepalived 或 killall keepalived 操作,必须在工单系统中登记原因、操作人、预期影响范围











