最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Nginx 与 Keepalived 实现分布式服务的高可用支撑
时间:2026-08-16 20:00:47 编辑:袖梨 来源:一聚教程网
Nginx与Keepalived高可用需构建“可感知、可响应、可收敛”闭环:健康检查须穿透业务层,切换逻辑需权重+时间窗防抖动,配置与资源必须严格同步,验证须覆盖端到端故障链路。
要让 Nginx 与 Keepalived 真正支撑起分布式服务的高可用,关键不是堆机器,而是构建一套“可感知、可响应、可收敛”的闭环机制。它不单是 VIP 漂移,而是把服务健康状态、网络连通性、配置一致性、切换行为全部纳入可控范围。
健康检查必须穿透到业务层
只检测 Nginx 进程是否存活远远不够——进程在,但 upstream 全挂、SSL 加载失败、location 配置被误删,用户照样打不开报表或登录页。真实可用性检查得层层递进:
- 确认主进程存在且有权限:
kill -0 $(cat /var/run/nginx.pid 2>/dev/null) - 验证监听端口真实生效:
ss -tln | grep -q ':443$'(别只查 80) - 发起轻量级 HTTP 探针:
curl -f http://127.0.0.1/healthz -s -o /dev/null -w '%{http_code}',需在 Nginx 中明确定义location /healthz { return 200; } - 脚本统一返回 exit 0 表示健康,非 0 触发降权,Keepalived 才会真正“信”
Keepalived 切换逻辑要可量化、防抖动
切换不是靠“感觉”,而是靠权重变化和时间窗口双重约束:
- 主节点
priority 100,备节点priority 90,差值设为 5~10,留出缓冲空间 -
vrrp_script中weight -5+interval 2+timeout 3,确保两次失败才触发降权,避免瞬时卡顿误判 - 启用
preempt_delay 30,主恢复后等待半分钟再尝试抢主,防止网络抖动引发反复切换 -
virtual_router_id和auth_pass主备必须完全一致,否则 VRRP 报文根本收不到
接管后行为必须零差异
VIP 漂过去只是第一步,备机能否无缝承接,取决于配置与资源是否同步:
- Nginx 配置文件(
nginx.conf及include的所有子配置)需用 rsync 或 Ansible 定期同步,禁止手工修改备机 - SSL 证书路径、私钥权限、静态资源目录(如 BI 前端 dist 包)必须完全一致,建议统一挂载 NFS 或对象存储
- 启用
notify_master和notify_backup脚本,在角色变更时自动 reload Nginx、清理本地缓存、推送告警 - 所有日志路径、PID 文件位置、user/group 设置保持一致,避免启动失败
验证必须模拟真实故障链路
不能只 ping VIP 或看 ip addr,要走通端到端请求流:
- 用
kill -9 $(cat /var/run/nginx.pid)强制终止主节点 Nginx,观察 VIP 是否 3 秒内出现在备机ip addr输出中 - 同时运行持续探测:
while true; do curl -s -w "%{http_code}n" http://VIP/healthz; sleep 0.5; done,确认 HTTP 状态码从 000 → 502 → 200 的完整过渡 - 检查备机 Nginx error.log 是否有 upstream timeout、connect refused 等残留错误,说明后端服务未同步就绪
- 用 tcpdump 抓包验证:VIP 切换后,客户端 SYN 包是否准确到达备机 eth0,而非被 ARP 缓存误导
相关文章
- 华为hg255d路由器怎样刷机(华为hg255d路由器刷机方法) 08-16
- 华为荣耀路由器入口(华为荣耀路由器入口位置) 08-16
- 华为路由器自动断网怎么回事(华为路由器自动断网什么原因) 08-16
- 华为路由器变砖了怎么办(华为路由器变砖了怎么解决) 08-16
- 华为面板路由器怎么设置(华为面板路由器设置教程) 08-16
- 华为a2路由器覆盖面积(华为a2路由器覆盖面积有多大) 08-16