Como fazer o nginx usar um vira-lata diferente daquele que está lidando com a solicitação atual?

Como fazer o nginx usar um vira-lata diferente daquele que está lidando com a solicitação atual?

Em nosso site, temos um cluster de 12 vira-latas em execução e, em minha versão de desenvolvimento local, tenho um cluster de 5 vira-latas. nginx ( version: nginx/1.22.0) fica na frente.

Um de nossos processos cria um pdf usando wkhtmltopdf, uma ferramenta de linha de comando, que por sua vez chama o site para obter uma página que depois transforma em pdf.

Isso está funcionando, só que às vezes a requisição da página vai para o mesmo vira-lata (sempre vira-lata 1) que desembolsou, e aí eu tenho um impasse - a primeira requisição está esperando a segunda terminar, mas a segunda está em uma fila depois do primeiro.

Mongrel Top (delay: 0.25)                                                                                                                                                                 Fri Sep 22 16:47:59 2023

65347 sh -c start -p 3000 & mongrel_rails start -p 3001 & mongrel_rails start -p 3002 & mongrel_rails start -p 3003 & mongrel_rails start -p 3004
65348 [3000/2/11]: handling 127.0.0.1: POST /admin/school_quotes/CMS1Y-187790-107226, 127.0.0.1: GET /
65349 [3001/0/0]: idle
65350 [3002/0/0]: idle
65351 [3003/0/0]: idle
65352 [3004/0/0]: idle

6 process(es)

Na minha configuração do nginx, tenho tentado fazer com que ele use um vira-lata diferente daquele que está ocupado no momento, mas sem sucesso - ele sempre parece escolher um aleatoriamente e, portanto, tem 20% de chance de escolher o mesmo e trancando. (embora pareça mais como 50%)

O bloco de configuração nginx relevante atualmente se parece com isto:

upstream elrs {
  # least_conn;
  # random two;
  # round_robin;
  zone backends 128k;
  server 127.0.0.1:3000 max_conns=1 max_fails=3 fail_timeout=2;
  server 127.0.0.1:3001 max_conns=1 max_fails=3 fail_timeout=2;
  server 127.0.0.1:3002 max_conns=1 max_fails=3 fail_timeout=2;
  server 127.0.0.1:3003 max_conns=1 max_fails=3 fail_timeout=2;
  server 127.0.0.1:3004 max_conns=1 max_fails=3 fail_timeout=2;
}

Eu configurei max_connspara 1 em todos eles pensando que isso poderia resolver o problema, mas não resolveu. Eu também tentei a least_connopção, mas na segunda ou terceira vez que tentei, os dois acabaram no vira-lata 1 novamente.

Tentei round_robindepois de ler sobre isso, mas recebi um erro -nginx: [emerg] unknown directive "round_robin"

Qualquer conselho apreciado, obrigado.

informação relacionada