外部 DB シングル構成の kengine ログ調査
INS-SEK1: kengine ログに「Is the server running on that host and accepting TCP/IP connections? Host is unreachable」というエラーが記録されている
KE2 APP とデータベースサーバー間でネットワーク接続の問題が発生している場合、kengine のログを確認すると、「ログのサンプルエントリ」のようなログが表示される可能性があります。
ログのサンプルエントリ
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/django_dbconn_retry/apps.py", line 51, in ensure_connection_with_retries
self.connect()
File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 270, in connect
self.connection = self.get_new_connection(conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection
connection = self.Database.connect(**conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/psycopg2/__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.OperationalError: connection to server at "10.20.47.20", port 9999 failed: Host is unreachable
Is the server running on that host and accepting TCP/IP connections?
解決策
KE2 APP から外部 DB ホストサーバに ping して答えがない原因でこのような状況発生されます。この場合、以下の調査してください。
- 外部 DB ホストサーバの正常性をご確認ください。
- 外部 DB ホストサーバのネットワークインターフェイスの状態を確認してください。
- 外部 DB ホストサーバの Network 設定を確認してください。
外部 DB ホストサーバやネットワークなどの保守手順については、本マニュアルの範囲外になります。
INS-SEK2: kengine ログに「ERROR: unable to read message kind DETAIL: kind does not match between main(4e) slot[1] (53)」というエラーが記録されている
DB クラスタ(pgpool)利用すると、DB ノード間のネットワーク遅延・DB サーバリソース使用率が高い場合、kengine のログを確認すると、「ログのサンプルエントリ」のようなログが表示される可能性があります。
ログのサンプルエントリ
[2024-09-11 08:57:54:ke-ke2-rhel89-swarm-1:docker-entrypoint.sh] INFO: Starting docker-entrypoint(kompirad) [KOMPIRA_VERSION=2.0.0, LANGUAGE_CODE=ja]
[2024-09-11 08:57:54:ke-ke2-rhel89-swarm-1:docker-entrypoint.sh] INFO: Wait for Cache: redis:6379 -t 15
wait-for-it.sh: waiting 15 seconds for redis:6379
wait-for-it.sh: redis:6379 is available after 0 seconds
[2024-09-11 08:57:54:ke-ke2-rhel89-swarm-1:docker-entrypoint.sh] INFO: Cache is ready
[2024-09-11 08:57:54:ke-ke2-rhel89-swarm-1:docker-entrypoint.sh] INFO: Wait for Database: 10.20.47.20:9999 -t 30
wait-for-it.sh: waiting 30 seconds for 10.20.47.20:9999
wait-for-it.sh: 10.20.47.20:9999 is available after 0 seconds
[2024-09-11 08:57:54:ke-ke2-rhel89-swarm-1:docker-entrypoint.sh] INFO: Database is ready
[2024-09-11 08:57:54:ke-ke2-rhel89-swarm-1:docker-entrypoint.sh] INFO: Wait for flock: /var/opt/kompira/.flock_init_data
[2024-09-11 08:57:54:ke-ke2-rhel89-swarm-1:docker-entrypoint.sh] INFO: flock is acquired
[2024-09-11 08:57:55,634:ke-ke2-rhel89-swarm-1:MainProcess:MainThread] INFO: AXES: BEGIN version 6.0.5, blocking by combination of username and ip_address
Reconnecting to the database didn't help connection to server at "10.20.47.20", port 9999 failed: ERROR: unable to read message kind
DETAIL: kind does not match between main(4e) slot[1] (53)
Traceback (most recent call last):
File "/usr/local/lib/python3.11/site-packages/django_dbconn_retry/apps.py", line 51, in ensure_connection_with_retries
self.connect()
File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/db/backends/base/base.py", line 270, in connect
self.connection = self.get_new_connection(conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/utils/asyncio.py", line 26, in inner
return func(*args, **kwargs)
^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/django/db/backends/postgresql/base.py", line 275, in get_new_connection
connection = self.Database.connect(**conn_params)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/site-packages/psycopg2/__init__.py", line 122, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
psycopg2.OperationalError: connection to server at "10.20.47.20", port 9999 failed: ERROR: unable to read message kind
DETAIL: kind does not match between main(4e) slot[1] (53)
解決策
-
pgpoolノード間の通信問題
ネットワークの問題により、pgpoolノード間で適切な調整ができず、ノード間でデータは同期が取れない場合があります。
-
pgpoolノードのリソース使用率が高い
pgpool VMでCPU、メモリ、I/Oの使用率が高い場合、データベース操作が遅くなり、DB ノード間でデータは同期が取れない場合があります。
外部 DB ホストサーバやネットワークなどの保守手順については、本マニュアルの範囲外になります。
INS-SEK3: kengine ログに「database error: cannot execute UPDATE in a read-only transaction」というエラーが記録されている
データベースに不整合場合、kengine のログを確認すると、「ログのサンプルエントリ」のようなログが表示される可能性があります。
ログのサンプルエントリ
[2024-09-25 10:48:17,034:ke-ke2-rhel89-swarm-1:kompirad:MainThread] ERROR: Failed to start due to database error: cannot execute UPDATE in a read-only transaction
解決策
-
以下のコマンドで外部 DB 操作をご確認ください。
# ベーシックコマンド: psql -h <DB IP> -p <DB PORT> -U <USER> -d <DATABASE> # pgpool場合、DB IP は Virtual IP です。DB PORT は defaultでは 9999 です。 # postgres場合、DB IP は DB サーバ IP です。DB PORT は defaultでは 5432 です。 # USER は postgres です。 # DATABASE は kompira です。 # 例: $ psql -h 10.20.47.20 -p 9999 -U postgres -d kompira -c "CREATE TEMP TABLE pg_temp.test_table (value TEXT); INSERT INTO pg_temp.test_table (value) VALUES ('Dummy Test Value'); SELECT * FROM pg_temp.test_table;" Password for user postgres: ***** value ------------------ Dummy Test Value (1 row)
上のコマンドで問題があれば、外部 DB 管理者に連絡してください。
psql コマンドが利用できない場合は、CentOS/RHEL: postgresql、Debian/Ubuntu: postgresql-client をインストールしてください。
-
外部 DB 操作に問題がなければ、KE2 APP 側での DB 接続セッションの問題の可能性があります。この場合、kengine サービスを再起動してください。
# kengine コンテナ ID: $ docker ps -f name=kengine を実行してコンテナ ID を取得できます $ docker restart <kengine コンテナ ID>
-
解決できない場合、docker サービスを再起動してください。
$ systemctl restart docker.service
INS-SEK4: kengine ログに「Is the server running on that host and accepting TCP/IP connections? Connection refused」というエラーが記録されている
データベースが停止されてしまった場合、kengine のログを確認すると、「ログのサンプルエントリ」のようなログが表示される可能性があります。
ログのサンプルエントリ
Reconnecting to the database didn't help connection to server at "10.20.47.20", port 9999 failed: Connection refused
Is the server running on that host and accepting TCP/IP connections?
解決策
- 外部データベースへのアクセスを確認してみてください。