postgres ストリーミングレプリケーション
ホットスタンバイ・非同期の設定
- 準備
ロールの作成
$ 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
- ベースバックアップ
上記の準備をして、マスタの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
- スタンバイサーバの設定
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'
- スタンバイサーバの起動・同期
$ pg_ctl start
でpostgresを起動すると、自動的に同期される。これで運用開始。
- 確認(マスタ側で実行)
$ psql postgres
# select * from pg_stat_replication;
- 運用