PostgreSQLのレプリケーション
PostgreSQLで使えるレプリケーションは2種類ある
ストリーミングレプリケーション
WAL(Write-Ahead Log)をスタンバイサーバに転送して複製する仕組み
同期するか非同期にするか
同期レプリケーション
スタンバイサーバの応答を待ってコミットする
スタンバイの最新性が高い
フェイルオーバに向く(PostgreSQL自体にはフェイルオーバの仕組みはない)
スタンバイがダウンした場合、応答が返ってこないのでコミットできない
非同期レプリケーションに切り替える
ホットスタンバイ
非同期レプリケーション
スタンバイサーバの応答を待たずにコミットする
災害対策などで遠隔拠点にレプリケーションするときに向く
運用
プライマリが停止したとき
スタンバイに切り替えることを「昇格」と呼ぶ
pg_ctl_promote
スタンバイが故障したとき
同期レプリケーションしているならプライマリから切り離す
応答が返らないのでプライマリはコミットを完了できない
プライマリのpostgresql.conf
synchronous_standby_namesを書き換える(1:1構成なら空にする)
pg_ctl_reloadで再度読み込みする
レプリケーションの状況確認
walreceiverプロセスによるWALのreveive位置とWALのreplay位置を確認するよい
スタンバイで直接確認
pg_last_wal_receive_location
pg_last_wal_recplay_location
論理レプリケーション
10から導入された。対象とするテーブルや操作を指定したレプリケーション構成にできる
仕組みはストリーミングレプリケーションと同様にWALの転送
参考文献
内部構造から学ぶPostgreSQL 設計・運用計画の鉄則
ストリーミングレプリケーション ~仕組み、構成のポイント~|PostgreSQLインサイド : 富士通