EDB Postgres Distributed(PGD)5.8.0
1. PGDとは何か?
EDB Postgres Distributed (PGD) は、PostgreSQLをベースに構築された分散データベースソリューションです。PGDは、マルチマスターレプリケーションとデータ分散機能を提供し、最大ファイブナイン(99.999%)の高可用性と耐障害性を備えたPostgreSQLクラスターを実現します。主な特徴として、高度な競合管理、データ損失保護、そしてネイティブ論理レプリケーションと比較して最大5倍高速な大幅に強化されたスループットが挙げられます。継続的なアップタイムと、地理的に異なる可能性のある複数ノード間でのデータ一貫性が求められるミッションクリティカルなアプリケーション向けに設計されています。
2. 仕組みは?
PGDのアーキテクチャは、いくつかのコアコンポーネントと概念を中心に構成されています。
- 双方向レプリケーション(BDR): PGDの中核技術であり、PostgreSQLインスタンス(PGDノード)間でマルチマスターレプリケーションメッシュを構築します。これにより、どのノードも書き込みを受け付け、その変更が他のノードに複製されます。
- PGDプロキシ: 通常、PGDグループ内の指定された「ライトリーダー」ノードにアプリケーショントラフィックをルーティングします。これにより、書き込み競合を最小限に抑え、より強力な一貫性を確保します。また、ライトリーダーが利用不可になった場合のフェイルオーバーも処理します。
- Raftコンセンサス: PGDはRaftコンセンサスアルゴリズムを使用して、ライトリーダーの選出、DDL(データ定義言語)レプリケーションの管理、グローバルシーケンスの調整など、グループ全体の決定を行います。
- レプリケーションとコミットスコープ:
デフォルトでは、レプリケーションは非同期で行われ、ローカルコミット後にピアノードに変更が適用されます。PGDは、異なるレベルの同期性と耐久性を実現するために設定可能なコミットスコープを提供します。- 同期コミット (Synchronous Commit): ネイティブPostgreSQLの同期レプリケーションと同様の動作をします。
- グループコミット (Group Commit): 指定されたノードグループ(例:多数派)が変更を確認した時点でトランザクションがコミットされたと定義します。
- 最大1回コミット(CAMO – Commit At Most Once): アプリケーションがコミットプロセスに関与することで、フェイルオーバー時でも重要なトランザクションが正確に1回だけコミットされることを保証します。
- ラグコントロール (Lag Control): ピアへのレプリケーション遅延が定義された制限を超えた場合、オリジンノードでのコミットを動的に抑制します。
- ノードタイプとグループ:
ノードはグループとサブグループに編成され、多くの場合、地理的な場所やデータセンターを反映します。各グループは独自のライトリーダーとRaftコンセンサスを持つことができます。- データノード: データを保存・複製する標準的なPGDノード。
- ウィットネスノード: Raftコンセンサスに参加して多数派の形成を助けますが、データは保存・複製しません。小規模構成でコスト効率よくクォーラムを確保するのに役立ちます。
- サブスクライバー専用ノード: 読み取り専用目的(レポート作成、分析など)で複製データを受信し、フルメッシュレプリケーションに参加せずに読み取りスケーラビリティを向上させます。
- 論理スタンバイノード: ソースノードからデータを受信し、ソース障害時に昇格できます。
- 競合管理: PGDは、マルチマスター構成で発生しうる競合(例:update_if_newer、列レベルの競合解決、CRDT)を検出・解決するためのメカニズムを提供します。
- DDLレプリケーション: PGDはDDLステートメント(CREATE TABLEなど)をクラスター全体に複製し、通常はグローバルロックを介して管理されます。
3. PGDのユースケース
PGDは、その機能に基づき、以下のような場合に適しています。
- 高可用性と災害復旧: ミッションクリティカルなアプリケーションの継続的なデータベース運用を保証し、ノード間および地理的リージョン間でのフェイルオーバーを実現します。
- 地理的に分散したアプリケーション: ユーザーに近い場所にデータを分散し、遅延を削減し、データレジデンシー要件に準拠します。
- アクティブ/アクティブ マルチマスター構成: 複数のノードへの同時書き込みを許可しますが、競合を簡素化・管理するためにPGDプロキシと共にライトリーダーパターンがよく使用されます。
- 読み取りスケーラビリティ: 書き込み負荷の高いプライマリノードのパフォーマンスに影響を与えることなく、読み取り負荷の高いワークロードをサブスクライバー専用ノードやレプリカにオフロードします。
- 無停止メンテナンスとアップグレード: サービスを中断することなく、ローリングアップグレードやメンテナンス操作を容易にします。
4. PGDの利点
- 極めて高い可用性: 最大「ファイブナイン」(99.999%)のアップタイムを達成します。
- パフォーマンス向上: ネイティブPostgreSQL論理レプリケーションと比較して最大5倍のスループットを提供します。
- 高度な競合管理: CAMOやCRDTなどの機能を使用して、データ競合を自動的に検出・解決、または回避する高度なメカニズムを備えています。
- データ損失保護: 設定可能な耐久性オプションにより、ノードまたはサイト障害時のデータ損失を防ぎます。
- 地理的分散: 複数のデータセンターまたはクラウドリージョン間で堅牢かつ一貫性のあるデータレプリケーションを可能にします。
- 読み取りスケーラビリティ: 読み取り負荷の高いアプリケーションのパフォーマンスを向上させます。
- 運用上の柔軟性: 無停止メンテナンス、ローリングアップグレード、柔軟なアーキテクチャパターンをサポートします。
- PostgreSQLとの互換性: 既存のPostgreSQL機能を拡張するため、既存のPostgreSQLユーザーが採用しやすいです。
5. バージョン 5.8.0での新機能ハイライト
- セキュリティ修正: CVE-2025-2506に対処しました。これは、CONNECTアクセス権を持つユーザーが複製テーブルへの読み取りアクセス権を取得できる可能性があった脆弱性です。
- PGD CLI(コマンドラインインターフェース)の強化: ユーザビリティと機能性の向上
- pgd node show コマンドに、より的を絞った出力のための –summary および –options フラグが含まれるようになりました。
- pgd cluster verify コマンドが、より多くのGUC(グローバルユーザー設定パラメータ)を検証するようになりました。
- CLIデバッグメッセージのフォーマットが改善され、読みやすくなりました。
- pgd cluster verify –settings のJSON出力に recommended_value 列が追加されました。
- CLIコマンドからの表形式出力がソートされるようになりました。
- BDR(コアレプリケーション)の強化:
- シーケンス管理: グローバル割り当て(galloc)シーケンスの管理とデバッグを簡素化するために、新しい bdr.galloc_chunk_info() 関数が追加されました。
- コミットスコープ処理ロジック: コミットスコープ処理ロジックがデータノード専用で実行されるようになり、ウィットネスノードやサブスクライバー専用ノードなどの非データノードでの潜在的なエラーや紛らわしいメッセージを防ぐようになりました。
- ベンチマーク: CAMO(最大1回コミット)使用時の pgd_bench のエラーメッセージが改善されました。
- バグ修正: PGD CLIおよびBDRコンポーネント全体で、タイムスタンプ解析、デッドロック、ノード参加時の一貫性、Raftリーダー選出タイムアウト、無効化されたサブスクリプションなどに関する多数のバグが修正されました。
日本語訳|EDB Postgres Distributed(PGD)5.8.0
※GoogleのAutoML Translationを使用して翻訳しております。
![]() |
![]() |
英語原文|EDB Postgres Distributed(PGD)5.8.0
![]() |
![]() |





