我已经将 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
和::1
IP 地址。例如:
# /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]:8001
和127.0.0.1:8002
。[::1]:8002