【背景】
これまでEC2にデプロイしていたブログシステムをAWS EKSクラスタ上への移行を行っています。既存システムのEC2上では、Webサーバ(nginx)コンテナと、APサーバ(django + gunicorn)コンテナの2つのコンテナで動作しており正常に、ブラウザからアクセスすることができます。そこでAWS EKS上のノード(EC2)に同じようにデプロイしたところ、ブラウザからアクセスすることができず、「502 Bad Gateway」と表示され、gunicornのログでは、ブラウザアクセスのタイミングで「[CRITICAL] WORKER TIMEOUT (pid:18294)」のメッセージが表示されています。現在、この原因を調査しているのですが、分かっていないのが現状です。どなたか、心当たりがありましたら、ご教示いただけると幸いです。
【gunicornのログ・ステータス】
root@blogsystem-apserver01:/# systemctl status gunicorn ● gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2021-05-09 08:57:19 UTC; 5 days ago Main PID: 18291 (gunicorn) Tasks: 4 (limit: 4636) Memory: 95.8M CGroup: /kubepods/besteffort/podd270872c-cc5b-4a3b-92ed-f463ee5f5d77/1eafc79ffd656ff1c1bc39175ee06c7a5ca8692715c5e2bfe2f979d8718411ba/system.slice/gunicorn.service ├─18291 /home/ubuntu/python3/bin/python /home/ubuntu/python3/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/socket/myproject.sock myproject.wsgi:a pplication ├─18295 /home/ubuntu/python3/bin/python /home/ubuntu/python3/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/socket/myproject.sock myproject.wsgi:a pplication ├─18299 /home/ubuntu/python3/bin/python /home/ubuntu/python3/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/socket/myproject.sock myproject.wsgi:a pplication └─18300 /home/ubuntu/python3/bin/python /home/ubuntu/python3/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/socket/myproject.sock myproject.wsgi:a pplication May 09 08:57:20 blogsystem-apserver01 gunicorn[18291]: [2021-05-09 08:57:20 +0000] [18291] [INFO] Starting gunicorn 20.0.4 May 09 08:57:20 blogsystem-apserver01 gunicorn[18291]: [2021-05-09 08:57:20 +0000] [18291] [INFO] Listening at: unix:/home/ubuntu/socket/myproject.sock (18291) May 09 08:57:20 blogsystem-apserver01 gunicorn[18291]: [2021-05-09 08:57:20 +0000] [18291] [INFO] Using worker: sync May 09 08:57:20 blogsystem-apserver01 gunicorn[18293]: [2021-05-09 08:57:20 +0000] [18293] [INFO] Booting worker with pid: 18293 May 09 08:57:20 blogsystem-apserver01 gunicorn[18294]: [2021-05-09 08:57:20 +0000] [18294] [INFO] Booting worker with pid: 18294 May 09 08:57:20 blogsystem-apserver01 gunicorn[18295]: [2021-05-09 08:57:20 +0000] [18295] [INFO] Booting worker with pid: 18295 May 09 08:57:59 blogsystem-apserver01 gunicorn[18291]: [2021-05-09 08:57:59 +0000] [18291] [CRITICAL] WORKER TIMEOUT (pid:18293) May 09 08:58:00 blogsystem-apserver01 gunicorn[18299]: [2021-05-09 08:58:00 +0000] [18299] [INFO] Booting worker with pid: 18299 May 09 08:58:01 blogsystem-apserver01 gunicorn[18291]: [2021-05-09 08:58:01 +0000] [18291] [CRITICAL] WORKER TIMEOUT (pid:18294) May 09 08:58:02 blogsystem-apserver01 gunicorn[18300]: [2021-05-09 08:58:02 +0000] [18300] [INFO] Booting worker with pid: 18300 root@blogsystem-apserver01:/#
【更に調べたこと】
色々と調べたのですが、断定はできないのですが、gunicornの「sync」ワーカーを「givent」ワーカーに変更することで、解消できる可能性があるようです。
(参考)
https://github.com/benoitc/gunicorn/issues/1194
以下の通りgunicornの設定ファイルを編集して「givent」ワーカーに変更しようと試みたのですが、gunicornを再起動して、ステータスを見ると、「RuntimeError: gevent worker requires gevent 1.4 or higher」と表示され、gunicornを起動することができません。そして、「python3 -m pip install gevent」で1.4以上のバージョンのgeventをインストールしたのですが、再度、「RuntimeError: gevent worker requires gevent 1.4 or higher」と表示されます。この件も上記、gunicornの「WORKER TIMEOUT」に関連性がある可能性もあると思いますので、解決方法に心当たりの方がおりましたら、ご教示いただけると幸いです。
・gunicorn設定ファイル
(python3) ubuntu@blogsystem-apserver01:/etc/systemd/system$ more gunicorn.service [Unit] Description=gunicorn daemon After=network.target [Service] User=ubuntu Group=www-data WorkingDirectory=/home/ubuntu/myproject ExecStart=/home/ubuntu/python3/bin/gunicorn --access-logfile - --workers 3 --worker-class gevent --bind unix:/home/ubuntu/socket/myproject.sock myproject.wsgi:application [Install] WantedBy=multi-user.target (python3) ubuntu@blogsystem-apserver01:/etc/systemd/system$
・gunicornステータス
root@blogsystem-apserver01:/etc/systemd/system# systemctl status gunicorn ● gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Sat 2021-05-15 02:30:08 UTC; 1s ago Process: 19182 ExecStart=/home/ubuntu/python3/bin/gunicorn --access-logfile - --workers 3 --worker-class gevent --bind unix:/home/ubuntu/socket/myproject.sock myproject.wsgi:a pplication (code=exited, status=1/FAILURE) Main PID: 19182 (code=exited, status=1/FAILURE) May 15 02:30:08 blogsystem-apserver01 gunicorn[19182]: File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked May 15 02:30:08 blogsystem-apserver01 gunicorn[19182]: File "<frozen importlib._bootstrap>", line 671, in _load_unlocked May 15 02:30:08 blogsystem-apserver01 gunicorn[19182]: File "<frozen importlib._bootstrap_external>", line 783, in exec_module May 15 02:30:08 blogsystem-apserver01 gunicorn[19182]: File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed May 15 02:30:08 blogsystem-apserver01 gunicorn[19182]: File "/home/ubuntu/python3/lib/python3.8/site-packages/gunicorn/workers/ggevent.py", line 16, in <module> May 15 02:30:08 blogsystem-apserver01 gunicorn[19182]: raise RuntimeError("gevent worker requires gevent 1.4 or higher") May 15 02:30:08 blogsystem-apserver01 gunicorn[19182]: RuntimeError: gevent worker requires gevent 1.4 or higher May 15 02:30:08 blogsystem-apserver01 gunicorn[19182]: ] May 15 02:30:08 blogsystem-apserver01 systemd[1]: gunicorn.service: Main process exited, code=exited, status=1/FAILURE May 15 02:30:08 blogsystem-apserver01 systemd[1]: gunicorn.service: Failed with result 'exit-code'. root@blogsystem-apserver01:/etc/systemd/system#
・geventワーカーのインストール
root@blogsystem-apserver01:/etc/systemd/system# python3 -m pip install gevent Requirement already satisfied: gevent in /usr/local/lib/python3.8/dist-packages (1.4.0) Requirement already satisfied: greenlet>=0.4.14 in /usr/local/lib/python3.8/dist-packages (from gevent) (1.1.0) WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv root@blogsystem-apserver01:/etc/systemd/system#
・geventワーカーのインストール後、再起動後のgunicornステータス
root@blogsystem-apserver01:/etc/systemd/system# systemctl restart gunicorn root@blogsystem-apserver01:/etc/systemd/system# root@blogsystem-apserver01:/etc/systemd/system# systemctl status gunicorn ● gunicorn.service - gunicorn daemon Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: enabled) Active: failed (Result: exit-code) since Sat 2021-05-15 03:08:42 UTC; 1s ago Process: 19196 ExecStart=/home/ubuntu/python3/bin/gunicorn --access-logfile - --workers 3 --worker-class gevent --bind unix:/home/ubuntu/socket/myproject.sock myproject.wsgi:a pplication (code=exited, status=1/FAILURE) Main PID: 19196 (code=exited, status=1/FAILURE) May 15 03:08:42 blogsystem-apserver01 gunicorn[19196]: File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked May 15 03:08:42 blogsystem-apserver01 gunicorn[19196]: File "<frozen importlib._bootstrap>", line 671, in _load_unlocked May 15 03:08:42 blogsystem-apserver01 gunicorn[19196]: File "<frozen importlib._bootstrap_external>", line 783, in exec_module May 15 03:08:42 blogsystem-apserver01 gunicorn[19196]: File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed May 15 03:08:42 blogsystem-apserver01 gunicorn[19196]: File "/home/ubuntu/python3/lib/python3.8/site-packages/gunicorn/workers/ggevent.py", line 16, in <module> May 15 03:08:42 blogsystem-apserver01 gunicorn[19196]: raise RuntimeError("gevent worker requires gevent 1.4 or higher") May 15 03:08:42 blogsystem-apserver01 gunicorn[19196]: RuntimeError: gevent worker requires gevent 1.4 or higher May 15 03:08:42 blogsystem-apserver01 gunicorn[19196]: ] May 15 03:08:42 blogsystem-apserver01 systemd[1]: gunicorn.service: Main process exited, code=exited, status=1/FAILURE May 15 03:08:42 blogsystem-apserver01 systemd[1]: gunicorn.service: Failed with result 'exit-code'. root@blogsystem-apserver01:/etc/systemd/system#
回答1件
あなたの回答
tips
プレビュー