今回は、PostgreSQL(9.1)でホットスタンバイのDBへのレプリケーションを試してみます。
マスターデータベースとスレーブ(ホットスタンバイ)データベースは、CentOS(6.2) & PostgreSQL(9.1) & PostGIS(1.5)の記事のようにインストールされているものとします。
【マスターDBでの作業】
まず、PostgreSQLを停止しておきます。
# su - postgres $ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
postgresql.confを調整します。
$ cat postgresql.conf ... listen_addresses = '*' #listen_addresses = 'localhost' ... wal_level = hot_standby #wal_level = minimal ... max_wal_senders = 2 #max_wal_senders = 0 ... wal_keep_segments = 8 #wal_keep_segments = 0 ... hot_standby = on #hot_standby = off
そして、PostgreSQLを起動しておきます。
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log start
レプリケーション用のユーザーを作成します。
$ /usr/local/pgsql/bin/psql postgres=# CREATE ROLE repluser LOGIN REPLICATION PASSWORD 'replpass'; CREATE ROLE
pg_hba.confを調整します。
$ cat pg_hba.conf ... host replication repluser 10.0.0.0/8 md5
※AWS上から(10.0.0.0/8)からrepluserでアクセスできるようにします。
PostgreSQLを再起動します。
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log restart
【スレーブDBでの作業】
あらかじめPostgreSQLを停止しておきます。
# su - postgres $ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data stop
データベースクラスタを削除します。
$ cd /usr/local/pgsql/data $ rm -rf *
ベースバックアップを取得します。
$ /usr/local/pgsql/bin/pg_basebackup -D /usr/local/pgsql/data -x -P -h 10.150.117.75 -U repluser Password: 42536/42536 kB (100%), 1/1 tablespace $ ls -1 PG_VERSION backup_label base global pg_clog pg_hba.conf pg_ident.conf pg_multixact pg_notify pg_serial pg_stat_tmp pg_subtrans pg_tblspc pg_twophase pg_xlog postgresql.conf postgresql.log
recovery.confを作成し調整します。
$ cp /usr/local/pgsql/share/recovery.conf.sample recovery.conf $ cat recovery.conf ... standby_mode = on #standby_mode = off ... primary_conninfo = 'host=10.x.x.x port=5432 user=repluser password=replpass' #primary_conninfo = '' # e.g. 'host=localhost port=5432' ...
PostgreSQLを起動します。
$ /usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/pgsql/data/postgresql.log start
以上で、マスターデータベースの変更がスレーブ(ホットスタンバイ)データベースにレプリケーションされるようになります。
(スレーブ(ホットスタンバイ)データベースでの読み取りは可能です)