负载均衡,顾名思义,用来应对大量请求的情况下,为了均衡服务器的压力,通过nginx 把请求平均地分发到多个服务器,以多服务器的环境,减轻请求压力。

1、主要关键配置字段 upstream

2、nginx负载均衡有六种

轮询默认方式
weight权重方式
ip_hash依据ip分配方式
least_conn最少连接方式
fair(第三方)响应时间方式
url_hash(第三方)依据URL分配方式

有如下参数:

fail_timeout与max_fails结合使用。
max_fails设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,
fail_time服务器会被认为停机的时间长度,默认为10s。
backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
down标记服务器永久停机了。

策略的基本配置和说明

轮询

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。
  • 缺省配置就是轮询策略。
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。

weight

  • 权重越高分配到需要处理的请求越多。
  • 此策略可以与least_conn和ip_hash结合使用。
  • 此策略比较适合服务器的硬件配置差别比较大的情况。

ip_hash

  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
  • ip_hash不能与backup同时使用。
  • 此策略适合有状态服务,比如session。
  • 当有服务器需要剔除,必须手动down掉。

least_conn

  • 把请求转发给连接数较少的后端服务器。
  • 此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

fair

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

url_hash

  • 同一个资源多次请求,可能会访问不同服务器,导致多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使同一个url(也就是同一个资源请求)访问同一台服务器,一旦缓存了资源,再此请求,直接从缓存中读取。
#轮询
upstream myserver{
   server 192.168.65.101:8080 max_fails=3 fail_timeout=20s;
   server 192.168.65.102:8080;
   server 192.168.65.103:8080; backup #备份服务器,当其他服务器都异常时,才会使用它
}
​
#指定权重 ,在轮询策略的基础上指定轮询的几率。
upstream myserver { 
   server 192.168.65.101:8080 weight=8; 
   server 192.168.65.102:8080 weight=10; 
} 
​
#ip_hash,ip取模,保证每个访客固定访问一个后端服务器,可以解决session不能跨服务器的会话问题 ,在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)
upstream myserver { 
   ip_hash;
   server 192.168.65.101:8080; 
   server 192.168.65.102:8080; 
} 
​
#least_conn,#把请求转发给连接数较少的后端服务器
upstream myserver{
    least_conn;    
    server 192.168.65.101:8080 weight=10;
    server 192.168.65.101:8080; 
​
}
​
#fair(第三方)[第三方的负载均衡策略的实现需要安装第三方插件],按照服务器端的响应时间来分配请求,响应时间短的优先分配。
upstream myserver { 
   server 192.168.65.101:8080; 
   server 192.168.65.102:8080; 
   fair;
}
​
#url_hash(第三方) #[第三方的负载均衡策略的实现需要安装第三方插件] , 实现每个url定向到同一个后端服务器,
upstream myserver{
    hash $request_uri;   
    server 192.168.65.101:8080; 
    server 192.168.65.102:8080; 
​
}
​
server {
     listen       80;
     server_name  xxx.cn;
     index index.php index.html index.htm default.php default.htm default.html;
     root /www/wwwroot/xxx.cn;
     location / {
             proxy_pass http://myserver;
      }
​
.....