はじめに
前回の続きで、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はおおよそ以下の実行結果と同じになっていると思いますが、違うと後々の作業に影響があるので、念のため確認しておきましょう。
1 2 3 |
# su - postgres $ env |grep PGDATA PGDATA=/var/lib/pgsql/13/data |
データベースの初期化を行います。
1 2 3 4 5 6 |
$ 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接続することはないです。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 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への接続が行われるため、接続制限がある場合は以下の設定がないと起動に失敗するので、お守りみたいなものです。
1 2 3 4 5 6 7 |
# 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を設定します。念のためコピーを作成しておきましょう。なお、キャッシュやメモリ容量は構築されるサーバの容量に応じて変える必要があります。その他、要件に応じて設定は変える必要はありますが、本構築では以下の設定を入れて構築します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
$ 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なので、やはりガチガチにすることは少ない?かも)
1 2 3 4 5 6 7 8 9 |
… # "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」に対応するディレクトリです。
1 2 3 |
$ 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に追加します。
1 2 3 4 |
# 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をインストールしてしまう手も一つです。
1 2 3 4 5 |
# 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を冗長化させます。