
私たちのサイトでは 12 個の mongrel クラスターが稼働しており、ローカル開発バージョンでは 5 個の mongrel クラスターが稼働しています。nginx ( version: nginx/1.22.0
) が前面に配置されています。
私たちのプロセスの 1 つは、コマンドライン ツールである wkhtmltopdf にシェルアウトして PDF を作成し、次に Web サイトを呼び出してページを取得し、それを PDF に変換します。
これは機能していますが、ページのリクエストがシェルを実行した同じ雑種 (常に雑種 1) に送信され、デッドロックが発生します。最初のリクエストは 2 番目のリクエストが完了するのを待機していますが、2 番目のリクエストは最初のリクエストの後のキューにあります。
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 設定では、現在ビジー状態になっているものとは異なる mongrel を使用するようにしていますが、成功していません。常にランダムに 1 つを選択するだけなので、同じものを選択してロックする可能性が 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
オプションも試しましたが、2 回目または 3 回目に試したときに、両方とも再び雑種 1 に設定されました。
それを読んで試してみましたround_robin
が、エラーが発生しました -nginx: [emerg] unknown directive "round_robin"
アドバイスをいただければ幸いです。ありがとうございます。