Nginx HTTP负载均衡相关参数

集群

 

配置负载均衡各参数的意义,一篇很好的文章:

 

http://salogs.com/2010/05/nginx-http%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E7%9A%84%E7%9B%B8%E5%85%B3%E5%8F%82%E6%95%B0%E6%B5%8B%E8%AF%95/

 

 

upstream test  {
server 192.168.108.163 ;
server 192.168.108.164:80 ;
}

server {
listen          80 ;
server_name     .test.com;
index           index.php index.html index.htm;

location / {
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;

proxy_connect_timeout       10s;
proxy_read_timeout          2s;
#proxy_send_timeout          10s;
proxy_pass http:// test ;
}
}

 

 

语法:server name [parameters ]

parameters 包含:

·weight = NUMBER - 设置服务器权重,默认为1。

·max_fails = NUMBER - 在一定时间内(这个时间在fail_timeout参数中设置)检查这个服务器是否可用时产生的最多失败请求数,默认为1,将其设置为0可以关闭检查,这 些错误在proxy_next_upstream或fastcgi_next_upstream(404错误不会使max_fails增加)中定义。

·fail_timeout = TIME - 在这个时间内产生了max_fails所设置大小的失败尝试连接请求后这个服务器可能不可用,同样它指定了服务器不可用的时间(在下一次尝试连接请求发起 之前),默认为10秒,fail_timeout与前端响应时间没有直接关系,不过可以使用proxy_connect_timeout和 proxy_read_timeout来控制。

·down - 标记服务器处于离线状态,通常和ip_hash一起使用。

·backup - (0.6.7或更高)只用于本服务器,如果所有的非备份服务器都宕机或繁忙。

关于 max_fails参数的理解 根据上面的解释,max_fails 默认为1 ,fail_timeout 默认为10 秒,也就是说,默认情况下后端服务器在10 秒钟之内可以容许有一次的失败,如果超过1 次则视为该服务器有问题,将该服务器标记为不可用。等待10 秒后再将请求发给该服务器,以此类推进行后端服务器的健康检查。但如果我将max_fails 设置为0 ,则代表不对后端服务器进行健康检查,这样一来fail_timeout 参数也就没什么意义了。那若后端服务器真的出现问题怎么办呢?上文也说了,可以借助proxy_connect_timeout 和proxy_read_timeout 进行控制。

下面介绍http proxy模块中的相关指令:

proxy_next_upstream
语法: proxy_next_upstream [error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off]
确定在何种情况下请求将转发到下一个服务器。转发请求只发生在没有数据传递到客户端的过程中。

proxy_connect_timeout
后端服务器连接的超时时间_发起握手等候响应超时时间

proxy_read_timeout
连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)

proxy_send_timeout
后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据

proxy_pass
这个指令设置被代理服务器的地址和被映射的URI

 

 

 

总结:

 

1.是否超时,是由 proxy_read_timeout 决定的。

2.后端服务器正常但执行超时的情况下nginx根据proxy_read_timeout和proxy_next_upstream的值来选择下一个服务 器,

3.如果后端服务器直接报错的情况,如果报错信息在proxy_next_upstream 中有定义的话nginx还会跳到下一台服务器。否则直接将保存信息返回给nginx从而最终呈献给用户


4.如果后端没有设置健康检查, 则每次请求都会最多等待 proxy_read_timeout 时间,如果超过该时间没有响应,则尝试下一个服务器。 周而复始。

5.如果后端有设置了健康检查。则每次请求时,最多等待 proxy_read_timeout,超过该时间,且尝试次数超过 max_fails 则标记该服务器不可用。下次请求时,请求将不再发送给该服务器,一直等到 标记为不可用的时间-fail_timeout过后,才会再将请求转发给刚才标记为不可用的那台服务器。 如此周而复始。

 

 

我采用的配置

server 1.1.1.1:8180 weight=1 max_fails=1 fail_timeout=40s;
server 1.1.1.2:8080 weight=1 max_fails=1 fail_timeout=40s;

 

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404;
proxy_read_timeout 15s;

 

假设其中一台服务器处理超时,15秒后,转到另外一台,如果还是15秒超时,则两台服务器都被标记为不可用。因此后续有10秒钟的时间(40-15-15),用户每次访问网站会报服务器未响应错误。 如果不想有这10秒的时间都是报错,则fail_timeout设置为30s。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值