nginx下的负载均衡(upstream)调度算法

  • 内容
  • 评论
  • 相关

接上篇文章《nginx下的负载均衡(upstream)配置说明教程》,这篇文章我们来聊聊nginx下的upstream的调度算法。

默认的nginx可以通过weight权重或者不设置weight(轮训)来作为负载均衡的调度方法,但是有时候为了更高的灵活性或者更加贴近业务场景我们则需要更加灵活的负载均衡调度算法来满足我们的需求。

consistent_hash 

一致性hash均衡负载调度算法,使用一致性hash均衡负载调度时nginx必须先安装好ngx_http_upstream_consistent_hash模块。与PHP的memcache模块memcache.hash_strategy兼容,这意味着可以使用php-memcache模块将内容存储到memcached集群中,而后通过nginx在集群中找到对应的服务器来获得更灵活的调度。

配置格式:

upstream 服务器组的名称 {
  consistent_hash nginx变量;
  server 上游服务器的地址或IP [可选的配置参数]
  server 上游服务器的地址或IP [可选的配置参数]
  server 上游服务器的地址或IP [可选的配置参数]
}

关于nginx的内置变量本博客之前也有一篇介绍文章,传送门:《nginx全局变量

ip_hash

IP hash负载调度算法,使用客户端IPv4地址的前三个八位字节或整个IPv6地址用作散列键。该方法确保来自同一客户机的请求总是传递到同一服务器,除非该服务器不可用。在后一种情况下,客户机请求将被传递到另一个服务器。很可能,它也总是相同的服务器。

配置格式:

upstream 服务器组的名称 {
  ip_hash;
  server 上游服务器的地址或IP [可选的配置参数]
  server 上游服务器的地址或IP [可选的配置参数]
  server 上游服务器的地址或IP [可选的配置参数]
}

fair

响应速度算法,根据上游服务的响应速度来分配上游服务器,响应速度越快的有限分配,使用fair调度算法时需要先安装upstream_fair模块。

配置格式:

upstream 服务器组的名称 {
  server 上游服务器的地址或IP [可选的配置参数]
  server 上游服务器的地址或IP [可选的配置参数]
  server 上游服务器的地址或IP [可选的配置参数]
  fair;
}

least_conn

连接数算法,根据后端节点的连接数来决定分配情况,哪个机器连接数少就有限调度。

配置格式:

upstream 服务器组的名称 {
  least_conn;
  server 上游服务器的地址或IP [可选的配置参数]
  server 上游服务器的地址或IP [可选的配置参数]
  server 上游服务器的地址或IP [可选的配置参数]
}

least_time

基于平均最短响应时间和最小活跃链接数的原则来选择后端服务的实例。如果存在多个实例同时满足该规则,则使用轮询的方法选出可用的后端服务实例。如果指定了header参数,则使用接收响应header的时间。如果指定了last_byte参数,则使用接收完整响应的时间。

random

随机算法,每个请求都被随机发送到某个上游服务,random还有two参数,如果指定了该参数则会随机的选择两台上游服务器然后再根据配置选择其中的一台。支持的配置:least_conn、least_time=header(NGINX PLUS only)、least_time=last_byte(NGINX PLUS only),后面两种配置只有上商业版的nginx才支持。

配置样例:

upstream backend {
    random two least_time=last_byte;
    # random two least_conn;
    # random;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com;
    server backend4.example.com;
}

当然还有些特殊的调度需求则可以使用consistent_hash配合nginx内置变量来实现,比如根据url hash来做负载均衡的调度。当然nginx的第三方扩展中也有url_hash等扩展,如果想通过扩展来直接实现这些调度算法直接到nginx官网搜索下载即可。 https://www.nginx.com/resources/wiki/modules/


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,非商业性质可转载须署名链接,详见本站版权声明。

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注