EDB Postgres Distributed(PGD)6.5.0

日本語訳|EDB Postgres Distributed(PGD)6.5.0

※GoogleのAutoML Translationを使用して翻訳しております。

英語原文|EDB Postgres Distributed(PGD)6.5.0

概要

1. PGD(EDB Postgres Distributed)とは
EDB Postgres Distributed (PGD) は、標準の PostgreSQL、EDB Postgres Extended Server (PGE)、または EDB Postgres Advanced Server (EPAS) を、分散型かつ常時稼働(Always-On)のマルチマスターデータベースプラットフォームへと拡張する統合ソフトウェアスタックです。

最新世代の BDR(Bi-Directional Replication:双方向レプリケーション) を中核として構築されており、外部のプロキシやコンセンサスツールを必要とせず、ローカルノード間、複数データセンター間、マルチリージョンクラウド環境にわたり、マルチマスター論理レプリケーション、クラスタ全体の合意形成、自動競合管理、最大「99.999%(ファイブナイン)」の高可用性を提供します。

2. PGDの主な機能

  • マルチマスター(アクティブ・アクティブ)レプリケーション: すべてのデータノードが書き込み可能であり、複数の拠点で同時に読み書きを処理できます。
  • コミットスコープ(柔軟な耐久性・一貫性制御):
    • Synchronous Commit(同期コミット): リモートノードによる確認(received、replicated、durable、visible)を保証。
    • Quorum Commit(クォーラムコミット): 2フェーズコミットを用いて過半数のノードが合意するまでどのノードもローカルコミットを行わない仕組みで、データの不整合や競合を未然に防止。
    • CAMO (Commit At Most Once): パートナーノードと連携し、障害発生時の再試行によるトランザクションの二重実行を防止。
    • Lag Control(遅延制御): レプリケーション遅延が閾値を超えた場合、元のノードの書き込みスループットを自動的に抑制。
  • 自動競合管理(Conflict Management): 「最新の更新を優先(update_if_newer)」、カスタム競合トリガー、カラムレベル競合検出(CLCD)、競合フリー複製データ型(CRDT) などを用いて、データの衝突を自動的に解決。
  • 組み込み型 Connection Manager: データベースインスタンス内に組み込まれたレイヤー7プロキシ/コネクションプーラー。書き込みリーダーへの自動ルーティング、レプリカ間での読み取り負荷分散、セッション/トランザクションプーリングを提供。
  • Raftコンセンサスレイヤー: 書き込みリーダーの選出、グローバルDDL/DMLロックの管理、クラスタ全体の合意形成を自動処理。
  • グローバルシーケンス: SnowflakeId(タイムスタンプ/ノードIDベース)や galloc(グローバル割り当て範囲)により、クラスタ全体で重複しない一意の主キーを生成。
  • 階層化テーブル(Tiered Tables)とレイクハウス連携(PGAA): Postgres Analytics Accelerator (PGAA) と連携し、古いコールドデータをオブジェクトストレージ(Apache Iceberg® や Delta Lake)へ自動移行しつつ、同一テーブルとしてSQLから透過的に検索可能。
  • 選択的レプリケーション(Selective Replication): レプリケーションセットや行フィルター(row_filter)により、機密データや個人情報(GDPR/CCPA対象データ)を特定リージョン内のみに保持し、共通マスタデータのみをグローバルに複製可能。
  • LCR(論理変更レコード)とCDCフェイルオーバーサポート: デコード処理を1回で済ませるデコーディングワーカーや、論理レプリケーションスロットをクラスタ全体で複製するCDCフェイルオーバー機能を提供。

3. PGDのメリット

  • 高可用性と待ち時間ゼロのフェイルオーバー: ノードやリージョンで障害が発生しても数秒でトラフィックが自動迂回され、復旧時間目標(RTO)を大幅に短縮(最大99.999%の可用性)。
  • ダウンタイムゼロのローリングアップグレード: アプリケーションを停止させることなく、OSのパッチ適用やPostgres/PGDのメジャー/マイナーバージョンアップを1ノードずつ順次実施可能。
  • 厳格な分散一貫性の実現: Quorum Commitにより、金融や決済など不整合が許されないワークロードでもデータ不整合(スプリットブレイン)を起こさずに安全に処理。
  • データ主権と地域制限への適合: データの所在規制(GDPR、CCPA等)に準拠し、特定国のデータを国内に留めながらグローバルシステムを構築可能。
  • 大幅なコスト削減: 階層化ストレージにより、蓄積された履歴データを安価なオブジェクトストレージへオフロードすることで、高性能SSDと比較してストレージコストを最大 18分の1 に削減。
  • 運用の簡素化: Connection ManagerやRaftが組み込まれているため、PgBouncer、HARP、etcd などの外部ツールが不要。

4. バージョン 6.5.0 の新機能・変更点

  • マルチスレッド対応 Connection Manager:
    • エンジンがマルチスレッド化され、CPUコア数に応じて接続処理能力がスケーリング(bdr.conn_mgr_worker_threads で制御)。
    • ルーティングや設定更新が別スレッドで処理されるため、スループットが約2.4倍向上しレイテンシが低減。
    • PgBouncerスタイルの高速リセットモード(conn_mgr_server_reset_mode = fast)が追加され、トランザクションプーリングのスループットがさらに最大 60% 向上。
  • 組み込み監視Web UIおよびREST API(PGD Monitor):
    各ノードがバックグラウンドワーカーとして監視Web UIとJSON REST API(/api/v1/)を提供(bdr.monitor_enabled = on で有効化)。クラスタ概要、レプリケーション遅延、Raft状態、クエリ診断、エラーログなどをブラウザから確認可能。
  • Prometheus メトリクスエンドポイント:
    PGD MonitorがPrometheusテキスト形式の /metrics エンドポイントを標準公開。PGD固有の時系列データ、クラスタ状態、コミットレイテンシヒストグラム、Postgres統計情報をエクスポート可能。
  • レプリケーション遅延によるノード自動退出(Node Eviction):
    新しいグループオプション evict_node_action(part 等)と evict_node_lag_bytes により、ノードのレプリケーション遅延が設定閾値を超えた場合に自動で切り離し(part)を実行。WALの肥大化によるディスク枯渇障害を防止。
  • Quorum Commit のトランザクションストリーミング全モード対応:
    Quorum Commit がすべてのストリーミングモード(off, file, writer, auto)に対応。送信元で自動判別してファイルへストリーミングするため、特別な手動設定が不要に。
  • 新しい PGD CLI コマンドの追加:
    • pgd raft restore: 過半数のノードを喪失した際に、最小限のノード(Witnessノードを優先)を切り離してRaftコンセンサスを復旧するディザスタリカバリコマンド。
    • pgd node start / stop / restart: systemd を介さずに pg_ctl を使ってローカルのPostgresインスタンスを直接制御。
  • 分析ストレージ/カタログ設定の事前検証:
    bdr.alter_node_group_option() で analytics_storage_location や analytics_write_catalog を設定する際、指定先が有効かつ到達可能な読み書きパスであるかを自動検証。
  • コミット判定の追跡属性(is_raft)の追加:
    bdr.commit_decisions および bdr.bdr_get_commit_decisions() に is_raft カラムが追加され、Raft調整によるコミットか否かを判別可能に。
  • PostgreSQL 19 サポートに向けた準備:
    PGD 6.5.0 は PGD 6 シリーズの最終機能リリースであり、将来の「PGD 19」統合パッケージモデルへの移行に向けた基盤を整備。
  • PGD Essential (PGD-S) パッケージの統合(提供終了):
    独立した個別パッケージとしての「PGD Essential」が終了。標準の postgres_distributed リポジトリのパッケージへ統合。