当前位置: 首页 > news >正文

nginx自动剔除与恢复

是的,Nginx 能够通过健康检查(Health Check) 机制来实现后端故障节点的自动剔除与恢复。这是构建高可用后端服务集群的关键功能。

为了帮助你快速理解,我梳理了 Nginx 健康检查的核心机制:

检查方式

工作原理

关键配置参数

触发条件(示例)

优点与注意

被动检查

Nginx 根据处理实际请求的成功与否来判断节点健康。

max_fails=3 fail_timeout=30s

30秒内连续3次请求失败

默认支持,配置简单。但有滞后性,可能影响少量用户体验。

主动检查

Nginx 定期主动向后端节点发送特定请求(如 HTTP、TCP)来探测其健康状态。

interval=5s fails=3 passes=2 timeout=3s type=http

连续3次检查失败标记为不健康;连续2次检查成功则重新标记为健康。

响应更及时,能在用户请求到来前发现故障。通常需第三方模块(如 nginx_upstream_check_module) 或 Nginx Plus(商业版)支持。


⚙️ 如何配置 Nginx 的健康检查

Nginx 的健康检查分为被动检查(默认支持)和主动检查(需配置或使用模块)。

1. 被动健康检查(默认)

被动检查依赖于对实际用户请求的处理结果。这是通过 upstream 块中的 max_failsfail_timeout 参数实现的。

