PostgreSQLで同期レプリケーションの設定をしたのでメモ。
【環境】
※マスター + スレーブ×1
マスター
OS:CentOS 6.2
PostgreSQL:9.1.4
スレーブ
OS:CentOS 6.2
PostgreSQL:9.1.4
【参考サイト】
PostgreSQL 9.1 - 同期レプリケーション
※マスター側は通常運用できる設定が済んでいるものとします。
マスター側
postgre.conf
wal_level = hot_standby
max_wal_senders = 2 #レプリケーション中に再度ベースバックアップをしたい場合の保険にスレーブ数+1に設定
synchronous_standby_names = 'slave1' #今回はスレーブ側でスレーブ名をslave1に設定
pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host replication 接続ユーザー スレーブサーバーのIP trust #この設定を追加
マスター再起動
master$ service postgresql-9.1 restart
スレーブ側
マスタ側のベーズバックアップをコピー
slave1$ pg_basebackup -h [マスターサーバーIP] -p [ポート] -D /var/lib/pgsql/9.1/data --xlog --progress --verbose
スレーブの/var/lib/pgsql/9.1/data以下にマスタのベースバックアップをコピーする。
この時、dataディレクトリが存在するとうまくいかない。
recovery.conf
/usr/pgsql-9.1/share/recovery.conf.sampleをdataディレクトリにコピーして利用する。
standby_mode = on
primary_conninfo = 'host=master port=5432 application_name=slave1' # スレーブ名をapplication_nameに設定
スレーブ再起動
slave$ service postgresql-9.1 restart
マスタ側で動作確認
master$ psql dbname
dbname=# SELECT application_name,state,sync_priority,sync_state FROM pg_stat_replication;
application_name | state | sync_priority | sync_state
------------------+-----------+---------------+------------
slave1 | streaming | 1 | sync
(1 row)