欢迎来到站长天空!

其它服务器

当前位置: 主页 > 服务器 > 其它服务器

解读nginx负载均衡的5种策略

时间:2025-12-11 03:30:02|栏目:其它服务器|点击:

目录
  • nginx负载均衡的5种策略
    • 1、轮询(默认)
    • 2、weight
    • 3、ip_hash
    • 4、fair(第三方)
    • 5、url_hash(第三方)
  • 负载均衡的五种策略
    • 负载均衡实现的方法
      • HTTP重定向负载均衡
      • DNS域名解析负载均衡
      • 反向代理负载均衡
      • 网络层负载均衡
    • 总结

      nginx负载均衡的5种策略

      要理解负载均衡,必须先搞清楚正向代理和反向代理。

      负载均衡的几种常用方式

      1、轮询(默认)

      每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

      upstream backserver {
          server 192.168.0.14;
          server 192.168.0.15;
      }

      2、weight

      指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

      upstream backserver {
          server 192.168.0.14 weight=3;
          server 192.168.0.15 weight=7;
      }

      权重越高,在被访问的概率越大,如上例,分别是30%,70%。

      3、ip_hash

      上述方式存在一个问题就是说,在负载均衡系统中,假如用户在某台服务器上登录了,那么该用户第二次请求的时候,因为我们是负载均衡系统,每次请求都会重新定位到服务器集群中的某一个,那么已经登录某一个服务器的用户再重新定位到另一个服务器,其登录信息将会丢失,这样显然是不妥的。

      我们可以采用ip_hash指令解决这个问题,如果客户已经访问了某个服务器,当用户再次访问时,会将该请求通过哈希算法,自动定位到该服务器。

      每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

      upstream backserver {
          ip_hash;
          server 192.168.0.14:88;
          server 192.168.0.15:80;
      }

      4、fair(第三方)

      按后端服务器的响应时间来分配请求,响应时间短的优先分配。

      upstream backserver {
          server server1;
          server server2;
          fair;
      }

      5、url_hash(第三方)

      按访问url的hash结果来分配请求,使每个url定向到同一个(对应的)后端服务器,后端服务器为缓存时比较有效。

      upstream backserver {
          server squid1:3128;
          server squid2:3128;
          hash $request_uri;
          hash_method crc32;
      }

      在需要使用负载均衡的server中增加

      proxy_pass http://backserver/; 
      upstream backserver{ 
          ip_hash; 
          server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载) 
          server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大) 
          server 127.0.0.1:6060; 
          server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器) 
      } 

      max_fails :允许请求失败的次数默认为

      1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

      fail_timeout:max_fails次失败后,暂停的时间

      配置实例:

      #user  nobody;
      worker_processes  4;
      events {
      # 最大并发数
      worker_connections  1024;
      }
      http{
          # 待选服务器列表
          upstream myproject{
              # ip_hash指令,将同一用户引入同一服务器。
              ip_hash;
              server 125.219.42.4 fail_timeout=60s;
              server 172.31.2.183;
          }
          server{
              # 监听端口
              listen 80;
              # 根目录下
              location / {
              # 选择哪个服务器列表
                  proxy_pass http://myproject;
              }
          }
      }

      负载均衡的五种策略是什么?

      实行负载均衡的目的就是让请求到达不同的服务器上。一次请求到服务器之间,有那么多环节,因此可以实现的方法也有很多种。

      负载均衡的五种策略

      1、轮询(默认)每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

      2、指定权重,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

      3、IP绑定 ip_hash,每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

      4、fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。

      5、url_hash(第三方)按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

      负载均衡实现的方法

      HTTP重定向负载均衡

      HTTP重定向负载均衡有一台重定向服务器,它也是一台普通的服务器,其唯一的功能就是根据用户的HTTP请求计算一台应用集群中服务器的地址,并将此地址写入HTTP重定向响应中返回给用户。

      这种方案实现起来简单,但是需要浏览器请求两次服务器才能完成。并且重定向服务器很容易编程瓶颈,因为一次重定向返回的过程,也是一次标准HTTP请求,如果集群内有10台机器,那HTTP重定向服务器的流量将是应用服务器的10倍,如果有100台估计就宕机了,所以伸缩性能受到了很大限制。使用302响应码重定向不利于网站SEO。

      DNS域名解析负载均衡

      这是利用DNS处理域名解析请求的同时进行负载均衡处理的一种方案。在DNS中配置多个A记录,每次域名解析请求都会根据负载均衡算法计算一个不同的IP地址返回。

      DNS域名解析负载均衡的优点是将负载均衡的工作转交给DNS,省掉了网站管理维护负载均衡服务器的麻烦,同时还可以使用智能DNS可以基于地理位置或者ISP来做域名解析,用户将会得到距离最近或者速度最快的一个服务器地址,这样可以加快用户的访问速度,改善性能。

      但是这种方法也有很大的缺点,DNS是多级解析,每一级都会缓存DNS记录,如果某个服务器变动了,DNS记录更新的时间将会很长,这个速度取决于域名服务商。一般大型网站都会使用DNS域名解析,利用域名解析作为一级负载均衡手段。你可以使用 dig <域名> 的方法查看某个域名的A记录,你会发现很多网站会有多条A记录。

      反向代理负载均衡

      这种方法就是使用反向代理服务器,它一般在web服务器前面,这个位置也正好是负载均衡服务器的位置,所以大多数反向代理服务器同时也提供负载均衡的功能。由于web服务器不直接对外提供访问,因此web服务器不需要使用外部IP,而反向代理服务器则需要配置双网卡和内部外部两套IP地址。

      反向代理服务器转发请求是在HTTP协议层面,因此也叫应用层负载均衡,由于应用层在七层网络模型中的第七层,所以一般也称为七层负载均衡。优点就是和反向代理功服务器功能集成在一起,部署简单。缺点是反向代理服务器是所有请求和响应的中转站,其性能可能会成为瓶颈。

      网络层负载均衡

      这种方法是在网络层通过修改请求目标地址进行负载均衡,网络层在七层网络层模型的第四层,所以也叫做四层负载均衡,也叫做IP层负载均衡。

      请求达到负载均衡服务器后,由负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实web服务器的地址,然后修改请求的目的地址到这台真实的web服务器地址,等到web服务器处理完成后,响应数据包回到负载均衡服务器,再将数据包源地址修改为自身的IP(负载均衡服务器的IP)地址发送给用户浏览器

      这里关键在于真实无力web服务器响应数据包如何返回给负载均衡服务器。一种是源地址转换(SNAT),第二种是负载均衡服务器作为网关服务器。网络层的负载均衡在内核进程完成数据转发,有更好的性能。但是由于响应请求的流量要经过负载均衡服务器,容易成为瓶颈。

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

      上一篇:Docker search命令的使用方法

      栏    目:其它服务器

      下一篇:Nginx禁止国外IP访问我的网站的实现

      本文标题:解读nginx负载均衡的5种策略

      本文地址:https://zz.feitang.co/server/29995.html

      广告投放 | 联系我们 | 版权申明

      申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

      如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

      联系QQ:257218569 | 邮箱:257218569@qq.com

      Copyright © 2018-2025 站长天空 版权所有 Powered by EyouCms冀ICP备14023439号