彈指一揮間 2023-11-19 09:32 采纳率: 0%
浏览 30
已结题

nginx不自动剔除失败服务

oauth2认证服务采用nginx负载均衡,nginx不自动剔除失败的后台服务。
nginx的负载均衡配置值如下 ,负载均衡策略用ip_hash,访问到12服务器,关停12服务器,访问不会到13,报错404。
采取轮询策略,当12、13服务器都正常时,访问正常,当12/13只有一台正常的时候,页面访问时,第一次正常,第二次404,三次正常,第四次404,如此反复、 、 等于nginx会一直访问到宕机的服务

img

img

  • 写回答

20条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-11-19 09:37
    关注
    获得0.60元问题酬金

    引自强大而免费的微信小程序:皆我百晓生

    Nginx负载均衡失效的原因和解决方法

    主要原因:负载均衡失效是由于nginx的健康检查机制没有将故障的后台服务自动剔除造成的。

    解决方法:

    1. 使用upstream的down属性
      可以在配置upstream的时候为每台服务器设置一个down属性,并将其设置为true来标记宕机的服务。配置示例如下:

      upstream auth.com {
          ip_hash;
          server 10.4.128.12:8001 down;
          server 10.4.128.13:8001;
      }
      
      • 默认情况下Nginx会每隔一段时间检查一下这些down掉的服务是否恢复,如果恢复会自动将其重新添加到负载均衡中。
      • 可以通过设置max_failsfail_timeout属性来调整探测的精度和频率,例如:
      upstream auth.com {
          ip_hash;
          server 10.4.128.12:8001 down max_fails=3 fail_timeout=10s;
          server 10.4.128.13:8001;
      }
      
      • max_fails表示最大失败次数,如果达到这个次数则认为服务宕机;
      • fail_timeout表示宕机判定的超时时间,如果在该时间内无法恢复则认为服务宕机。
    2. 使用Nginx Plus或第三方模块
      Nginx Plus是官方提供的商业版本,在原生的Nginx负载均衡中已经内置了健康检查和自动剔除的功能。而对于开源版本的Nginx,则可以通过第三方模块实现类似的功能,如Nginx Upstream Check Module。

      • Nginx Plus:使用官方提供的Nginx Plus版,并配置健康检查机制。

      • 第三方模块Nginx Upstream Check Module:该模块需要编译Nginx时加入,基本的使用示例如下:

      upstream auth.com {
          ip_hash;
          server 10.4.128.12:8001 check interval=3000 rise=2 fall=3;
          server 10.4.128.13:8001;
      }
      
      • check表示启用健康检查;
      • interval表示检查的时间间隔;
      • rise表示成功多少次认为服务恢复;
      • fall表示失败多少次认为服务宕机。
    3. 使用外部的健康检查工具
      不依赖Nginx自身的健康检查方法,而是使用独立的健康检查工具来进行服务状态的监控和通知。例如使用Keepalived等工具进行健康检查,并根据检查结果动态修改Nginx的配置文件。

    以上是解决Nginx负载均衡失效的几种常见方法,请根据实际需求选择其中一种或多种方式来解决问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月27日
  • 创建了问题 11月19日