首页 | 财经 | 资源 | 理财 | 考研 | 职场 | 论文 | 资格 | 股票学院 |

股票学院: 股票入门 - 股票知识 - 股票术语 - 炒股技巧 - 选股技巧 - 跟庄技巧 - 炒股经验 - 投资策略 - K线图 - 均线 - 分时图 - 成交量 - 波浪理论 - 基本面分析 - 心理分析 - 涨停研究 - 趋势线 - 江恩理论 - MACD - KDJ - 技术指标 - 财经股票书籍在线阅读 - 金融类书籍下载 - 银行学院 - 保险学院 - 外汇学院 - 债券学院 - 股票学院 - 基金学院 - 港股学院 - 黄金学院

当前位置:天下金融网 > 金融云 > 文章正文

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

时间:2019-09-19 12:58:18来源:今日头条作者:佚名

我们使用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 

相关阅读

焦点图文

关于我们 | 广告服务 | 商务合作 | 网站地图

版权所有 Copyright(C)2018-2020 苏州骐云跃网络科技有限公司,未经授权禁止复制或建立镜像,否则将依法追究法律责任!
声明:我们不做任何形式的代客理财及投资指导,凡是以天下金融网名义做股票推荐的行为均属违法!
广告商的言论与行为均与天下金融网无关!股市有风险,投资需谨慎。
苏公网安备 32050502000166号
苏ICP备14018528号
商务合作:联系我们

天下金融网版权所有