PostgreSQL 9.0.1でレプリケーションを設定

PostgreSQL 9.0からレプリケーションの機能がネイティブで実装されたので試しにコンパイルしてインストールしてみた。環境はCentOS

新機能については下記サイトを参考に

PostgreSQL 9.0 の新機能

ソースのダウンロードは本家のサイトから。コンパイルとインストールは前の記事を参考に。レプリケーションの設定はここのサイトを参考にした。

まずはプライマリー(マスター)側の設定。

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で別ドライブをマウントして、スクリプトでバックアップする方がお手軽で分かりやすい。

 

<関連記事>