Nginx中的负载均衡算法

2019-12-06  本文已影响0人  Elf_乐易

负载均衡算法

  1. 轮询(Round Robin)

    nginx默认负载均衡算法,可以配合权重使用,默认情况权重是1。

    upstream backend {
       # no load balancing method is specified for Round Robin
       server backend1.example.com;
       server backend2.example.com;
    }
    
  2. 最少连接(Least Connections

    请求会转发到当前有效连接最少的服务器,可以配合权重使用。

    upstream backend {
        least_conn;
        server backend1.example.com;
        server backend2.example.com;
    }
    
  3. IP哈希(IP Hash

    由请求客户端的IP地址决定请求发往哪台服务器,可以保证同一个IP地址的请求可以转发到同一台服务器。IPV4的前三位或者IPV6的全部地址参与哈希运算。

    upstream backend {
        ip_hash;
        server backend1.example.com;
        server backend2.example.com;
    }
    

    如果想要暂时移除当前负载服务器组中的某一台服务器,可以用down 参数标记服务器,已经通过IP哈希到当前服务器的请求会暂时保持,并自动被转移到组中的下一台服务器。

    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com down;
    }
    
  4. 普通哈希(Hash

    请求会根据自定义的字符串、变量或者二者的组合作为key进行哈希,决定发往哪台服务器。

    upstream backend {
        hash $request_uri consistent;
        server backend1.example.com;
        server backend2.example.com;
    }
    

    hash指令中consistent 参数是可选的,如果指定了consistent参数,负载均衡会使用一致性哈希中的ketama算法,请求会根据定义的哈希键值哈希均匀的发往组中的所有服务器上。给服务器组中增加新服务器或者移除要原来的服务器,只会有少数的哈希键会重新映射。

  5. 最短时间(Least Time

    nginx plus版本才能使用,nginx plus会选择平局延迟最低和当前最少有效连接数的服务器转发请求,计算平均延迟基于如下参数(parameters)列表:

    • header从服务器接收到第一个字节的响应时间
    • last_byte从服务器接收到全部响应的时间
    • last_byte inflight考虑不完整请求从服务器接收到全部响应的时间
    upstream backend {
        least_time header;
        server backend1.example.com;
        server backend2.example.com;
    }
    
  6. 随机(Random

    随机选择服务器转发请求。如果random指令的**two **参数,nginx会随机选择两台服务器考虑权重问题,一台服务器使用指定方法。指定方法包括:

    • least_conn 最少连接数
    • least_time=header (nginx plus)收到服务器响应消息头的最短平均时间 ($upstream_header_time)
    • least_time=last_byte (nginx plus)收到服务器完整响应消息头的最短平均时间 ($upstream_response_time)
    upstream backend {
        random two least_time=last_byte;
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;
        server backend4.example.com;
    }
    

    随机负载均衡方法用在多个负载均衡将请求转发到同一组后端服务器的分布式场景,对于负载均衡器具有所有请求的完整视图的环境,使用其他负载均衡方法,例如轮询,最少连接和最少时间。

其他文章列表

spring web service系列1
spring web service系列2
spring web service系列3
maven配置文件settings.xml详解
Nginx转发请求过程解析
Nginx upstream指令配置说明
Nginx中虚拟服务器server指令配置说明
Nginx中proxy_pass/proxy_redirect/proxy_set_header配置说明
Nginx中ngx_http_core_module相关指令配置说明
Java自带JVM监控工具jstat使用详细说明
Java自带JVM监控工具jps使用详细说明
Java自带故障分析工具jmap工具使用说明
Java自带故障分析工具jhat工具使用说明

上一篇 下一篇

猜你喜欢

热点阅读