我三流

いろいろ自分なりにやってみたことを書いています

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 加筆しました。