四、Nginx实现负载均衡的7种方式

Nginx实现负载均衡的几种方式

1、轮询(Round Robin 默认)

请求在服务器之间均匀分布,并考虑服务器权重。默认情况下使用此方法

upstream backend {
   # 没有为循环指定负载平衡方法
   server backend1.example.com;
   server backend2.example.com;
}

Nginx 轮询

2、 服务器权重

默认情况下,Nginx 使用 Round Robin 方法根据权重在组中的服务器之间分配请求。该指令的 weight 参数设置服务器的权重;默认是1:

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com;
    server 192.0.0.1 backup;
}

Nginx 加权轮询
在这个例子中,backend1.example.com有 weight 5;其他两台服务器有默认权重(1),但有 IP 地址的那台192.0.0.1被标记为 backup 服务器,除非其他两台服务器都不可用,否则不会接收请求。上述这种权重配置,每当有6请求,5个会发送到 backend1.example.com ,1个会发送到 backend2.example.com

3、最少连接(Least Connections )

请求被发送到活动连接数最少的服务器,其次考虑服务器权重:

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

4、IP Hash

请求发送到的服务器由客户端 IP 地址确定。在这种情况下,要么使用 IPv4 地址的前三个八位字节,要么使用整个 IPv6 地址来计算哈希值。该方法保证来自同一地址的请求到达同一服务器,除非它不可用。

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

如果其中一台服务器需要暂时从负载平衡轮换中移除,则可以使用down参数对其进行标记,以保留客户端 IP 地址的当前散列。由该服务器处理的请求会自动发送到组中的下一个服务器:

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

Nginx iphash

5、通用哈希

通用哈希- 请求发送到的服务器由用户定义的键确定,该键可以是文本字符串、变量或组合。例如,密钥可以是成对的源 IP 地址和端口,或 URI,如本例所示:

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

该指令的可选参数一致hash启用 ketama 一致性哈希负载平衡。请求根据用户定义的散列键值均匀分布在所有上游服务器上。如果将上游服务器添加到上游组或从上游组中删除,则仅重新映射少数键,从而在负载平衡缓存服务器或其他累积状态的应用程序的情况下最大限度地减少缓存未命中。

6、最短时间(Least Time)

最少的时间(Nginx Plus) - 对于每个请求,Nginx选择具有最低平均延迟和最低数量的活动连接,其中,最低平均延迟是根据以下哪一个参数计算得出的,以最短时间指令为准:

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

7、Random

每个请求都将传递到随机选择的服务器。如果指定了两个参数,Nginx首先会考虑服务器权重随机选择两台服务器,然后使用指定的方法选择其中一台服务器:

  • least_conn:活动连接的最少数量
  • least_time=header(NGINX Plus):从服务器接收响应标头的最短平均时间( $upstream_header_time)
  • least_time=last_byte(NGINX Plus):从服务器接收完整响应的最小平均时间( $upstream_header_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;
}

的随机负载平衡方法应被用于在多个负载平衡器传递请求到相同组的后端分布式环境。对于负载均衡器可以查看所有请求的环境,请使用其他负载均衡方法,例如循环、最少连接和最少时间。

注意:当配置除 Round Robin 之外的任何方法时,将相应的指令(hash、ip_hash、least_conn、least_time、 或random)放在块中server指令列表的上方upstream {}。

注: Nginx Plus 是ngxin的商业版。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖太乙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值