はじめに
前回はPostgreSQLのそれぞれのレプリケーションの方式についか解説してみましたが、今回は実際にストリーミングレプリケーションの設定を行っていきたいと思います。
マスターサーバー側の設定
レプリケーション用アカウントの作成
マスター側でレプリケーションで使うアカウントを作成します。
[postgres@db-server ~]$ psql
psql (16.8)
Type "help" for help.
postgres=# CREATE ROLE repuser_test WITH REPLICATION LOGIN PASSWORD '********';
レプリケーションサーバーのIPを許可
$PGSQL_HOME/data/pg_hba.conf でIPを許可します
# vi $PGSQL_HOME/data/pg_hba.conf
# for replication
host replication repuser_test 192.168.10.202/32 md5
マスター側の設定は以上で完了です。
レプリケーションサーバー側の設定
レプリケーションの準備
マスター側と同じバージョンのPostgreSQLをインストールし、データフォルダーを準備します。
# mkdir $PGSQL_HOME/data/
# chown postgres:postgres $PGSQL_HOME/data
# chmod 700 $PGSQL_HOME/data
データの同期(バックアップ)
レプリケーション側のデータフォルダーにマスターデータをバックアップします。
[postgres@db-rep ~]$ pg_basebackup -h 192.168.10.50 -D $PGSQL_HOME/data/ -U repuser --max-rate=30M -P -R
Password:
-P 進捗状況の表示
-R マスターサーバーのコンフィグレーションファイルも同期
--max-rate 同期時のネットワーク帯域を制限
以上でデータの同期は完了しましたので、レプリケーション側で PostgreSQLを起動すれば同期が始まりますが、レプリケーションをマスターサーバが停止した場合に切り替えるようなHA構成でないような場合にはレプリケーション側のハードウェアリソースを最小限にしておきたいような事があると思います。その場合は、起動前に postgresql.conf 等を書き換えてください。
PostgreSQLの起動
問題がなければ起動します。
# systemctl start postgresql
最後に
やることはこれだけですので非常に容易だと思います。
しかし、実際に運用を続けるにはマスター側のWAL関係の設定を見直さないとレプリケーション側の更新が終わる前にマスター側のWALファイルが流れてしまい、同期できないといった事が起こります。次回はその点も含めて実際にレプリケーション側でバックアップを取得する運用を含めて設定と解説をしたいと思います。