http {upstream backend {# 在30秒内,连续失败3次,则该节点被标记为不可用30秒server backend1.example.com max_fails=3 fail_timeout=30s;server backend2.example.com max_fails=3 fail_timeout=30s;server backend3.example.com max_fails=3 fail_timeout=30s;}server {listen 80;location / {proxy_pass http://backend;# 定义在什么情况下请求应转发到下一台服务器proxy_next_upstream error timeout http_500 http_502 http_503 http_504;}}
}

关键参数解释:

  • max_fails: 在 fail_timeout 时间内,与服务器通信的连续失败次数(如连接超时、连接拒绝或配置的 proxy_next_upstream 错误)超过此值,Nginx 会将该服务器标记为不可用。
  • fail_timeout:
    1. 统计 max_fails时间窗口
    2. 服务器被标记为不可用后,持续的不可用时间。超过此时间后,Nginx 会再次尝试将请求 probes 给该服务器。
  • proxy_next_upstream: 指定在哪些错误情况下应将请求转发到下一个后端服务器。
2. 主动健康检查(推荐)

主动检查通过第三方模块(如 nginx_upstream_check_module)或 Nginx Plus 实现。Nginx 定时主动向后端节点发送健康检查请求,并根据响应判断其状态。

http {upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.com;# 开启主动健康检查 (nginx_upstream_check_module 模块语法)check interval=3000 rise=2 fall=3 timeout=1000 type=http;check_http_send "HEAD /health HTTP/1.0\r\n\r\n"; # 发送健康检查请求check_http_expect_alive http_2xx http_3xx;       # 认为健康的状态码}server {listen 80;location / {proxy_pass http://backend;}# 提供一个查看健康检查状态的页面location /nstatus {check_status;access_log off;}}
}

关键参数解释 (以 nginx_upstream_check_module 为例):

  • interval: 健康检查的间隔时间(例如 3000 毫秒)。
  • fall: 连续失败多少次后将节点标记为不健康(例如 3 次)。
  • rise: 连续成功多少次后将不健康的节点重新标记为健康(例如 2 次)。
  • timeout: 每次健康检查请求的超时时间。
  • type: 健康检查协议类型,如 http, tcp, ssl_hello 等。

🔧 故障转移与恢复流程

其自动故障剔除与恢复的流程,可以概括为以下几步:

  1. 健康检查:Nginx 通过被动或主动方式检查后端节点。
  2. 故障判定:当健康检查失败次数达到阈值(如 max_failsfall),Nginx 将该节点标记为 “不健康”
  3. 自动剔除:Nginx 停止向“不健康”的节点转发用户请求,流量被引导至其他健康的节点。
  4. 恢复检查:对于被剔除的节点,Nginx 会持续进行健康检查
  5. 自动恢复:当健康检查成功的次数达到阈值(如 rise),Nginx 会认为该节点已恢复,并重新将其加入负载均衡池,开始向其转发流量。

⚠️ 注意事项

  • 模块需求:上述的 check 指令通常需要 nginx_upstream_check_module 等第三方模块支持,而非 Nginx 开源版自带。编译时需手动添加此模块。
  • 商业版本Nginx Plus 提供了功能更强大、更易用的主动健康检查功能,无需第三方模块。
  • 合理配置参数intervalfallrisetimeout 等参数需要根据实际业务和后端服务的处理能力进行合理设置,以避免误判或发现延迟。

💎 总结

Nginx 完全能够通过健康检查机制实现后端故障节点的自动剔除与恢复

  • 对于被动检查,利用 max_failsfail_timeout 等参数可实现基本的故障转移。
  • 对于更及时、更可靠的主动检查,通常需要通过 nginx_upstream_check_module 等第三方模块或 Nginx Plus 商业版来实现。

建议你根据实际情况,为 Nginx 配置合适的健康检查机制,这能有效提升你后端服务的可用性和可靠性。


文章转载自:

http://2lLZLRCs.xkjqg.cn
http://0TSSgU7s.xkjqg.cn
http://y7q6Szup.xkjqg.cn
http://pxsqF9Mi.xkjqg.cn
http://si2x477B.xkjqg.cn
http://TPxaUtXz.xkjqg.cn
http://8swa5MKs.xkjqg.cn
http://tlhsvEm9.xkjqg.cn
http://3iF5pSjG.xkjqg.cn
http://OGGGWAU4.xkjqg.cn
http://XaixE8fa.xkjqg.cn
http://jahhCLT3.xkjqg.cn
http://A3QLVqiQ.xkjqg.cn
http://a8St1gpM.xkjqg.cn
http://e8pkrL52.xkjqg.cn
http://trcEaMxe.xkjqg.cn
http://SubY90ZO.xkjqg.cn
http://JAJbKT3R.xkjqg.cn
http://J7EV6Ij3.xkjqg.cn
http://8VfFfqy8.xkjqg.cn
http://nnanOtwB.xkjqg.cn
http://RZoutqsd.xkjqg.cn
http://FMXrxQrP.xkjqg.cn
http://OQgFHXE6.xkjqg.cn
http://2o1GeNJB.xkjqg.cn
http://ZgioOSYr.xkjqg.cn
http://X8X2AjdA.xkjqg.cn
http://9Ntsbbaj.xkjqg.cn
http://Xm1CFEP0.xkjqg.cn
http://fU2izTH5.xkjqg.cn
http://www.dtcms.com/a/372561.html

相关文章:

  • tmi8150B控制ir_cut
  • 【期末复习】嵌入式——S5PV210开发板
  • 基于brpc的轻量级服务注册中心设计与实现
  • 作用域報錯
  • 代码随想录学习摘抄day7(二叉树11-21)
  • 固态硬盘——M.2接口技术
  • 数字化浪潮下,传统加工厂如何智能化转型?
  • Miniflux – RSS 订阅
  • Nginx主配置文件
  • 架构进阶——解读121页IT规划咨询项目规划报告【附全文阅读】
  • 大模型显存占用量换算
  • Compose笔记(五十)--stickyHeader
  • WebGIS三维可视化 + 数据驱动:智慧煤仓监控系统如何破解煤炭仓储行业痛点
  • 刷题集(1)
  • 别墅装修的价钱如何估算?
  • Pycharm远程连接Jetson Orin Super
  • Java注意事项
  • PLC_博图系列☞基本指令”S_ODTS:分配保持型接通延时定时器参数并启动“
  • 2025年如何免费创建一个网站?
  • Linux驱动开发(1)概念、环境与代码框架
  • 3种XSS攻击简单案例
  • Windows存储IOPS的预测性扩容
  • 模式组合应用-装饰器模式
  • 【数据结构与算法Trip第1站】基本介绍
  • Dockerfile解析器指令(Parser Directive)指定语法版本,如:# syntax=docker/dockerfile:1
  • Docker命令(全)
  • 【基于yolo和web的垃圾分类系统】
  • Dify工作流节点(二)
  • Hologres自增序列Serial使用简介
  • SpringBoot-Web开发-内容协商——多端内容适配内容协商原理HttpMessageConverter