Nginx 负载均衡算法

Nginx的负载均衡策略分为内置策略和扩展策略两种。其中内置策略有轮询、加权轮询、ip_hash;扩展策略有fail、url_hash等,需要安装对应的软件包。

一、内置策略(默认已编译进nginx内核)
1、轮询(默认)

概述:
    每个请求按时间顺序逐一分配到不同的后端服务,如果后端某台服务器死机,自动剔除故障系统,使用户访问不受影响。
实现:
    http {
           #设置负载服务器列表
           upstream server_lb {
                server 10.19.182.1:8081;
                server 10.19.182.2:8081;
                server 10.19.182.3:8081 down;     // 表示当前的server暂时不参与负载均衡
                server 10.19.182.4:8081 backup;   // 备机
                ...
           }
           server  {
                #设置代理服务器
                location / {
                    proxy_pass http://server_lb;
                }
          }
    }

2、加权轮询(weighted round robin)

概述:
    weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。或者仅仅为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。
实现:
    http {
        upstream webserver {
            server 192.168.1.1:8080 weight=2 max_fails=3 fail_timeout=10s;
            server 192.168.1.2:8080 weight=1 max_fails=3 fail_timeout=10s;
            server 192.168.1.3:8080 backup;
        }
        server {
            listen       8080;
            server_name  www.suifeng.org 192.168.1.4;
            index index.html index.htm index.php index.jsp;
                location / {
                    proxy_pass http://webserver;
                    proxy_set_header Host   $host;
                    proxy_set_header X-Real-IP      $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
        }
    }

3、ip_hash

概述:
   每个请求按访问IP的哈希结果分配,来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题。
实现:
    upstream app1 {
       ip_hash;
       server 10.19.182.1;
       server 10.19.182.2;
    }

二、扩展策略
1、fair(安装upstream_fair模块)

概述:
    根据后端服务器的响应时间 来分配请求,响应时间短的优先分配。
实现:
    upstream backend {  
        server server1;  
        server server2;  
        fair;  
    }

2、url_hash(安装Nginx的hash软件包)

概述:
   按访问的URL的哈希结果来分配请求,使每个URL定向到一台后端服务器,可以进一步提高后端缓存服务器的效率。
实现:
    upstream backend {  
        server squid1:3128;  
        server squid2:3128;  
        hash $request_uri;  
        hash_method crc32;
    }

猜你喜欢

转载自blog.csdn.net/u013241093/article/details/80891194