我们正在连接到一个系统,其中有4个端口可以满足grpc请求。使用nginx作为负载均衡器,使用以下配置转发4个客户端grpc请求:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent"';
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream backend{
#least_conn;
server localhost:9000 weight=1 max_conns=1;
server localhost:9001 weight=1 max_conns=1;
server localhost:9002 weight=1 max_conns=1;
server localhost:9003 weight=1 max_conns=1;
}
server {
listen 80 http2;
access_log /tmp/access.log main;
error_log /tmp/error.log error;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header Host $http_host;
location / {
#eepalive_timeout 0;
grpc_pass grpc://backend;
grpc_pass_header userid;
grpc_pass_header transid;
}
}
}
观察到,几乎所有客户端4请求都访问所有4个端口,但是有时(例如30%)仅访问2个端口/ 3个端口。 NGINX似乎没有发生默认的轮询机制。我们尝试了所有可能性,例如max_conns,最少_conn,重量但没有运气。
好像我在以下链接中遇到了这个问题:
https://serverfault.com/questions/895116/nginx-round-robin-nor-exactly-round-robin
https://stackoverflow.com/questions/40859396/how-to-test-load-balancing-in-nginx
当我浏览Quora时,发现nginx中的“ fair”模块将解决此问题。
"The Nginx fair proxy balancer enhances the standard round-robin load
balancer provided with Nginx so that it will track busy back end servers (e.g. Thin, Ebb, Mongrel) and balance the load to non-busy server processes. "
https://www.quora.com/What-is-the-best-way-to-get-Nginx-to-do-smart-load-balancing
我尝试从源代码中使用NGINX的“公平”模块,但是遇到了很多问题。我无法启动NGINX本身。谁能解决这个问题?
答案 0 :(得分:0)
我们得到了答案!!!!刚刚更改为“ worker_processes自动;”到“ worker_processes 1;”现在,它工作正常。
所有请求均已正确负载均衡。在这里,我们觉得如果您使用的不是单个工作程序,则多个工作程序可能会将请求发送到同一端口。
答案 1 :(得分:0)
我不知道为什么会这样,但这可能与浏览器有关。 我在使用浏览器发送请求时遇到了同样的问题。当我使用curl从终端发送请求时,它运行正常。