Wie kann man Nginx dazu bringen, einen anderen Mischling zu verwenden als den, der die aktuelle Anfrage bearbeitet?

Wie kann man Nginx dazu bringen, einen anderen Mischling zu verwenden als den, der die aktuelle Anfrage bearbeitet?

Auf unserer Site läuft ein 12-Mongrel-Cluster, und in meiner lokalen Dev-Version habe ich einen 5-Mongrel-Cluster. nginx ( version: nginx/1.22.0) sitzt im Vordergrund.

Einer unserer Prozesse erstellt ein PDF, indem er wkhtmltopdf ausgibt, ein Befehlszeilentool, das wiederum die Website aufruft, um eine Seite abzurufen, die es dann in ein PDF umwandelt.

Das funktioniert, außer dass die Anforderung für die Seite manchmal an denselben Mischling (immer Mischling 1) geht, der das Shelled ausgegeben hat, und dann habe ich einen Deadlock – die erste Anforderung wartet darauf, dass die zweite abgeschlossen wird, aber die zweite steht in einer Warteschlange nach der ersten.

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)

Ich habe versucht, in meiner Nginx-Konfiguration einen anderen Mischling als den aktuell aktiven zu verwenden, aber ohne Erfolg – ​​es scheint immer zufällig einen auszuwählen, sodass die Wahrscheinlichkeit, dass derselbe ausgewählt wird und es dann nicht mehr weitergeht, bei 20 % liegt (es fühlt sich aber eher wie 50 % an).

Der entsprechende Nginx-Konfigurationsblock sieht derzeit folgendermaßen aus:

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;
}

Ich habe max_connssie alle auf 1 gesetzt, weil ich dachte, das würde das Problem beheben, aber das hat es nicht. Ich habe die least_connOption auch ausprobiert, aber beim zweiten oder dritten Versuch landeten beide wieder auf Mischling 1.

Ich habe es versucht, round_robinnachdem ich darüber gelesen hatte, aber ich erhalte eine Fehlermeldung -nginx: [emerg] unknown directive "round_robin"

Jeder Ratschlag ist willkommen, danke.

verwandte Informationen