OS規定のversion:10を使用。
2台構成
host:sv1 ip:192.168.0.100 略称:プライマリ
host:sv2 ip:192.168.0.101 略称:セカンダリ
プライマリとセカンダリの共通設定
インストールする。
# dnf install postgresql-server postgresql-devel postgresql-contrib
ファイアウォールに例外を追加する。
# firewall-cmd --add-service=postgresql --permanent # firewall-cmd --reload
データベースを初期化してデータベースクラスタを作成する。
# postgresql-setup initdb
サービスを有効化する。
# systemctl enable postgresql
プライマリの設定
サービスを起動する。
# systemctl start postgresql
レプリケーション用ユーザーを作成する。
# su postgres $ psql =# CREATE USER replication_user REPLICATION PASSWORD 'password'; =# \q
外部からの通信を許可。最下部に下記を追記する。
host replication replication_user 192.168.0.0/24 md5
postgresql.confを編集して下記8行を変更する。
※synchronous_commitはシステム要件によって変更した方が良い
listen_addresses = '*' wal_level = hot_standby fsync = on synchronous_commit = off wal_sync_method = fsync max_wal_senders = 2 ※プライマリを含んだレプリケーションサーバーの数を入れる wal_keep_segments = 32 ※8~32が目安らしい synchronous_standby_names = '*'
ついでに下記設定値がシステム要件に合っているか確認する。
max_connections = 300 ※同時接続数 shared_buffers = 1024MB ※物理メモリの1/4程度 work_mem = 8MB ※物理メモリの1/500程度だが最大8MB effective_cache_size = 2048MB ※物理メモリの1/2程度
サービスを再起動する。
# systemctl restart postgresql
セカンダリの設定
postgresqlサービスが停止した状態でdataを空にする。
# rm -r -f /var/lib/pgsql/data/*
先程作成したレプリケーション用ユーザーを使用してプライマリからデータをコピーする。
※-Rオプションはrecovery.confを自動作成する指定
※-Pオプションは進捗を表示する指定
# su postgres $ pg_basebackup -R -h 192.168.0.100 -p 5432 -U replication_user -D /var/lib/pgsql/data/ -P
/var/lib/pgsql/data/内のすべてのファイルの所有者/所有グループがpostgresになっているか確認する。
ll /var/lib/pgsql/data/
/var/lib/pgsql/data/postgresql.confを編集して設定を変更する。
hot_standby = on
postgresqlサービスを起動する。
# systemctl start postgresql
プライマリサーバーで下記SQLを実行するとレプリケーションされているか確認できる。
SELECT * FROM pg_stat_replication;
フェイルオーバーする際はセカンダリで下記コマンドを実行する。
# su postgres $ pg_ctl promote -D /var/lib/pgsql/data/