【Zabbix】Zabbixサーバの構築_02_PostgreSQLの設定

PostgreSQL

はじめに

前回の続きで、PostgreSQLの設定を入れていきます。

構成図

ホスト名:zabbix-ap01
IP:172.16.1.101
構成:AlmaLinux 9、Zabbix6.0

ホスト名:zabbix-ap02
IP:172.16.1.102
構成:AlmaLinux 9、Zabbix6.0

ホスト名:zabbix-db01
IP:172.16.1.104
構成:AlmaLinux 9、PostgreSQL 13

ホスト名:zabbix-db02
IP:172.16.1.105
構成:AlmaLinux 9、PostgreSQL 13

PostgreSQL設定

実施するサーバ:zabbix-db01、zabbix-db02

まず、環境変数PGDATAの値を確認します。PGDATAはおおよそ以下の実行結果と同じになっていると思いますが、違うと後々の作業に影響があるので、念のため確認しておきましょう。

# su - postgres
$ env |grep PGDATA
PGDATA=/var/lib/pgsql/13/data

データベースの初期化を行います。

$ exit
# export PGSETUP_INITDB_OPTIONS="--encoding=UTF8 --no-locale"
# echo $PGSETUP_INITDB_OPTIONS
=--encoding=UTF8 --no-locale
# /usr/pgsql-13/bin/postgresql-13-setup initdb
Initializing database ... OK

レプリケーション用のユーザを作成します。パスワード設定はしますが、操作者がレプリケーションユーザでDB接続することはないです。

# systemctl start postgresql-13.service
# sudo -u postgres createuser -P repuser --replication
could not change directory to "/root": 許可がありません
Enter password for new role:
Enter it again:
# su - postgres
$ psql
postgres=# ALTER ROLE postgres with PASSWORD 'zabbixpw';
ALTER ROLE
postgres=# \q
$ exit

# systemctl stop postgresql-13.service

次にPacemaker用の設定を行います。ただ、今回の設定はDBへの接続制限をガチガチにしないので、正直なくても良いです。PacemakerでのDB起動時にtemplate1への接続が行われるため、接続制限がある場合は以下の設定がないと起動に失敗するので、お守りみたいなものです。

# su - postgres
$ echo $HOME
/var/lib/pgsql
# echo "localhost:5432:template1:postgres:zabbixpw" > /var/lib/pgsql/.pgpass
# chown postgres: /var/lib/pgsql/.pgpass
# chmod 600 /var/lib/pgsql/.pgpass
# chown -R postgres: /var/lib/pgsql/

いよいよpostgresql.confを設定します。念のためコピーを作成しておきましょう。なお、キャッシュやメモリ容量は構築されるサーバの容量に応じて変える必要があります。その他、要件に応じて設定は変える必要はありますが、本構築では以下の設定を入れて構築します。

$ cat <<_EOF_>> /var/lib/pgsql/13/data/postgresql.conf
archive_command = 'cp %p /var/lib/pgsql/13/pg_archive/%f'
archive_mode = on
checkpoint_completion_target = 0.6
checkpoint_timeout = 60min
deadlock_timeout = 5s
effective_cache_size = 6GB
hot_standby_feedback = on
listen_addresses = '*'
log_destination ='syslog'
log_directory = '/var/log/postgres'
log_filename = 'postgresql_%Y%m%d.log'
log_line_prefix'%t:%u:%p:%h:%c:'
log_min_duration_statement = 30s
log_truncate_on_rotation = off
maintenance_work_mem = 1GB
max_prepared_transactions = 100
max_standby_archive_delay = -1
max_standby_streaming_delay = 900s
max_wal_senders=5
random_page_cost = 2.5
restart_after_crash = off
search_path = '"", public'
shared_buffers = 6GB
synchronous_commit = on
temp_buffers = 32MB
wal_buffers = 32MB
wal_keep_size = 32
wal_receiver_status_interval = 2
work_mem = 32MB
_EOF_

pg_hba.confを編集します。今回は検証用なので、同セグからの接続を許可しておきます。下は一例です。
昨今、MZにあるDBであっても内部関係者からの接続を厳しくする場合はこんな設定ではダメです。構築の要件は事前に確認しましょう。(監視サーバのDBなので、やはりガチガチにすることは少ない?かも)

…
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             172.16.1.0/24           trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     trust
host    replication     all             172.16.1.0/24           trust

アーカイブデータの格納ディレクトリを作成しておきます。これは先ほどのpostgresql.conf内の「archive_command」に対応するディレクトリです。

$ mkdir /var/lib/pgsql/13/pg_archive
$ chown postgres: /var/lib/pgsql/13/pg_archive
$ chmod 750 /var/lib/pgsql/13/pg_archive

最後にpg_ctl実行用のPATH設定を行います。/usr/pgsql-13/binをPATHに追加します。

# cat <<_EOF_>> /etc/profile
#add PATH pg_ctl
PATH=$PATH:/usr/pgsql-13/bin
_EOF_

DBの準備ができたので、Zabbix用のDBを作成します。

以下のコマンドでzabbixユーザとzabbix用のDBを作成し、zcatでSQLを実行してDB用のデータを作ります。
※/usr/share/zabbix-sql-scripts/postgresql/server.sql.gz はap側にあるデータなので、どうにかしてデータをDB側に持って来ておきます。面倒な場合はZabbixをインストールしてしまう手も一つです。

# su - postgres 
$ createuser --pwprompt zabbix
$ createdb -O zabbix zabbix
$ exit
# zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix

以上です。既にお気づき方がいるかと思いますが、主な設定はdb01のみの実施で問題なく、あとでdb02にベースバックアップさせれば良かったりします。※厳密に分けると漏れがありそうだったので、今回は分けずに実行するポイントを書きました。

次はPacemakerの設定を行い、PostgreSQLを冗長化させます。