PostgreSQLでストリーミング・レプリケーションの構築
2台のサーバーはFreeBSD 9.0-RELEASE + PostgreSQL 9.1.3
【マスターサーバー】 = 192.168.0.30
【スレーブサーバー】 = 192.168.0.50
とりあえず、マスタサーバーのディスク故障に備えたリアルタイム・バックアップの用途
【マスターサーバー】
マスターサーバーのPostgreSQLを停止 # /usr/local/etc/rc.d/postgresql stop 次に、各設定ファイルの編集 [postgresql.conf] listen_addresses = '*' port = 5432 wal_level = hot_standby archive_command = 'scp %p /usr/local/pgsql/data/pg_archive/%f' max_wal_senders = 2 hot_standby = off
[pg_hba.conf] host replication all 192.168.0.50/24 trust
【スレーブサーバー】
スレーブサーバーのPostgreSQLを停止 # /usr/local/etc/rc.d/postgresql stop 次に、各設定ファイルの編集 [postgresql.conf] listen_addresses = '*' port = 5432 wal_level = hot_standby archive_mode = on archive_command = 'scp %p /usr/local/pgsql/data/pg_archive/%f' max_wal_senders = 2 wal_keep_segments = 8 hot_standby = on
[pg_hba.conf] host replication all 192.168.0.30/24 trust
[recovery.conf] restore_command = 'scp /usr/local/pgsql/data/archive_log/%f %p' standby_mode = 'on' primary_conninfo = 'host=192.168.0.30' trigger_file = '/tmp/trigger'
【バックアップとデータ転送】
マスターサーバーのPostgreSQLを起動 # /usr/local/etc/rc.d/postgresql start
マスターサーバーのdataディレクトリのバックアップを取ります。 # cd /usr/local/pgsql # tar zcvf data.tar.gz data
マスターサーバーのdataディレクトリのバックアップを スレーブサーバーのpgsqlディレクトリへ転送する。 # scp data.tar.gz 192.168.0.50:/usr/local/pgsql/
スレーブサーバーのdataディレクトリで.confファイルのバックアップをとっておきます。 # cd /usr/local/pgsql # mkdir ./conf_backup # cp -a data/*.conf ./conf_backup/
スレーブサーバーにマスターデータから転送したdataディレクトリのバックアップを 展開します。 # tar zxvf data.tar.gz
スレーブサーバーに先ほどバックアップした.confファイルを戻します。 # cp -a ~/conf_backup/*.conf data/
スレーブサーバーにマスターデータから転送したdataディレクトリ内に プロセスIDが残っているとエラーが出るので、予め削除しておきます。 # rm -f data/postmaster.pid
スレーブサーバーのPostgreSQLを起動 # /usr/local/etc/rc.d/postgresql start
【結果確認】
SELECT * FROM pg_stat_replication;
# 24.4.19 加筆しました。