nginx学习:nginx的请求转发算法(负载均衡配置)

jupiter
2022-01-15 / 0 评论 / 647 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年01月15日,已超过1053天没有更新,若内容或图片失效,请留言反馈。

1.nginx支持的负载均衡调度算法

1.1 轮询(默认算法):

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

  • 基于ip
http {
    ..... 其他的内容
    
    #定义上游服务器集群,定义一个负载均衡器
    upstream myweb1 {
        server  192.168.0.161;
        server  192.168.0.162;
        server  192.168.0.163;
        }
        
    server {
        listen       80;
        location / {
                proxy_pass http://myweb1;
           }
    }
  }
  • 基于域名
http {
    ..... 其他的内容
    
    #定义上游服务器集群,定义一个负载均衡器
    upstream myweb1 {
        server  192.168.0.161;
        server  192.168.0.162;
        server  192.168.0.163;
        }
        
    server {
        listen       80;
        server_name  www.sc.com;
        location / {
                proxy_pass http://myweb1;
           }
    }
  }

1.2 weight轮询

nginx反向代理接受到客户端收到的请求后,可以给不同的后端服务器设置一个权重值(weight),用于调整不同服务器上请求的分配率,权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器配置进行配置的。比如说有些服务器的硬件配置高,比重就会比较大一点。

http {
    ..... 其他的内容
    
    #定义上游服务器集群,定义一个负载均衡器
    upstream myweb1 {
        server  192.168.0.161 weight=1;
        server  192.168.0.162 weight=3;
        server  192.168.0.163 weight=6;
        }
    server {
        listen       80;
        server_name  www.sc.com;
        location / {
                proxy_pass http://myweb1;
           }
    }
  }

1.3 ip_hash

每个请求按照发起客户端ip的hash结果进行匹配,这样的算法每一个固定的ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

http {
    ..... 其他的内容
    
    #定义上游服务器集群,定义一个负载均衡器
    upstream myweb1 {
        ip_hash;
        server  192.168.0.161;
        server  192.168.0.162;
        server  192.168.0.163;
    }
    server {
        listen       80;
        server_name  www.sc.com;
        location / {
                proxy_pass http://myweb1;
           }
    }
  }

1.4 least-connected–最小连接数

将下一个请求分配给活动连接数量最少的服务器

http {
    ..... 其他的内容
    
    #定义上游服务器集群,定义一个负载均衡器
    upstream myweb1 {
        least_conn;
        server  192.168.0.161;
        server  192.168.0.162;
        server  192.168.0.163;
    }
    server {
        listen       80;
        server_name  www.sc.com;
        location / {
                proxy_pass http://myweb1;
           }
    }
  }

1.5 fair:智能调整调度算法(第三方)

动态的根据后端服务器的请求处理器的请求处理响应的时间来进行均衡分配,响应时间短,处理效率高的服务器分配到请求的概率高,响应时间长,处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种算法,需要安装upstream_fair模块。

1.6 url_hash(第三方)

按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包。

http {
    ..... 其他的内容
    
    #定义上游服务器集群,定义一个负载均衡器
    upstream myweb1 {
        server  192.168.0.161;
        server  192.168.0.162;
        server  192.168.0.163;
        hash $request_uri;
    }
    server {
        listen       80;
        server_name  www.sc.com;
        location / {
                proxy_pass http://myweb1;
           }
    }
  }

在upstream模块中,可以通过server命令指定后端服务器的IP地址和端口,同时还可以设置每台后端服务器在负载均衡调度中的状态,常用的状态有以下几种:

1、down:表示当前server暂时不参与负载均衡。

2、backup:预留的备份机,当其他所有非backup机器出现故障或者繁忙的时候,才会请求backup机器,这台机器的访问压力最轻。

3、max_fails:允许请求的失败次数,默认为1,配合fail_timeout一起使用

4、fail_timeout:经历max_fails次失败后,暂停服务的时间,默认为10s(某个server连接失败了max_fails次,则nginx会认为该server不工作了。同时,在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。)

参考资料

  1. 你知道nginx的请求转发算法,如何配置根据权重转发
  2. 3. nginx的请求转发算法,如何配置根据权重转发
  3. Nginx负载均衡调度算法及配置案例
  4. Nginx几种负载均衡算法及配置实例
  5. Nginx配置之实现多台服务器负载均衡
0

评论 (0)

打卡
取消