PostgreSQL 9.0.1でレプリケーションを設定
PostgreSQL 9.0からレプリケーションの機能がネイティブで実装されたので試しにコンパイルしてインストールしてみた。環境はCentOS
新機能については下記サイトを参考に
ソースのダウンロードは本家のサイトから。コンパイルとインストールは前の記事を参考に。レプリケーションの設定はここのサイトを参考にした。
まずはプライマリー(マスター)側の設定。
postgresql.confを変更。各設定項目の意味は公式サイトのドキュメントを参照。
# vi /usr/local/pgsql/data/postgresql.conf
wal_level = hot_standby
archive_mode = on
archive_command = 'cp %p /usr/local/pgsql/data/pg_archive/%f'
max_wal_senders = 3
archive_commandで指定した保存ディレクトリを作成
# mkdir /usr/local/pgsql/data/pg_archive
# chown postgres. /usr/local/pgsql/data/pg_archive
pg_hba.confにレプリケーション接続許可するIPの範囲を設定
# vi /usr/local/pgsql/data/pg_hba.conf
host replication all 192.168.100.0/24 trust
これで再起動
# /etc/rc.d/init.d/postgresql restart
次にスタンバイ(スレイブ)側を設定
postgresql.confをプライマリーと同じように編集して無事起動することを確認。
# vi /usr/local/pgsql/data/postgresql.conf
# mkdir /usr/local/pgsql/data/pg_archive
# chown postgres. /usr/local/pgsql/data/pg_archive
# /etc/rc.d/init.d/postgresql restart
ログファイルを監視していれば何が起きているか分かりやすい
# tail -f serverlog
次はスタンバイになる設定。
# vi /usr/local/pgsql/data/postgresql.conf
host_standby = on(2011/10/03 修正)
hot_standby = on
プライマリー情報をrecovery.confに登録する
# vi /usr/local/pgsql/data/recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=192.168.0.1 port=5432 user=postgres'
restore_command = 'cp /usr/local/pgsql/data/pg_archive/%f %p'
trigger_file = '/tmp/trigger_file'
これでサーバーを再起動する前にdataディレクトリをプライマリーと同期しておく必要がある。参考サイトを同じようにコピーすればできると思うけど、タイムアウトしたのでまた今度。
ちなみに8.4系以前でバックアップを取るには、pgpoolを使ったり、WAL(Write Ahead Logging)の設定をしたり、pg_rmanを使うなりする。
あとpgAdmin3にレプリケーションの項目があって、Slony-Iという仕組みを導入するとレプリケーションが構築できるみたい。また設定が複雑そう・・・。
(大分分かりやすくなったと思うけど)まだNFSで別ドライブをマウントして、スクリプトでバックアップする方がお手軽で分かりやすい。
<関連記事>