如何讓 nginx 使用與處理目前請求不同的混合體?

如何讓 nginx 使用與處理目前請求不同的混合體?

在我們的網站上,我們運行著一個 12 個雜種集群,在我的本地開發版本中,我有一個 5 個雜種集群。 nginx( version: nginx/1.22.0) 位於前面。

我們的一個流程透過 shell 到 wkhtmltopdf(一種命令列工具)來製作 pdf,該工具反過來調用網站以獲取頁面,然後將其轉換為 pdf。

這是可行的,除了有時頁面的請求會發送到被拋出的同一個雜種(總是雜種1),然後我遇到死鎖- 第一個請求正在等待第二個請求完成,但第二個請求完成在第一個之後的佇列中。

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)

在我的 nginx 配置中,我一直試圖讓它使用與當前繁忙的不同的雜種,但沒有成功 - 它似乎總是隨機選擇一個,因此有 20% 的機會選擇同一個並鎖定。 (雖然感覺更像是50%)

目前相關的 nginx 設定塊如下所示:

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

我將max_conns所有這些都設為 1,認為這可能會解決問題,但事實並非如此。我也嘗試過這個least_conn選項,但第二次或第三次嘗試時,它們都再次出現在 mongrel 1 上。

round_robin在閱讀完相關內容後嘗試過,但從中得到了一個錯誤 -nginx: [emerg] unknown directive "round_robin"

任何建議表示讚賞,謝謝。

相關內容