2012年2月21日火曜日

PostgreSQL(9.1)でレプリケーション

スズキです。

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

これで、マスターデータベースの変更がスレーブ(ホットスタンバイ)データベースに
レプリケーションされます。
(スレーブ(ホットスタンバイ)データベースでの読み取りはできます)

次は"cryptsetup"に戻ろう...
--------
http://www.suz-lab.com

0 コメント: