EDB Postgres Distributed(PGD)6.4.0
日本語訳|EDB Postgres Distributed(PGD)6.4.0
※GoogleのAutoML Translationを使用して翻訳しております。
![]() |
![]() |
英語原文|EDB Postgres Distributed(PGD)6.4.0
![]() |
![]() |
概要
1. EDB Postgres Distributed (PGD) とは
EDB Postgres Distributed (PGD) は、標準の PostgreSQL、EDB Postgres Extended Server (PGE)、または EDB Postgres Advanced Server (EPAS) を、分散型、マルチマスター構成、かつ高可用性なデータベースプラットフォームへと変換する統合ソフトウェアスタックです。
従来のプライマリ・スタンバイ構成とは異なり、PGD では複数のデータベースノードが同時に書き込み操作を受け付けることができます。その中核となる技術は、最新世代の双方向レプリケーション (BDR: Bi-Directional Replication) であり、物理レプリケーションではなく論理レプリケーションをベースに構築されています。
2. PGD のユースケースとメリット
PGD は、継続的なデータベースの可用性とデータの整合性が不可欠な、最重要(Tier 1)のエンタープライズワークロード向けに設計されています。主なメリットとユースケースは以下の通りです。
- アクティブ・アクティブ構成による業務継続性: すべてのノードで書き込みが可能なため、「ゼロ待ちフェイルオーバー」をサポートします。ノードや地域のデータセンターで障害が発生した場合でも、プライマリの選出プロセスを待つことなく、アプリケーションは即座に別の稼働中のノードへトラフィックをルーティングできます。
- 柔軟な整合性管理: CAPの定理におけるパフォーマンスと堅牢性のトレードオフを調整するため、あらかじめ定義された「コミットスコープ」を用いて、要件に応じた調整を行うことができます。
- データの局所性とデータ主権: 選択的フィルタリングやルーティングをサポートしています。これにより、GDPRやCCPAなどのデータ保護規制に対応するため、機密データ(個人情報など)を特定の地域に留め置きつつ、グローバルで統一されたクラスタビューを維持できます。
- グローバルな参照(リード)スケーリング: 参照専用のトラフィックを「サブスクライバ専用ノード」にオフロードできます。これらのノードはデータの変更を受信しますが、書き込みやコンセンサスには参加しないため、書き込みパフォーマンスに影響を与えることなく、数十ノード規模まで参照性能を拡張できます。
- 自動競合管理: 異なるノードで同時に同じ行への書き込み(競合)が発生した場合、PGDの競合解決エンジンが、設定されたルール(例:「最後に更新されたデータを優先する」など)に基づいて自動的に検出し、不整合を解消します。
- データライフサイクルの管理(階層化ストレージ): Postgres Analytics Accelerator (PGAA) との統合により、頻繁にアクセスされない古いパーティションデータを、ローカルの高速SSDから安価なオブジェクトストレージ(Amazon S3やMinIOなど)へ、高圧縮率の列指向(カラムナ)フォーマットで自動的に移行できます。移行後も、同一のテーブルインターフェースから透過的にクエリを実行可能です。
- ゼロダウンタイムでの運用: データベースのアップグレードやOSパッチの適用、ハードウェアメンテナンスを、データベースを完全にオフラインにすることなく、各ノードに対して順次実行(ローリングアップグレード)できます。
3. メリットを実現するための PGD の仕組み
PGD は、いくつかの統合されたコンポーネントとプロトコルを組み合わせて分散高可用性を実現しています。
- 論理レプリケーション: 物理的なディスクブロックをコピーする物理レプリケーションとは異なり、論理的なレベルでデータの変更をレプリケートします。これにより、PostgreSQLの異なるメジャーバージョン間でのデータ同期が可能になり、同一テーブルへの同時書き込みを可能にします。
- コミットスコープ: トランザクションがどのようにコミットされるかを定義するルールです。コミットスコープは、クライアントにコミット完了を返す前に、どのグループの何台のノードがトランザクションを承認する必要があるかを制御します。
- コネクションマネージャー: 従来の外部プロキシに代わり、データベースインスタンスに統合されたコネクションマネージャーがバックグラウンドで動作します。アプリケーションからの書き込みトラフィックを特定の「ライトリーダー (Write Leader)」ノードに自動ルーティングすることでマルチノード書き込みによる競合を防ぎ、一方で読み取りトラフィックを他のレプリカに分散させます。
- Raftコンセンサスプロトコル: ノードグループ内でRaftコンセンサスアルゴリズムを使用し、ライトリーダーの選出、クラスタ構成の管理、およびグローバルロック(DDLやDMLロック)の制御を調整します。
- レプリケーションセット: テーブルを特定のグループ(レプリケーションセット)に分類して管理します。これにより、どのテーブルをどのノードに同期するかをきめ細かく制御し、部分的なレプリケーション構成を実現します。
4. PGD 6.4.0 における新機能と強化点
リリース6.4.0では、複数の重要な機能、拡張、およびバグ修正が導入されています。
- クォーラムコミット (Quorum Commit) スコープの追加: トランザクションをコミットする前に、クラスタ内の過半数(マジョリティ)のノードがトランザクションの適用に合意することを強制する新しいコミットスコープです。合意が得られない場合、トランザクションはすべてのノードでロールバックされ、データの乖離を防ぎ一貫したグローバルビューを保証します。
- トランザクションモードのコネクションプーリング: コネクションマネージャーが、従来のセッションモードに加えて「トランザクションモード」でのプーリングをサポートするようになりました。バックエンド接続はトランザクション実行時のみ保持されるため、データベースの最大接続数(max_connections)への負荷が軽減され、同時実行数の高い環境でのスケーラビリティが向上します。
- 複製ラージオブジェクト (Replicated Large Objects): 分散環境において、PostgreSQLのラージオブジェクトの論理レプリケーションをサポートしました。すべてのノードにラージオブジェクトを複製し、gallocシーケンスを用いてグローバルに一意なOIDを自動生成することで、IDの競合を排除します。
- アプライエラーポリシーの強化: レプリケーションの適用(アプライ)失敗時の挙動を詳細に設定できるようになりました。エラー発生時に無限にリトライを繰り返すのではなく、失敗した変更をキャプチャして専用のテーブルに記録し、管理者がSQL関数を通じて確認・対処できるように設定可能です。
- Raft状態の同期コマンド: 新たに導入された pgd raft sync-snapshot コマンドにより、Raftの状態が乖離してしまった場合、リーダーノードからスナップショットをエクスポートして各フォロワーにインポートすることで、Raft状態を強制的に同期できるようになりました。
- 一括リーダーシップ移譲関数 (bdr.transfer_all_leaderships): ローカルノードが持つすべての「書き込みリーダー」および「Raftリーダー」の権限を、設定されたタイムアウト内に他ノードへ自動で移譲します。これにより、ノードをメンテナンスのために安全に切り離す(ドレインする)作業が簡素化されます。





