プライマリ側
SELECT * FROM pg_stat_replication
psql -x -c "SELECT * FROM pg_stat_replication" -[ RECORD 1 ]----+------------------------------ pid | 2167 usesysid | 42700 usename | repl_user application_name | walreceiver client_addr | 10.0.2.102 client_hostname | client_port | 33058 backend_start | 2018-11-07 10:38:31.841085+09 state | streaming sent_location | 12F8/8D0006C8 write_location | 12F8/8D0006C8 flush_location | 12F8/8D0006C8 replay_location | 12F8/8D000400 sync_priority | 0 sync_state | async
重要なステータス
- sync_state: 同期方法
sync
: 非同期レプリケーションasync
: 同期レプリケーション
- state: スタンバイの状態。通常は
streaming
- sent_location: プライマリが送信済みのWALの位置
- write_location: プライマリがバッファに書き込み済みのWALの位置
- flush_location: プライマリがディスクに書き込み済みのWALの位置
- replay_location: スタンバイがディスクに書き込み済みのWALの位置
〜_location
がすべて一致していれば、遅延なくレプリケーションが行われている証拠
スタンバイ側
pg_last_xlog_receive_location()
が pg_stat_replication
の位置と大差なければレプリケーションができている
psql -c "select pg_last_xlog_receive_location()" pg_last_xlog_receive_location ------------------------------- 12F8/8D000E88 (1 row)
pg_last_xlog_receive_location
は、 ストリーミングレプリケーションにより受信され、ディスクに書き込まれたトランザクションログの最後の位置
なお、PostgreSQL96からは pg_stat_wal_receiver
で、pg_stat_replication
のような情報が取れるらしいです