3.6. Automation Controller の PostgreSQL データベースの設定およびメンテナンス
Automation Controller のパフォーマンスを向上させるために、データベースで次の設定パラメーターを設定できます。
メンテナンス
VACUUM と ANALYZE の 作業は、パフォーマンスに影響を与える可能性のある重要なメンテナンス作業です。通常の PostgreSQL の動作では、更新によって削除または不要になったタプルは、テーブルから物理的に削除されません。VACUUM が 実行されるまでは、テーブル内に残ります。したがって、頻繁に更新されるテーブルでは特に、定期的に VACUUM を実行する必要があります。ANALYZE は、データベース内のテーブルの内容に関する統計情報を収集し、その結果を pg_statistic システムカタログに保存します。その後、クエリープランナーはこれらの統計情報を使用して、クエリーの最も効率的な実行計画を決定します。PostgreSQL の autovacuuming 設定パラメーターは、VACUUM コマンド と ANALYZE コマンドの実行を自動化します。自動掃除機機能を 有効 に設定するのは良い方法です。ただし、データベースにアイドル時間がまったくない場合、自動バキュームは実行されません。自動バキュームによってデータベースディスクの領域が十分にクリーンアップされていないことが確認された場合、特定のメンテナンス期間中に特定のバキュームタスクをスケジューリングすることで解決する場合があります。
設定パラメーター
PostgreSQL サーバーのパフォーマンスを向上させるには、データベースメモリーを管理する以下の Grand Unified Configuration (GUC) パラメーターを設定してください。これらのパラメーターは、データベースサーバーの設定を管理する postgresql.conf ファイル内の $PDATA ディレクトリーにあります。
-
shared_buffers: サーバーがデータキャッシュのために割り当てるメモリー量を決定します。このパラメーターのデフォルト値は 128 MB です。この値を変更する場合は、マシンの合計 RAM の 15% - 25% に設定する必要があります。
OpenSSL 3.2 に対して Postgres をコンパイルすると、システムでリグレッションが発生し、起動時にユーザーのパラメーターが削除されます。これを修正するには、open_get_data の代わりに BIO_get_app_data 呼び出しを使用します。このような変更は管理者のみが行うことができますが、PostgreSQL データベースに接続しているすべてのユーザーに影響します。OpenSSL パッチを適用せずにシステムを更新する場合は影響しないため、対処する必要はありません。
shared_buffers の値を変更した後は、データベースサーバーを再起動する必要があります。
OpenSSL 3.2 に対して Postgres をコンパイルすると、システムでリグレッションが発生し、起動時にユーザーのパラメーターが削除されます。これを修正するには、open_get_data の代わりに BIO_get_app_data 呼び出しを使用します。この変更を行えるのは管理者だけです。ただし、この変更は、PostgreSQL データベースに接続しているすべてのユーザーに影響します。
OpenSSL パッチを適用せずにシステムを更新した場合、影響を受けないため、対策を講じる必要はありません。
work_mem: ディスクスワッピング前に内部ソート操作とハッシュテーブルで使用されるメモリー量を指定します。ソート操作は、order by、distinct、および merge join 操作に使用されます。ハッシュテーブルは、hash joins と hash-based アグリゲーションで使用されます。このパラメーターのデフォルト値は 4 MB です。work_memパラメーターに適切な値を設定することで、ディスクのスワッピングが減り、検索速度が向上します。-
データベースサーバーの
work_memパラメーターの最適値を計算するには、次の式を使用します。
-
データベースサーバーの
Total RAM * 0.25 / max_connections
work_mem の 値を大きく設定すると、データベースへの接続が多すぎる場合に PostgreSQL サーバーがメモリー不足 (OOM) になる可能性があります。
-
max_connections: データベースサーバーへの同時接続の最大数を指定します。 -
maintenance_work_mem: VACUUM、CREATE INDEX、ALTER TABLE ADD FOIRENT KEY 操作などのメンテナンス操作で使用される最大メモリー量を指定します。このパラメーターのデフォルト値は 64 MB です。このパラメーターの値を計算するには、次の式を使用します。
Total RAM * 0.05
掃除機がけのパフォーマンスを向上させるには、maintenance_work_mem をwork_mem よりも高い値に設定してください。
関連情報
3.6.1. Automation Controller 設定ファイル内のプレーンテキストパスワードの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller 設定ファイルに保存されるパスワードは、プレーンテキストで保存されます。/etc/tower/conf.d/ ディレクトリーへのアクセス権を持つユーザーは、データベースへのアクセスに使用されるパスワードを表示できます。ディレクトリーへのアクセスは権限によって制御されるため、ディレクトリーは保護されていますが、セキュリティーに関する調査結果によっては、この保護は不十分であると考えられています。解決策は、パスワードを個別に暗号化することです。
3.6.1.1. PostgreSQL パスワードハッシュの作成 リンクのコピーリンクがクリップボードにコピーされました!
Automation Controller 設定ファイル内のプレーンテキストパスワードを置き換えるハッシュ値を指定します。
手順
Automation Controller ノードで、次のコマンドを実行します。
# awx-manage shell_plus続いて、python プロンプトから以下を実行します。
>>> from awx.main.utils import encrypt_value, get_encryption_key \ >>> postgres_secret = encrypt_value('$POSTGRES_PASS') \ >>> print(postgres_secret)注記$POSTGRES_PASS変数を、暗号化したい実際の平文パスワードに置き換えてください。出力は以下のようになります。
$encrypted$UTF8$AESCBC$Z0FBQUFBQmtLdGNRWXFjZGtkV1ZBR3hkNGVVbFFIU3hhY21UT081eXFkR09aUWZLcG9TSmpndmZYQXFyRHVFQ3ZYSE15OUFuM1RHZHBqTFU3S0MyNEo2Y2JWUURSYktsdmc9PQ==これらのハッシュの完全な値をコピーして保存します。
ハッシュ値は
$encrypted$で始まり、次の例に示すように単なる文字列ではありません。$encrypted$AESCBC$Z0FBQUFBQmNONU9BbGQ1VjJyNDJRVTRKaFRIR09Ib2U5TGdaYVRfcXFXRjlmdmpZNjdoZVpEZ21QRWViMmNDOGJaM0dPeHN2b194NUxvQ1M5X3dSc1gxQ29TdDBKRkljWHc9PQ==なお、
$*_PASS の値はインベントリーファイル内にすでにプレーンテキストで含まれています。
3.6.1.2. Postgres パスワードの暗号化 リンクのコピーリンクがクリップボードにコピーされました!
次の手順では、プレーンテキストのパスワードを暗号化された値に置き換えます。クラスター内の各ノードで次の手順を実行します。
手順
/etc/tower/conf.d/postgres.pyを編集するには、以下を使用します。$ vim /etc/tower/conf.d/postgres.pyファイルの先頭に次の行を追加します。
from awx.main.utils import decrypt_value, get_encryption_keyPASSWORD の後にリストされているパスワード値を削除し、次の行に置き換えてください。
$encrypted..の値は、ご自身のハッシュ値に置き換えてください。decrypt_value(get_encryption_key('value'),'$encrypted$AESCBC$Z0FBQUFBQmNONU9BbGQ1VjJyNDJRVTRKaFRIR09Ib2U5TGdaYVRfcXFXRjlmdmpZNjdoZVpEZ21QRWViMmNDOGJaM0dPeHN2b194NUxvQ1M5X3dSc1gxQ29TdDBKRkljWHc9PQ=='),注記このステップでのハッシュ値は、
postgres_secretの出力値です。postgres.py の完全な内容は以下のようになります。# Ansible Automation platform controller database settings. from awx.main.utils import decrypt_value, get_encryption_key DATABASES = { 'default': { 'ATOMIC_REQUESTS': True, 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'awx', 'USER': 'awx', 'PASSWORD': decrypt_value(get_encryption_key('value'),'$encrypted$AESCBC$Z0FBQUFBQmNONU9BbGQ1VjJyNDJRVTRKaFRIR09Ib2U5TGdaYVRfcXFXRjlmdmpZNjdoZVpEZ21QRWViMmNDOGJaM0dPeHN2b194NUxvQ1M5X3dSc1gxQ29TdDBKRkljWHc9PQ=='), 'HOST': '127.0.0.1', 'PORT': 5432, } }