Postgresql9.2レプリケーション構築

レプリケーションポリシー

WALアーカイブ:利用する
同期方式:local(スレーブ非同期)
参考にしたページ
http://lets.postgresql.jp/documents/technical/replication/1/
http://codezine.jp/article/detail/7109

マスタ側での作業
レプリケーション用ユーザの作成
$ su - postgres
パスワード:
$ psql -d postgres 
=# CREATE ROLE repl_user LOGIN REPLICATION PASSWORD '****';
設定前にconfigをバックアップ
$ cd /var/lib/pgsql/9.2/data/
$ cp postgresql.conf postgresql.conf.20130702
$ mv pg_hba.conf20130702 pg_hba.conf.20130702
スレープノードからのrepl_user宛の接続を許可
$ vi pg_hba.conf
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
host    replication     repl_user       0.0.0.0/0         md5
postgresql.conf マスターノードの設定
listen_addresses = '*'          # what IP address(es) to listen on;
wal_level = hot_standby                 # minimal, archive, or hot_standby
#slaveの数+1を設定
max_wal_senders = 2             # max number of walsender processes
#同期方式
synchronous_commit = local              # synchronization level;
#アーカイブモードを有効
archive_mode = on               # allows archiving to be done
archive_command = 'archive_command = 'cp %p /var/lib/pgsql/9.2/backups/%f
psqlの再起動
$ pg_ctl restart -D /var/lib/pgsql/9.2/data
スレープ側での作業
psqlの停止
pg_ctl stop -D /var/lib/pgsql/9.2/data
マスタDBからdatabase本体をリストア
$ vi ~/.bash_profile 
PATH=/usr/pgsql-9.2/bin:$PATH
export PGDATA
$ source ~/.bash_profile 

$ mv  /var/lib/pgsql/9.2/data  /var/lib/pgsql/9.2/data.20130702
$ pg_basebackup -h db1 -p 5432 -U repl_user -D /var/lib/pgsql/9.2/data
パスワード: 
NOTICE:  pg_stop_backup が完了し、要求されたすべての WAL セグメントがアーカイブされました
設定作業前にバックアップ
-bash-4.1$ cd /var/lib/pgsql/9.2/data/
-bash-4.1$ cp postgresql.conf postgresql.conf.20130702
-bash-4.1$ mv pg_hba.conf20130702 pg_hba.conf.20130702
postgresql.confのslave設定
$ vi postgresql.conf
hot_standby = on# "on" allows queries during recovery
サブスクライバの設定(recovery.confは新規作成)
$ vi recovery.conf
standby_mode = 'on'
primary_conninfo = 'host=db1 port=5432 user=repl_user password=gps123#lv'
スレープ起動
pg_ctl start -D /var/lib/pgsql/9.2/data

この時点でレプケーションが始まります。

DDLの同期を確認

master

-bash-4.1$ psql template1
create table test(id serial primary key, comment text);
NOTICE:  CREATE TABLEはシリアル列"test.id"用に暗黙的なシーケンス"test_id_seq"を作成します。
NOTICE:  CREATE TABLE / PRIMARY KEYはテーブル"test"に暗黙的なインデックス"test_pkey"を作成します
CREATE TABLE

slave

-bash-4.1$ psql template1
psql (9.2.4)
"help" でヘルプを表示します.

template1=# \dt
          リレーションの一覧
 スキーマ | 名前 |    型    |  所有者  
----------+------+----------+----------
 public   | test | テーブル | postgres
(1 行)