Nginx Round Robin 平衡每个第二个请求

Nginx Round Robin 平衡每个第二个请求

我已经将 nginx 配置为在上游服务器之间执行基本的循环负载平衡。流量在上游服务器之间均匀分布,我期望负载在每次请求后都得到平衡,但实际上每隔一个请求就会平衡一次(负载平衡器将前 2 个 HTTP 请求发送到第一台服务器,接下来的 2 个 HTTP 请求发送到第二台服务器,等等)。我还尝试在上游服务器上使用权重均等的加权负载平衡,行为保持不变。

负载均衡器配置:

######################  Upstream directive   ######################
upstream backend {
   server ecslb.bknd-srv-one.com:10000;
   server ecslb.bknd-srv-two.com:10000;
   server ecslb.bknd-srv-three.com:10000;
}

######################  Server directive   ######################
server {
   listen 10000;   
   server_name research-complex.com;
   location / {
   proxy_pass http://backend;
   }
}

负载均衡器配置由 nginx.conf 加载,该配置保留默认设置,仅添加了解析器。您认为这可能是什么原因造成的?

答案1

这可能会有帮助。看来你不是唯一一个遇到这个问题的人。

https://stackoverflow.com/questions/55257595/nginx-round-robin-load-balancing-is-not-as-expected

答案2

不确定这是否是您的具体情况,但它可能会对来这里的人有所帮助。

该指令的文档server说明

一个域名解析到多个IP地址,一次定义多个服务器。 http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

因此,如果 中指定的地址server被解析为多个 IP 地址,Nginx 还将创建多个上游服务器并在它们之间进行平衡。这样一来,Nginx 看起来好像连续将两个请求传递给同一个上游服务器,但实际上是两个“不同的”上游服务器(具有不同的 IP 地址)。

在我的例子中,我使用的localhost是服务器地址,根据我的/etc/hosts文件,解析为127.0.0.1::1IP 地址。例如:

# /etc/hosts
127.0.0.1   localhost
...

::1     localhost ip6-localhost ip6-loopback
...

然后,在如下配置中:

upstream backend {
   server localhost:8001;
   server localhost:8002;
}

Nginx 将在 4 台服务器之间进行平衡—— 127.0.0.1:8001[::1]:8001127.0.0.1:8002[::1]:8002

相关内容