Nginx 负载均衡方案

Posted Starfish

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx 负载均衡方案相关的知识,希望对你有一定的参考价值。

  

  • 轮询  

根据nginx配置文件中的顺序,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除。

upstream web { 
    server server1; 
    server server2; 
} 

 

  • 最少连接

Web 请求会被转发到连接数最少的服务器上。least_conn 算法很简单,首选遍历后端集群,比较每个后端的 conns/weight,选取该值最小的后端。如果有多个后端的 conns/weight 值同为最小的,那么对它们采用加权轮询算法。

 upstream web { 
     least_conn; 
     server server1; 
     server server2; 
 } 

 

  • IP地址哈希

同一客户端连续的 Web 请求可能会被分发到不同的后端服务器进行处理,因此如果涉及到会话 Session,可以使用基于 IP 地址哈希的负载均衡方案。这样的话,同一客户端连续的 Web 请求都会被分发到同一服务器进行处理(每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题)。

upstream web { 
    ip_hash;
    server server1; 
    server server2; 
} 

 

  • 权重 (Weighted Load Balancing)

可以根据服务器的性能状况有选择的分发 web 请求。指定轮询几率,weight 越高、访问比率越大。weight=2,意味着每接收到3个请求,前2个请求会被分发到第一个服务器,第3个请求会分发到第二个服务器,其它的配置同轮询配置。

基于权重的负载均衡和基于 IP 地址哈希的负载均衡可以组合在一起使用。

upstream web { 
    server server1 weight=2; 
    server server2; 
} 

 

  • fair(第三方)

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

upstream web {
    server server1;
    server server2;
    fair;
}

 

  • url_hash(第三方)

按访问 url 的 hash 结果来分配请求,使每个 url 定向到同一个后端服务器,后端服务器为缓存时比较有效。 hash_method 是使用的 hash 算法

upstream web {
    server server1:3128;
    server server1:3128;
    hash $request_uri;
    hash_method crc32;
}

 

 

 

每个设备的状态设置为:


1.down 表示单前的 server 暂时不参与负载 
2.weight 默认为1.weight 越大,负载的权重就越大。 
3.max_fails:允许请求失败的次数默认为1.当超过最大次数时,返回 proxy_next_upstream 模块定义的错误 
4.fail_timeout:max_fails 次失败后,暂停的时间。 
5.backup: 其它所有的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。sorry server 提供非业务功能。

 

以上是关于Nginx 负载均衡方案的主要内容,如果未能解决你的问题,请参考以下文章

nginx如何做到TCP的负载均衡

Nginx的负载均衡方案详解

nginx+keepalive 实现高可用负载均衡方案

架构设计:负载均衡层设计方案——Nginx进阶

nginx-配置nginx实现负载均衡

nginx配置Nginx实现负载均衡