(2012.10.30追記)以下の記述は古くなっています。
最新の情報を書籍にまとめたので参照のこと。
最も単純な構成でStreaming Replicationをセットアップする。
master、slaveとも同一サーバ上で動かす。ポート番号だけ変えて起動する(master=5432, slave=2345)。
続きはこちら
か、もしくは
マスタ側の準備
postgresql.confの設定
最低限の設定項目を示す。
# これをonにしなければ始まらない。 archive_mode = on # archive か hot_standby。今回はHotStandbyと併用するので"hot_standby" wal_level = hot_standby # PITR用。適当なディレクトリを指定 archive_command = 'cp -i %p /home/postgres/archives_master/%f' # スレーブの最大数。ここでは1。 max_wal_senders = 1
また、スレーブを他サーバからアクセスさせる場合は"listen_addresses"の設定も忘れずに。
listen_addresses = '*' # 適宜。
pg_hba.confの設定
スレーブからの接続のために、pg_hba.confに以下の行を追加する。 USERはスレーブの実行ユーザを指定する。ここではpostgres。
また、スレーブを別サーバで稼働させる場合は許可するIPアドレスなども適宜変更すること。
# TYPE DATABASE USER CIDR-ADDRESS METHOD host replication postgres 127.0.0.1/32 trust
スナップショット
スレーブを構築するために、マスターのスナップショットを取得する。 当然だがマスタは起動しておくこと。
以降、起動したままで作業してよいし、データの更新なども行ってよい。 このあたりの運用性の高さがPostgreSQLの魅力である。
バックアップの開始
masterに接続して、次のコマンドを実行する。
template1=# SELECT pg_start_backup('SR SNAPSHOT'); pg_start_backup
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
データ領域のコピー
masterのデータ領域(ここでは/usr/local/pgsql/master)を、 slave用のデータ領域(ここでは/usr/local/pgsql/slave)にコピーする。
cp -r /usr/local/pgsql/master/ /usr/local/pgsql/slave
バックアップの終了
データ領域のコピーが終了したら、以下のコマンドを実行する。
template1=# SELECT pg_stop_backup(); NOTICE: pg_stop_backup cleanup done, waiting for required WAL segments to be archived pg_stop_backup
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
アーカイブ領域のコピー
最後にアーカイブ領域の内容をコピーする。
# cp -r /home/postgres/archives_master /home/postgres/archives_slave
スレーブ側の準備
postmaster.pidの削除
マスタ側のpostmaster.pidファイルが残っているので削除する。
# rm -f /usr/local/pgsql/slave/postmaster.pid
postgresql.confの編集
適宜、編集する。
# 今回はmasterと同じサーバで稼働させるので、port番号を変える。 port = 2345 # 今回はHotStandByと併用するので hot_standby = on # archive か hot_standby。今回はHotStandbyと併用するので"hot_standby" wal_level = hot_standby # PITR用。適当なディレクトリを指定 archive_mode = on archive_command = 'cp -i %p /home/postgres/archives_slave/%f'
slave用のアーカイブログ保存ディレクトリ(ここでは/home/postgres/archives_slave)を作成する。
# mkdir /home/postgres/archives_slave
pg_hba.confの編集
pg_hba.confもマスタのコピーなので、適宜編集する。
特にreplication関連の設定は不要なのでコメントアウトしてよい。 理由は、スレーブしかマスタに接続要求しないため。 詳細は別途。
# スレーブ側では不要 ## host replication postgres 127.0.0.1/32 trust
recovery.confの準備
次にrecovery.confを準備する。 PostgreSQLをインストールしたディレクトリにshareというサブディレクトリがあり、 そこにサンプルファイルrecovery.conf.sampleがあるので、それをコピーして編集する。
# cd /usr/local/pgsql/slave # cp ../share/recovery.conf.sample recovery.conf
編集が必要な項目を示す。
# recovery.confは全て'でクオートしないとならない。 standby_mode = 'on' # primary_conninfo = 'host=localhost port=5432' # 必須ではないが、フェールオーバーには必要 trigger_file = '/tmp/trigger' # PITR用 restore_command = 'cp /home/postgres/archives_slave/%f %p'
standby_mode
"'on'"と "'"でくくること。
primary_conninnfo
マスタのサーバアドレスとポート番号を指定する。
trigger_file
フェールオーバで、スレーブを書き込み可能にするためのファイルを指定する。 普段は存在せず、なんらかのトラブルでフェールオーバしなければならないときに作成するファイル名を指定。
スレーブの起動
準備が整ったので、あとはスレーブを起動するだけである。
停止
マスタもスレーブも停止や起動ができる。 非常に柔軟な運用が可能である。