Nginx负载均衡

技术分享 Finley Fu 2019-10-15 0评论 229
当服务访问量达到一定程度后,就需要考虑做负载均衡,从而减缓单个服务器压力,Nginx负载均衡也是一个常用的工具

        Nginx的安装配置在之前的文章中已经介绍过了,点击跳转

   负载均衡简介  

        负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,例如FTP服务器、Web服务器、企业核心应用服务器和其它主要任务服务器等,从而协同完成工作任务。
        负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。

   Nginx负载均衡策略  

        目前nginx负载策略共两大类,分别是:内置策略和扩展策略。
        内置策略有四种:轮询策略、加权轮询策略、 最少连接策略和ip_hash策略。默认情况下内置策略会编译进Nginx的内核,只需要在nginx配置中指明参数即可。
        扩展策略有三种:fair 策略,url_hash 策略,sticky 策略。

  • 轮询策略

        Nginx的默认策略,把每个请求依次按顺序分配给每个服务器,如果其中某个服务器宕机,会自动剔除。

http {
     upstream myserver{
        server server1:8888 max_fails=3 fail_timeout=3s ;
        server server2:8888 max_fails=3 fail_timeout=3s ;
    }
    server {
        listen 80;
        server_name mydomain;
        location / {
            proxy_pass http://myserver;
        }
    }
}
  • 加权轮询策略

        在轮询策略的基础上加权重,即根据权重比例,每个服务器受访的概率不同,权重越大,受访概率越高,此方法适用于服务器配置不同,高配置服务器可设置较高权重。

http {
     upstream myserver{
        server server1:8888 weight=2;
        server server2:8888 weight=4;
    }
    server {
        listen 80;
        server_name mydomain;
        location / {
            proxy_pass http://myserver;
        }
    }
}
  • 最少连接策略

        Nginx会根据当前所有服务器的繁忙程序(连接数),把当前请求分配给连接数最少的服务器,从而保证了不会过度的请求某一个服务器,此方式适用于当一些请求会占用较大资源时。

http {
    upstream myserver{
 	least_conn;
        server server1:8888;
        server server2:8888;
    }
    server {
        listen 80;
        server_name mydomain;
        location / {
    	    proxy_pass http://myserver;
        }
    }
}
  • ip_hash策略

        上面提到的三种方式,可能会把同一个用户的每一次请求分发到不同服务器上,这时候就需要我们自己来维护session机制,因为不同的服务器是不会共享session的,而ip_hash策略通过维护访问者IP的hash使每一次请求都分发到同一个服务器,除非某个服务器宕机。

http {
    upstream myserver{
        p_hash;
        server server1:8888;
        server server2:8888;
    }
    server {
        listen 80;
        server_name mydomain;
        location / {
            proxy_pass http://myserver;
        }
    }
}
  • fair 策略

        此策略与最少连接类似,但是fail策略是根据服务器相应时间来判断服务器繁忙程度,然后将请求分发到相应时间最短的服务器,但是这种策略自适应性很强,实际网络情况是很复杂的,因此慎用。

http {
    upstream myserver{
        server server1:8888;
        server server2:8888;
        fair;
    }
    server {
        listen 80;
        server_name mydomain;
        location / {
            proxy_pass http://myserver;
        }
    }
}
  • url_hash 策略

        根据服务器维护的url_hash来决定分发服务器,即同一个url会分发到同一个服务器。

http {
    upstream myserver{
        hash $request_uri;
        server server1:8888;
        server server2:8888;
    }
    server {
        listen 80;
        server_name mydomain;
        location / {
            proxy_pass http://myserver;
        }
    }
}
  • sticky 策略

        保证一个客户端只和一个服务器进行通讯,保存长连接,当会话结束后再选择一个服务器,以此来保证压力平衡。注:浏览器不支持cookie,sticky不生效。

http {
    upstream myserver{
        sticky;
        server server1:8888;
        server server2:8888;
    }
    server {
        listen 80;
        server_name mydomain;
        location / {
            proxy_pass http://myserver;
        }
    }
}