Мы подключаемся к системе, в которой через 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, less_conn, weight, но не повезло.
Похоже, я столкнулся с проблемой, как показано в ссылках ниже:
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 решит эту проблему.
"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.Кто-нибудь может помочь с этой проблемой?