我有一个非常基本的循环反向代理设置,用于学习目的。
upstream file_server_com {
server machine-01;
server machine-02;
}
server {
listen 80 default_server reuseport;
listen [::]:80 default_server ipv6only=on reuseport;
root /usr/share/nginx/html;
index index.html index.htm;
server_name localhost;
location / {
proxy_pass http://file_server_com;
}
}
我在每个上游服务器上都有一个 1kb 的文件。我运行 wget 来下载文件。我没有看到机器 01 和 02 之间的请求来回切换。总的来说,我确实看到两者之间大约 50/50 的分配,但我认为我应该看到请求在两台机器之间交替。
有时我会看到机器 01 连续收到请求,有时我会看到机器 02 连续收到请求,有时它们交替出现。
我对 nginx 的循环负载均衡器有什么不明白吗?
答案1
答案2
我们在 nginx/1.13.7 的 roud roubin 模块中看到了类似的行为。借用您的示例,我们注意到发送到 的请求比例machine-01
高于machine-02
。
最初,我们认为nginx-sticky-模块-ng可能会导致分布不均。但我们注意到粘性会话只会加剧潜在问题。
我们可以使用 curl 测试请求,而无需保留路由 cookie,这会在每个请求上触发 nginx 的默认轮询。通过计算每个上游的路由 cookie 数量,我们可以衡量哪些区域受到青睐——从上到下,上游列表中的第一个服务器似乎获得更多流量。
我们仍在尝试了解这种情况发生的原因和方式。目前,我们正在尝试通过调整weight
每个上游服务器中的参数来解决这个问题。