PostgreSQL93でのレプリケーション確認方法

プライマリ側

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 のような情報が取れるらしいです

参考