kengine(ジョブフロー実行エンジン)の原因と対処
kengine コンテナのログに記録されるエラーから、原因と対処を調べます。
kengine が依存先(redis / rabbitmq)に接続できないときのエラーをここで扱います。データベース(postgres / 外部 DB / pgpool)への接続エラーは データベースの原因と対処 を参照してください。
redis 名前解決エラー(Error -2 connecting to redis:6379)
観測される症状・影響
redis に接続できないため、システム全体が応答しなくなります(ブラウザ操作の応答なし/内部処理エラー、ジョブフローの停止)。system-status
画面では redis が ERROR となり、kompira / kengine / jobmngrd が
Dependent services (redis) are not running となります。
- 影響範囲: redis の役割と影響範囲
- 症状から探す: コンテナが停止している(redis)
主なエラーメッセージ
redis.exceptions.ConnectionError: Error -2 connecting to redis:6379. Name does not resolve.
ログのサンプルエントリ
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/kompira/core/cache.py", line 55, in get_object
cache.touch(key)
File "/usr/local/lib/python3.11/site-packages/django/core/cache/backends/redis.py", line 195, in touch
return self._cache.touch(key, self.get_backend_timeout(timeout))
File "/usr/local/lib/python3.11/site-packages/django/core/cache/backends/redis.py", line 115, in touch
return bool(client.expire(key, timeout))
File "/usr/local/lib/python3.11/site-packages/redis/commands/core.py", line 1762, in expire
return self.execute_command("EXPIRE", name, time, *exp_option)
File "/usr/local/lib/python3.11/site-packages/redis/client.py", line 1266, in execute_command
conn = self.connection or pool.get_connection(command_name, **options)
File "/usr/local/lib/python3.11/site-packages/redis/connection.py", line 1461, in get_connection
connection.connect()
File "/usr/local/lib/python3.11/site-packages/redis/connection.py", line 713, in connect
raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error -2 connecting to redis:6379. Name does not resolve.
原因
redis が停止している、または他コンテナから redis にアクセスできない状態になっています。Swarm クラスタ構成では、redis を実行中のノードに以下のような問題が生じると、redis が別のノードに切り替わる(フェイルオーバーする)過程でこのエラーが発生することがあります。
- 実行中ノードのダウン・再起動
- 実行中ノードのリソース使用率が高い
- swarm ノード間のネットワーク導通の問題
- 実行中ノードの docker 停止・再起動
構成別の対処
オンプレシングル構成
以下のコマンドで redis コンテナのステータスを確認してください。
$ docker ps -a -f name=redis
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c53e47ff9826 registry.hub.docker.com/library/redis:7.2-alpine "docker-entrypoint.s…" 16 minutes ago Exited (1) 12 seconds ago ke2-redis-1
ステータスが Up の場合はコンテナとしては起動しているため、コンテナ停止以外の問題が起きていると考えられます。ホストサーバや docker サービス、ネットワークなどの状態を確認してみてください。
ステータスが Up 以外の場合は、停止しているコンテナの最新の ID を指定して再起動してください。
$ docker restart <REDIS_CONTAINER_ID>
Swarmクラスタ構成
クラスタ構成では redis は 1 ノードでのみ実行されるサービスで、ノード障害時には自動的に別ノードへ切り替わります。redis サービスが不安定かどうかを確認してください。
$ docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
...
l76bm4t1wf6n ke2_redis replicated 1/1 registry.hub.docker.com/library/redis:7.2-alpine
ke2_redis は replicated 1/1 であるべきです。不安定な場合は上のコマンドを数回実行すると 0/1, 1/1, 0/1
と変化します。詳細は以下で確認できます。
$ docker service ps ke2_redis
CURRENT STATE が短期間で Shutdown を繰り返している場合、redis が不安定です。以下の手順で対処してください。
-
swarm ノードのステータスを確認してください(swarm ノードのステータスの正常性確認)。異常があれば解決してください。
-
swarm ノードが正常な場合、redis サービスを再起動してください。
$ docker service update --force ke2_redis
解決しない場合
KE2 APP を再起動するを試してください。それでも回復しない場合は問い合わせ前に情報を収集のうえ、サポートへお問い合わせください。
rabbitmq 名前解決エラー(nc: bad address 'rabbitmq')
対象構成: オンプレシングル構成。Swarmクラスタ構成の rabbitmq 障害は rabbitmq の原因と対処 を参照してください。
観測される症状・影響
rabbitmq に接続できないため、コンテナ間の連携(ブラウザ操作からのジョブフロー実行指示、kengine と jobmngrd の連携など)ができなくなります。
- 影響範囲: rabbitmq の役割と影響範囲
- 症状から探す: コンテナが停止している(rabbitmq)
主なエラーメッセージ
nc: bad address 'rabbitmq'
ログのサンプルエントリ
nc: bad address 'rabbitmq'
nc: bad address 'rabbitmq'
nc: bad address 'rabbitmq'
nc: bad address 'rabbitmq'
nc: bad address 'rabbitmq'
原因
rabbitmq が停止している可能性があります。
解決策
以下のコマンドで rabbitmq コンテナのステータスを確認してください。
$ docker ps -a -f name=rabbitmq
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9af8671ec4b8 registry.hub.docker.com/library/rabbitmq:3.13-alpine "docker-entrypoint.s…" 16 minutes ago Exited (1) 12 seconds ago ke2-rabbitmq-1
ステータスが Up の場合はコンテナとしては起動しているため、コンテナ停止以外の問題が起きていると考えられます。ホストサーバや docker サービス、ネットワークなどの状態を確認してみてください。
ステータスが Up 以外の場合は、停止しているコンテナの最新の ID を指定して再起動してください。
$ docker restart <RABBITMQ_CONTAINER_ID>
再起動しても正常に戻らない場合は、rabbitmq コンテナ内部で動作している rabbitmq アプリをリセットしてみてください。
$ docker exec $(docker ps -q -f name=rabbitmq) rabbitmqctl stop_app
$ docker exec $(docker ps -q -f name=rabbitmq) rabbitmqctl reset
$ docker exec $(docker ps -q -f name=rabbitmq) rabbitmqctl start_app
解決しない場合
KE2 APP を再起動するを試してください。それでも回復しない場合は問い合わせ前に情報を収集のうえ、サポートへお問い合わせください。