pg_standbyでのウォームスタンバイの設定に非常に手こずったのでいろいろ書いとく
実施環境
- CentOS 5.5
- PostgreSQL 8.3.11
- ソースからインストールしたもの
pg_standbyのインストール
PostgreSQL8.3からは(ソースに)付属している
/usr/local/src/postgresql-8.3.11/contrib/pg_standby make make install
バックアップDBの準備
メインDB側のdataディレクトリをコピーしてバックアップ側のdataディレクトリを作る
その際、pg_xlogを中身は消去しておく
メインDB側の設定
postgresql.conf
# scpする場合は事前に公開鍵認証できるように設定しておくこと(各サーバのpostgresユーザー) archive_mode = on archive_command = 'scp %p hoge-host:/usr/local/pgsql/archive/%f' archive_timeout = 10 # 起動 su - postgres /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data
バックアップDB側の設定
archive_commandで指定している格納先ディレクトリを作成しておく
mkdir /usr/local/pgsql/archive
chown postgres:postgres archive
recovery.conf
restore_command = '/usr/local/pgsql/bin/pg_standby -l -t /usr/local/pgsql/data/failover /usr/local/pgsql/archive/ %f %p %r'
# バックアップDB側の起動
# postgresユーザー su - postgres # 起動 /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data # 接続しようとするとこんな感じになる psql -U postgres psql: FATAL: the database system is stating up
メインDB側でデータの作成
データベースを作ってみてarchiveが送られるのを見る
# メイン側 create database test; # アーカイブがバックアップ側に送られてるの確認 cd /usr/local/pgsql/archive ls # あればOK
トリガーファイル作ってリカバリさせてみる
このトリガーファイルはpostgresユーザーで扱える権限に設定しておく必要がある。少しはまった
# postgresユーザー su - postgres touch /usr/local/pgsql/data/failover
トリガーファイルが作成されると自動的にリカバリしてpsqlコマンドで接続できるようになるはず
できたら適当に作ったデータがバックアップ側への反映されていることを確認する
追記(9/2)
リカバリーされるとrecovery.confがリネームされてrecovery.doneに変わる