Nginx使用upstream配置负载均衡

时间:2022-06-01 18:06:58

nginx主要使用upstream配置多个服务器,设置负载均衡策略。

基本配置

upstream

upstream example.com{ 
  server host1; 
  server host2; 
} 

server

server {
    listen 90;
    server_name example.com;

    location / {
        proxy_set_header Host $host;
        proxy_set_header x-for $remote_addr;
        proxy_set_header x-server $host;
        proxy_set_header x-agent $http_user_agent;
        proxy_pass http://example.com;
    }
}

负载均衡策略

round-robin(轮询)

请求按时间顺序逐一分配服务器,如果服务器挂机,自动被剔除。nginx默认按轮询策略分配服务器。

缺点:轮询策略会导致同一客户端多次访问分配到不同的服务器,如果集群没有对session做处理,会导致客户端访问的session丢失。建议用作静态资源的分配策略,如图片服务器。

ip_hash

按请求的客户端ip计算hash,按hash结果分配服务器。这样每一个客户端固定访问同一服务器,一定程度上解决轮询策略session丢失的问题。

示例

upstream example.com{ 
  ip_hash;
  server host1; 
  server host2; 
} 

fair(第三方)

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

 upstream example.com{    
   server host1; 
   server host2; 
   fair; 
}

url_hash(第三方)

计算请求url的hash,按hash的结果来分配服务器。这样每个url定向到同一服务器,此策略适用于服务器缓存url请求的场景。

 upstream example.com{ 
   server host1; 
   server host2; 
   hash $request_uri; 
   hash_method crc32; 
}

注意:在upstream中加入hash语句,server语句中不能有weight等其他的参数,hash_method是使用的hash算法。

服务器状态

  • weight:设置权重,默认为1,数值越大,负载分配到的机率越高。
  • max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;
  • fail_timeout:等待请求的目标服务器发送响应的时长;
  • backup:用于fallback的目的,所有服务均故障时才启动此服务器;
  • down:手动标记其不再处理任何请求;

示例

upstream bakend{ 
   ip_hash; 
   server host1 down; 
   server host2 weight=2; 
   server host3; 
   server host4 backup; 
}

注意:示例里的host可以为ip,也可以为ip加端口