3.6. Automation Controller の PostgreSQL データベースの設定およびメンテナンス
Automation Controller のパフォーマンスを向上させるために、データベースで次の設定パラメーターを設定できます。
メンテナンス
VACUUM
タスクと ANALYZE
タスクは、パフォーマンスに影響を与える可能性がある重要なメンテナンス作業です。通常の PostgreSQL 操作では、更新によって削除または不要になったタプルはテーブルから物理的に削除されません。これらは、VACUUM
が完了するまで残ります。したがって、頻繁に更新されるテーブルでは特に、定期的に VACUUM を実行する必要があります。ANALYZE
は、データベース内のテーブルの内容に関する統計情報を収集し、結果を pg_statistic
システムカタログに保存します。その後、クエリープランナーはこれらの統計情報を使用して、クエリーの最も効率的な実行計画を決定します。自動バキュームに関する PostgreSQL 設定パラメーターは、VACUUM
コマンドおよび ANALYZE
コマンドの実行を自動化します。自動バキュームは true に設定することを推奨します。ただし、データベースにアイドル時間がまったくない場合、自動バキュームは実行されません。自動バキュームによってデータベースディスクの領域が十分にクリーンアップされていないことが確認された場合、特定のメンテナンス期間中に特定のバキュームタスクをスケジューリングすることで解決する場合があります。
設定パラメーター
PostgreSQL サーバーのパフォーマンスを向上させるには、データベースメモリーを管理する次の Grand Unified Configuration (GUC) パラメーターを設定します。これらのパラメーターは、データベースサーバーの設定を管理する postgresql.conf
ファイルの $PDATA
ディレクトリー内にあります。
-
shared_buffers
: データをキャッシュするためにサーバーに割り当てるメモリーの量を決定します。このパラメーターのデフォルト値は 128 MB です。この値を変更する場合は、マシンの合計 RAM の 15% - 25% に設定する必要があります。
shared_buffers の値を変更した後は、データベースサーバーを再起動する必要があります。
work_mem
: ディスクスワッピングの前に内部ソート操作とハッシュテーブルで使用されるメモリーの量を指定します。ソート操作は、order by、distinct、および merge join 操作に使用されます。ハッシュテーブルは、hash joins と hash-based アグリゲーションで使用されます。このパラメーターのデフォルト値は 4 MB です。work_mem
パラメーターに正しい値を設定すると、ディスクスワッピングが減少し、検索速度が向上します。-
次の式を使用して、データベースサーバーの
work_mem
パラメーターの最適な値を計算します。
-
次の式を使用して、データベースサーバーの
Total RAM * 0.25 / max_connections
Total RAM * 0.25 / max_connections
work_mem
に大きな値を設定すると、データベースに対して開いている接続が多すぎる場合に、PostgreSQL サーバーがメモリー不足 (OOM) になる可能性があります。
-
max_connections
: データベースサーバーへの同時接続の最大数を指定します。 -
maintenance_work_mem
: vacuum、create index、および alter table add foreign key 操作などのメンテナンス操作で使用するメモリーの最大量を指定します。このパラメーターのデフォルト値は 64 MB です。このパラメーターの値を計算するには、次の式を使用します。
Total RAM * 0.05
Total RAM * 0.05
バキューム処理のパフォーマンスを向上させるには、maintenance_work_mem
を work_mem
よりも高く設定します。
関連情報
自動バキューム設定に関する詳細は、Automatic Vacuuming を参照してください。
3.6.1. Automation Controller 設定ファイル内のプレーンテキストパスワードの暗号化
Automation Controller 設定ファイルに保存されるパスワードは、プレーンテキストで保存されます。/etc/tower/conf.d/
ディレクトリーへのアクセス権を持つユーザーは、データベースへのアクセスに使用されるパスワードを表示できます。ディレクトリーへのアクセスは権限によって制御されるため、ディレクトリーは保護されていますが、セキュリティーに関する調査結果によっては、この保護は不十分であると考えられています。解決策は、パスワードを個別に暗号化することです。
3.6.1.1. PostgreSQL パスワードハッシュの作成
手順
Automation Controller ノードで、次のコマンドを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow awx-manage shell_plus
# awx-manage shell_plus
続いて、python プロンプトから以下を実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow >>> from awx.main.utils import encrypt_value, get_encryption_key \ >>> postgres_secret = encrypt_value('$POSTGRES_PASS') \ >>> print(postgres_secret)
>>> from awx.main.utils import encrypt_value, get_encryption_key \ >>> postgres_secret = encrypt_value('$POSTGRES_PASS') \ >>> print(postgres_secret)
注記$POSTGRES_PASS
変数を、暗号化する実際のプレーンテキストのパスワードに置き換えます。出力は以下のようになります。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow $encrypted$UTF8$AESCBC$Z0FBQUFBQmtLdGNRWXFjZGtkV1ZBR3hkNGVVbFFIU3hhY21UT081eXFkR09aUWZLcG9TSmpndmZYQXFyRHVFQ3ZYSE15OUFuM1RHZHBqTFU3S0MyNEo2Y2JWUURSYktsdmc9PQ==
$encrypted$UTF8$AESCBC$Z0FBQUFBQmtLdGNRWXFjZGtkV1ZBR3hkNGVVbFFIU3hhY21UT081eXFkR09aUWZLcG9TSmpndmZYQXFyRHVFQ3ZYSE15OUFuM1RHZHBqTFU3S0MyNEo2Y2JWUURSYktsdmc9PQ==
これらのハッシュの完全な値をコピーして保存します。
次の例に示すように、ハッシュ値は
$encrypted$
で始まり、単なる文字列ではありません。Copy to Clipboard Copied! Toggle word wrap Toggle overflow $encrypted$AESCBC$Z0FBQUFBQmNONU9BbGQ1VjJyNDJRVTRKaFRIR09Ib2U5TGdaYVRfcXFXRjlmdmpZNjdoZVpEZ21QRWViMmNDOGJaM0dPeHN2b194NUxvQ1M5X3dSc1gxQ29TdDBKRkljWHc9PQ==
$encrypted$AESCBC$Z0FBQUFBQmNONU9BbGQ1VjJyNDJRVTRKaFRIR09Ib2U5TGdaYVRfcXFXRjlmdmpZNjdoZVpEZ21QRWViMmNDOGJaM0dPeHN2b194NUxvQ1M5X3dSc1gxQ29TdDBKRkljWHc9PQ==
$*_PASS
値は、インベントリーファイル内ですでにプレーンテキストになっていることに注意してください。
これらの手順では、Automation Controller 設定ファイル内のプレーンテキストパスワードを置き換えるハッシュ値を提供します。
3.6.1.2. Postgres パスワードの暗号化
次の手順では、プレーンテキストのパスワードを暗号化された値に置き換えます。クラスター内の各ノードで次の手順を実行します。
手順
以下を使用して
/etc/tower/conf.d/postgres.py
を編集します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow vim /etc/tower/conf.d/postgres.py
$ vim /etc/tower/conf.d/postgres.py
ファイルの先頭に次の行を追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow from awx.main.utils import decrypt_value, get_encryption_key
from awx.main.utils import decrypt_value, get_encryption_key
'PASSWORD': の後にリストされているパスワード値を削除し、次の行に置き換えて、指定された
$encrytpted..
の値を独自のハッシュ値に置き換えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow decrypt_value(get_encryption_key('value'),'$encrypted$AESCBC$Z0FBQUFBQmNONU9BbGQ1VjJyNDJRVTRKaFRIR09Ib2U5TGdaYVRfcXFXRjlmdmpZNjdoZVpEZ21QRWViMmNDOGJaM0dPeHN2b194NUxvQ1M5X3dSc1gxQ29TdDBKRkljWHc9PQ=='),
decrypt_value(get_encryption_key('value'),'$encrypted$AESCBC$Z0FBQUFBQmNONU9BbGQ1VjJyNDJRVTRKaFRIR09Ib2U5TGdaYVRfcXFXRjlmdmpZNjdoZVpEZ21QRWViMmNDOGJaM0dPeHN2b194NUxvQ1M5X3dSc1gxQ29TdDBKRkljWHc9PQ=='),
注記このステップのハッシュ値は、
postgres_secret
の出力値です。完全な
postgres.py
は次のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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, } }
# 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, } }