如上所示,如果其中一个分类在60S内的请求过多,则可以通过以下改进来平滑请求。
- local consistent_key = args.cat
- if not consistent_key or consistent_key == '' then
- consistent_key = ngx_var.request_uri
- end
- -- 大于5000时,生成新key
- local value = balancing_cache:get(consistent_key)
- if value > 5000 then
- consistent_key = consistent_key .. '_' .. value
- end
- if not value then
- success, err = balancing_cache:set(consistent_key, 1, 60)
- else
- newval, err = balancing_cache:incr(consistent_key, 1)
- end
least_conn:将请求负载均衡到最小活跃连接的上游服务器。如果配置的服务器较少,则转为基于权重轮询的算法。
除了上面的负载均衡策略,商业版的Nginx还提供了least_time,就是基于最小平均响应时间进行负载均衡。
失败重试
失败重试主要包含两部分配置:upstream server和proxy_pass。
- upstream backend {
- server 192.168.0.1:8080 max_fails=2 fail_timeout=10s weight=1;
- server 192.168.0.2:8080 max_fails=2 fail_timeout=10s weight=1;
- }
通过配置上游服务器的max_fails和fail_timeout,来指定每个上游服务器,当fail_timeout时间内失败了max_fails次请求,则认为该上游服务器不可用。然后剔除该服务器,fail_timeout时间后会再次将该服务器加入到存活列表中进行重试。
- location /test {
- proxy_connect_timeout 5s;
- proxy_read_timeout 5s;
- proxy_send_timeout 5s;
- proxy_next_upstream error timeout;
- proxy_next_upstream_timeout 10s;
- proxy_next_upstream_tries 2;
- proxy_pass http://backend;
- add_header upstream_addr $upstream_addr;
- }
上述参数详情请参见:《分布式系统超时重试》
健康检查
Nginx对上游服务器的健康检查采用的是惰性策略。(Nginx商业版提供了health_check的主动检查)社区版的Nginx可以集成nginx_upstream_check_module进行主动健康检查。配置如下:
TCP 心跳检查
- upstream backend {
- server 192.168.0.1:8080 weight=1;
- server 192.168.0.2:8080 weight=2;
- check interval=3000 rise=1 fall=3 timeout=2000 type=tcp;
- }
- interval:检测间隔时间,此处配置了每隔3s检测一次。
- fall:检测失败多少次后,上游服务器被标识为不存活。
- rise:检测成功多少次后,上游服务器被标识为存活,并可以处理请求。
- timeout:检测请求超时时间配置。
(编辑:西安站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|