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.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_redisreplicated 1/1 であるべきです。不安定な場合は上のコマンドを数回実行すると 0/1, 1/1, 0/1 と変化します。詳細は以下で確認できます。

$ docker service ps ke2_redis

CURRENT STATE が短期間で Shutdown を繰り返している場合、redis が不安定です。以下の手順で対処してください。

  1. swarm ノードのステータスを確認してください(swarm ノードのステータスの正常性確認)。異常があれば解決してください。

  2. swarm ノードが正常な場合、redis サービスを再起動してください。

    $ docker service update --force ke2_redis
    

解決しない場合

KE2 APP を再起動するを試してください。それでも回復しない場合は問い合わせ前に情報を収集のうえ、サポートへお問い合わせください。

rabbitmq 名前解決エラー(nc: bad address 'rabbitmq')

対象構成: オンプレシングル構成。Swarmクラスタ構成の rabbitmq 障害は rabbitmq の原因と対処 を参照してください。

観測される症状・影響

rabbitmq に接続できないため、コンテナ間の連携(ブラウザ操作からのジョブフロー実行指示、kengine と jobmngrd の連携など)ができなくなります。

主なエラーメッセージ

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 を再起動するを試してください。それでも回復しない場合は問い合わせ前に情報を収集のうえ、サポートへお問い合わせください。