本站以分享各种运维经验和运维所需要的技能为主
《python零基础入门》:python零基础入门学习
《python运维脚本》: python运维脚本实践
《shell》:shell学习
《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战
《k8》暂未更新
《docker学习》暂未更新
《ceph学习》ceph日常问题解决分享
《日志收集》ELK+各种中间件
《运维日常》运维日常
《linux》运维面试100问
【nginx】nginx怎么让出问题的代理服务器优雅地退出
背景:
业务对部分链接线路敏感度不同进行优雅退出
实现:使用 upstream里面的fail_timeout
和 max_fails
指令来配置服务器的故障转移行为。
这些指令可以在 upstream
块中为每个服务器设置,用以控制在特定时间内允许的失败次数(如连接失败、超时等),以及在达到失败次数后服务器被标记为不可用的时间。
具体配置:
展示如何设置当服务器在 10 秒内失败 10 次后,将其屏蔽 10 秒:
upstream backend {
server backend1.example.com max_fails=10 fail_timeout=10s;
server backend2.example.com max_fails=10 fail_timeout=10s;
# 可以继续添加更多服务器
}
配置解释:
-
max_fails
:- 这个指令设置了在
fail_timeout
指定的时间窗口内允许的最大失败次数。在这个例子中,我们设置为 10 次。
- 这个指令设置了在
-
fail_timeout
:- 这个指令定义了在服务器被标记为失败后,多长时间内服务器将被认为是不可用的。在这个例子中,我们设置为 10 秒。
完整NG配置:
http {
upstream backend {
server backend1.example.com max_fails=10 fail_timeout=10s;
server backend2.example.com max_fails=10 fail_timeout=10s;
}
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
注意事项:
- 监控:确保监控你的后端服务器的健康状况和 Nginx 的错误日志,这样你可以及时了解到任何可能出现的问题。
- 调整和优化:根据实际的服务器性能和业务需求,调整
max_fails
和fail_timeout
的值。过于敏感或过于宽松的设置都可能不利于系统的稳定性和可用性。 - 测试:在生产环境部署前,通过各种模拟故障的测试来验证这些设置的效果,确保它们能如预期般工作。
通过这样的配置,你可以让 Nginx 在后端服务器频繁失败时自动进行暂时的屏蔽,从而增加系统的整体稳定性和可靠性。