加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

负载均衡与反向代理(Nginx/OpenResty)

发布时间:2019-09-19 00:59:41 所属栏目:业界 来源:今日头条
导读:我们行使Nginx时,大大都场景下行使的都是七层的HTTP负载平衡(ngx_http_upstream_module)。在1.9.0版本往后,Nginx也开始支持TCP(ngx_stream_upstream_module)四层负载平衡。 四层/七层负载平衡的区别 四层负载平衡,就是基于IP+端口的负载平衡(TCP/UDP)。

如上所示,假如个中一个分类在60S内的哀求过多,则可以通过以下改造来滑腻哀求。

  1. local consistent_key = args.cat 
  2. if not consistent_key or consistent_key == '' then 
  3.  consistent_key = ngx_var.request_uri 
  4. end 
  5. -- 大于5000时,天生新key 
  6. local value = balancing_cache:get(consistent_key) 
  7. if value > 5000 then 
  8.  consistent_key = consistent_key .. '_' .. value 
  9. end 
  10. if not value then 
  11.  success, err = balancing_cache:set(consistent_key, 1, 60) 
  12. else 
  13.  newval, err = balancing_cache:incr(consistent_key, 1) 
  14. end 

least_conn:将哀求负载平衡到最小活泼毗连的上游处事器。假如设置的处事器较少,则转为基于权重轮询的算法。

除了上面的负载平衡计策,贸易版的Nginx还提供了least_time,就是基于最小均匀相应时刻举办负载平衡。

失败重试

失败重试首要包括两部门设置:upstream server和proxy_pass。

  1. upstream backend { 
  2.  server 192.168.0.1:8080 max_fails=2 fail_timeout=10s weight=1; 
  3.  server 192.168.0.2:8080 max_fails=2 fail_timeout=10s weight=1; 

通过设置上游处事器的max_fails和fail_timeout,来指定每个上游处事器,当fail_timeout时刻内失败了max_fails次哀求,则以为该上游处事器不行用。然后剔除该处事器,fail_timeout时刻后会再次将该处事器插手到存活列表中举办重试。

  1. location /test { 
  2.  proxy_connect_timeout 5s; 
  3.  proxy_read_timeout 5s; 
  4.  proxy_send_timeout 5s; 
  5.  proxy_next_upstream error timeout; 
  6.  proxy_next_upstream_timeout 10s; 
  7.  proxy_next_upstream_tries 2; 
  8.  proxy_pass http://backend; 
  9.  add_header upstream_addr $upstream_addr; 

上述参数详情请拜见:《漫衍式体系超时重试》

康健搜查

Nginx对上游处事器的康健搜查回收的是惰性计策。(Nginx贸易版提供了health_check的主动搜查)社区版的Nginx可以集成nginx_upstream_check_module举办主动康健搜查。设置如下:

TCP 心跳搜查

  1. upstream backend { 
  2.  server 192.168.0.1:8080 weight=1; 
  3.  server 192.168.0.2:8080 weight=2; 
  4.  check interval=3000 rise=1 fall=3 timeout=2000 type=tcp; 
  • interval:检测隔断时刻,此处设置了每隔3s检测一次。
  • fall:检测失败几多次后,上游处事器被标识为不存活。
  • rise:检测乐成几多次后,上游处事器被标识为存活,并可以处理赏罚哀求。
  • timeout:检测哀求超时时刻设置。

HTTP心跳搜查

  1. upstream backend { 
  2.  server 192.168.0.1:8080 weight=1; 
  3.  server 192.168.0.2:8080 weight=2; 
  4.  check interval=3000 rise=1 fall=3 timeout=2000 type=http; 
  5.  check_http_send "HEAD /status HTTP/1.0rnrn"; 
  6.  check_http_expect_alive http_2xx http_3xx; 

HTTP心跳设置比TCP特殊多了2个设置:

  • check_http_send:康健搜查时所发送的哀求内容。
  • check_http_expect_alive:当上游处事器返回匹配的状态码,就以为上游处事器存活。

这内里必要留意的是,康健搜查的时距离断不宜过短。不然有也许会造成拥堵,愈乃至造成上游处事器挂掉。

长毗连设置

可以行使 keepalive 指令设置Nginx与上游处事器可缓存的空闲毗连的最大数目。当超出数目时,最近起码行使的毗连将被封锁。keepalive指令不限定Worker历程与上游处事器的总毗连数。

  1. upstream backend { 
  2.  server 192.168.0.1:8080 weight=1; 
  3.  server 192.168.0.2:8080 weight=2 backup; 
  4.  keepalive 100; 

要想与上游处事器成立长毗连,还必要如下设置:

  1. location / { 
  2.  # 支持 keep-alive 
  3.  proxy_http_version 1.1; 
  4.  proxy_set_header Connection ""; 
  5.  proxy_pass http://backend; 

总长毗连数=空闲毗连池+开释毗连池。起首,长毗连设置不会限定Worker历程可以打开的总毗连数(超出的作为短毗连)。毗连池必要按照差异的场景举办配置。

空闲毗连池太小,毗连不足用,就必要不绝的从头成立毗连;假如太大,就会造成还没用就超时了。

其他设置

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读