这些 Nginx 负载均衡配置误区
,即在 fail_timeout 时间内,1次请求失败即不再尝试,将请求根据 hash 规则,转发到下一个上游服务 fail_timeout 有两种含义:
默认是10s 文字不是很好理解,搭建个实验环境,环境如下:
nginx 通过 fast-cgi 将 php 请求转发到 PHP-FPM,这里 PHP-FPM 服务即上游服务,设置 upstream,负载 PHP-FPM以看到,关掉 PHP-FPM1 后,发起的请求,本来第二次请求(17:49:58)应该分发到 PHP-FPM1 的,然后从 Nginx 错误日志可以看到,连接 PHP-FPM1 失败,这里只做了一次失败尝试,然后 Nginx 将请求转发到 PHP-FPM2 处理了。 接着将 max_fails 设置为2,继续上面的请求续分发到 PHP-FPM2,接着看 Nginx 错误日志 可以看到,过了 fail_timeout 的时间后,Ngxin 会再次将请求发往 FPM-PHP1 进行尝试,尝试2次失败后,在 fail_timeout 时间内,不会再将请求分发, 这里有几个误区:
这个理解是错误的,Nginx 只是记录了失败的请求到日志,并将这个请求又转发到了可用的其他上游服务,知道所有上游都不可用时,才会返回错误状态
max_fails 是在 fail_timeout 指定的时间内的失败次数,请求还是按照配置的负载均衡算法来走,并不是第一次请求失败之后,继续将这个请求在尝试一次,达到失败次数之后,标记为不可用
当访问量大的时候,fail_timeout 设置太短,会导致不断的尝试与不可用上游的连接,耗费大量的 tcp 资源进行连接
当访问量大的时候,fail_timeout设置太长,会导致负载不均衡,有可能会击穿某个上游后端,达不到负载的效果。 (编辑:南通站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |