質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Gunicorn

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Amazon EKS

Amazon EKSは、コンテナ群を管理するマネージドサービスです。Kubernetesコントロールプレーンを独自で立ち上げ・維持せずにAWSで容易に実行できます。自動デプロイやスケーリング、アプリ・コンテナの管理を自動化するオープンソースのプラットフォームです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3000閲覧

EKSにデプロイしたブログシステムのgunicornサーバが「WORKER TIMEOUT」となる

nakkan179

総合スコア0

Gunicorn

Gunicorn (Green Unicorn)は、Rubyのunicornをベースに開発されたUNIX向けのPython製HTTPサーバです。他のライブラリとの依存関係がないため、容易にインストールして使用できます。

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Amazon EKS

Amazon EKSは、コンテナ群を管理するマネージドサービスです。Kubernetesコントロールプレーンを独自で立ち上げ・維持せずにAWSで容易に実行できます。自動デプロイやスケーリング、アプリ・コンテナの管理を自動化するオープンソースのプラットフォームです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/15 03:35

【背景】
これまで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#

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inductor

2021/05/15 10:04

EKSにデプロイしたとありますが、YAMLファイルやkubectlでのデバッグが行われていないように見えます。systemdやpipなどはどこで行っているのでしょうか?
nakkan179

2021/05/15 13:17

ご確認いただきありがとうございます。申し訳ございません。自己解決いたしました。
guest

回答1

0

自己解決

自己解決いたしました。お騒がせして申し訳ございません。

原因は、元々既存環境(AWS)で使用していたRDSのVPCと、新規に構築したAWS EKSクラスタのVPCが異なっておりました。そのため、APサーバがRDSに接続することができずに、gunicornがタイムアウトしておりました。ESKとRDSを同じVPCに設置したところ、ブラウザからのアクセスが可能となり、問題が解消されました。

投稿2021/05/15 13:18

nakkan179

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問