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

负载平衡与反向署理(Nginx/OpenResty)

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

我们行使Nginx时,大大都场景下行使的都是七层的HTTP负载平衡(ngx_http_upstream_module)。在1.9.0版本往后,Nginx也开始支持TCP(ngx_stream_upstream_module)四层负载平衡。

四层/七层负载平衡的区别

四层负载平衡,就是基于IP+端口的负载平衡(TCP/UDP)。七层负载平衡,就是基于URL等应用层协议(HTTP)的负载平衡。认识收集分层协议的同窗就很轻易推理到,还会有基于MAC地点的二层负载平衡和基于IP地点的三层负载平衡。二层负载平衡会通过一个假造的MAC地点吸取哀求,然后再分派到真实的MAC地点上去。三层负载平衡会通过一个VIP(假造IP)吸取哀求,然后再分派到真实的IP上去。四层负载平衡会通过IP+端口吸取哀求,然后再分派到真实的处事器。七层负载平衡通过假造的URL可能HOST吸取哀求,然后再分派到真实的处事器上去。

负载平衡与反向署理(Nginx/OpenResty)

所谓的四层到七层的负载平衡,就是依据四层及以下、七层及以下的信息来抉择怎样转发。好比四层的负载平衡,就是操作三层的VIP,然后加上四层的端标语,来抉择流量怎样来举办负载平衡。

对付负载平衡我们必要存眷以下几点:

  • 上游处事器设置:行使upstream server设置上游处事器。
  • 负载平衡算法:设置多个上游处事器的负载平衡机制。
  • 失败重试机制:设置当超时可能上游处事器不存活时,是否必要重试其他处事器。
  • 处事器心跳搜查:上游处事器的康健搜查/心跳搜查。

upstream 设置

upstream就是真实处理赏罚营业的处事器,upstream在http指令下:

  1. upstream backend { 
  2.  server 192.168.0.1:8080 weight=1; 
  3.  server 192.168.0.2:8080 weight=2; 

upstream server 的设置如下:

  • IP地点和端口:设置上游处事器的IP地点和端口;
  • 权重:weight用来设置权重,默认1。权重越大,分发的哀求越多。如上所示:3个哀求:1个到192.168.0.1,2个到192.168.0.2。

设置完上游处事器(upstream)之后,就要设置proxy_pass来处理赏罚用户哀求。

  1. location / { 
  2.  proxy_pass http://backend; 

负载平衡算法

负载平衡计策用来办理哀求到来时,怎样选择upstream server举办处理赏罚,默认回收的是round-robin(轮询)。

  • round-robin:轮询,默认负载平衡算法,通过共同weight设置实现基于权重的轮询。
  • ip_hash:按照客户IP举办负载平衡,沟通的IP会被负载平衡到统一个upstream,设置如下:
  1. upstream backend { 
  2.  ip_hash; 
  3.  server 192.168.0.1:8080 weight=1; 
  4.  server 192.168.0.2:8080 weight=2; 
  • hash_key [consistent]:对付一个key举办hash可能行使同等性哈希算法举办负载平衡。Hash算法存在的题目是:当增进/删除一台处事器时,将导致许多key被从头负载平衡到差异的处事器。从而有也许导致用户会见出题目。因此可以思量同等性哈希,处事器横向扩展时,只有少部门呆板会被从头分派。
  • 哈希算法:此处是按照uri举办负载平衡,可以行使Nginx变量,从而实现伟大的算法。
  1. upstream backend { 
  2.  hash $uri; 
  3.  server 192.168.0.1:8080 weight=1; 
  4.  server 192.168.0.2:8080 weight=2; 

同等性哈希算法:consistent_key动态指定。

  1. upstream nginx_local_server { 
  2.  hash $consistent_key consistent; 
  3.  server 192.168.0.1:8080 weight=1; 
  4.  server 192.168.0.2:8080 weight=2; 

下面看一下按照参数cat(类目),做的轻微伟大一点的负载平衡:

  1. location / { 
  2.  set $consistent_key $arg_cat; 
  3.  if ($consistent_key = " ") { 
  4.  set $consistent_key $request_uri; 
  5.  } 

而在现实行使进程中,更多的是行使Lua剧本举办处理赏罚。

  1. set_by_lua_file $consistent_key "lua_balancing.lua"; 

lua_balancing.lua

  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. local value = balancing_cache:get(consistent_key) 
  6. if not value then 
  7.  success, err = balancing_cache:set(consistent_key, 1, 60) 
  8. else 
  9.  newval, err = balancing_cache:incr(consistent_key, 1) 
  10. end 

(编辑:河北网)

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

热点阅读