postgres ストリーミングレプリケーション

ホットスタンバイ・非同期の設定

  1. 準備

ロールの作成
$ psql postgres
postgres=# create role repl_user login replication password 'xxxxxx';

アーカイブディレクトリの作成
$ sudo mkdir /usr/local/pgsql/archive
$ sudo chown postgres /usr/local/pgsql/archive

設定ファイル
postgresql.conf
wal_level = hot_standby
archive_mode = on
archive_command = 'test ! -f /usr/local/pgsql/archive/%f && cp %p /usr/local/pgsql/archive/%f'
max_wal_senders = 2

pg_hba.conf
host replication repl_user 192.168.0.2/32 md5

  1. ベースバックアップ

上記の準備をして、マスタのpostgresを再起動し、設定を反映させる。
スタンバイでベースバックアップ。

$ pg_basebackup -h 192.168.0.1 -p 5432 -U repl_user -D /usr/local/pgsql/data --format=plain --checkpoint=fast --label=label1 --progress --verbose

  1. スタンバイサーバの設定

postgresql.conf
hot_standby = on

recovery.conf
restore_command = 'scp -i /foo/bar/.ssh/auto_execute 192.168.0.1:/usr/local/pgsql/archive/%f %p'
standby_mode = on
primary_conninfo = 'host=192.168.0.1 port=5432 user=repl_user password=xxxxxx'

  1. スタンバイサーバの起動・同期

$ pg_ctl start
でpostgresを起動すると、自動的に同期される。これで運用開始。

  1. 確認(マスタ側で実行)

$ psql postgres
# select * from pg_stat_replication;

  1. 運用

マスタのアーカイブディレクトリにあるファイルを定期的に削除する設定が必要。