PostgreSQL レプリケーションとHA構成ガイド
このドキュメントでは、PostgreSQLのレプリケーションと高可用性(HA)構成を解説します。
目次
- レプリケーションの概要
- ストリーミングレプリケーション
- 同期レプリケーション
- 論理レプリケーション
- レプリケーションスロット
- フェイルオーバー
- Patroniによる自動フェイルオーバー
- 読み取り負荷分散
1. レプリケーションの概要
1.1 レプリケーションの目的
┌──────────────────────────────────────────────────────────────┐
│ レプリケーションの目的 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 【高可用性 (High Availability)】 │
│ - プライマリ障害時にスタンバイに切り替え │
│ - ダウンタイムの最小化 │
│ - RPO (データ損失) の最小化 │
│ │
│ 【読み取りスケーリング】 │
│ - 読み取りクエリをスタンバイに分散 │
│ - プライマリの負荷軽減 │
│ - レポート/分析クエリの分離 │
│ │
│ 【災害対策 (Disaster Recovery)】 │
│ - 地理的に離れた場所にレプリカを配置 │
│ - データセンター障害への対策 │
│ │
│ 【メンテナンス】 │
│ - ローリングアップグレード │
│ - スタンバイでのバックアップ取得 │
│ │
└──────────────────────────────────────────────────────────────┘
1.2 レプリケーション方式の比較
┌──────────────────────────────────────────────────────────────┐
│ レプリケーション方式の比較 │
├─────────────────────────── ───────────────────────────────────┤
│ │
│ 【ストリーミングレプリケーション】(物理) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ ✅ WALをそのまま送信 → 完全なレプリカ │ │
│ │ ✅ 設定が比較的シンプル │ │
│ │ ✅ PITRと組み合わせ可能 │ │
│ │ ❌ クラスタ全体の複製のみ (テーブル単位不可) │ │
│ │ ❌ 同一メジャーバージョン間のみ │ │
│ │ ❌ 同一アーキテクチャ間のみ │ │
│ └────────────────────────────────────────────────────── ┘ │
│ │
│ 【論理レプリケーション】 │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ ✅ テーブル/データベース単位で選択可能 │ │
│ │ ✅ 異なるメジャーバージョン間で可能 │ │
│ │ ✅ サブスクライバー側で追加のインデックス作成可能 │ │
│ │ ❌ DDLは複製されない │ │
│ │ ❌ シーケンス、ラージオブジェクトは複製されない │ │
│ │ ❌ 設定が複雑 │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 【選択の指針】 │
│ - HA/DR目的 → ストリーミングレプリケーション │
│ - 部分的な複製、異バージョン間 → 論理レプリケーション │
│ │
└──────────────────────────────────────────────────────────────┘