Multigres v0.1 α版リリース、Postgres向け水平スケーリングOSの概要

Multigres v0.1 α版リリース、Postgres向け水平スケーリングOSの概要

Multigres v0.1 α版リリース、Postgres向け水平スケーリングOSの概要

2026年6月4日、SupabaseのチームがオープンソースプロジェクトMultigresの初のパブリックマイルストーンとなるv0.1 Alphaを公開した。このプロジェクトはPostgresにVitess級の水平スケーリング、高可用性、運用のシンプルさをもたらす「オペレーティングシステム」を目指している。

v0.1 Alphaでは高度なコネクションプーリング、自動フェイルオーバー、Kubernetesオペレーターが提供される。シャーディング機能は今後のリリースで追加予定だ。以下の記事ではその設計思想と仕組みを掘り下げる。

Multigresとは

従来のPostgres運用(手動管理)
・手動でレプリカを追加
・フェイルオーバーは運用者が判断
・コネクション制限への個別対処
・バックアップは別ツールで管理
Multigres導入後(自動運用OS)
・自動シャーディングで水平スケール
・自動フェイルオーバーでダウンタイム最小
・コンテキスト認識型コネクションプーリング
・バックアップとリストアを統合管理

MultigresはPostgresインスタンスを包括的に管理する「スケーラブルなオペレーティングシステム」だ。シャーディング、コネクションプーリング、自動フェイルオーバー、バックアップオーケストレーションを単一のシステムで提供する。

Postgresスケーリングの課題

Postgresを大規模に運用する際、読み取りレプリカの管理、フェイルオーバーの対応、コネクション上限対策、バックアップのスケジューリングなど、運用負荷が高い。これらをバラバラのツールで解決しようとすると、複雑さが増していく。

Multigresが解決すること

Multigresはこれらを一貫したシステムとして自動化する。データベースのスケールが必要になったタイミングでシャーディングも処理し、水平スケーリングを実現する。v0.1 Alphaではまだ単一シャードだが、基盤は整っている。

Kubernetesオペレーター

STEP 1 Kubernetesクラスタを準備
STEP 2 バックアップ保存先(共有ファイルシステムまたはS3)を設定
STEP 3 Multigresオペレーターのマニフェストを適用
STEP 4 3ノードのHAクラスタが自動起動

Kubernetesオペレーターによって、Multigresクラスタのデプロイと管理が抽象化される。必要なのはKubernetesクラスタとバックアップ用のストレージ(共有ファイルシステムやAWS S3バケット)だけだ。ローカルのKindクラスタでも動作検証が可能で、必要なコンテナイメージはすべて公開されている。

高可用性(HA)の仕組み

スプリットブレインが発生した場合(従来の手法)
課題 2つのノードが同時にプライマリを主張
データの不整合やコミット消失のリスク
Multigresの一般化合意モデル(After)
解決 コミット成功済みのデータを失わずに統一的に解決
耐久性ポリシーをユーザーが自由に定義可能

MultigresはHAを合意形成の問題として扱い、スプリットブレインが起きてもコミット済みデータを失わない。これを一般化合意(generalized consensus)モデルで実現している。これは従来のコンセンサスベースシステムにはない柔軟性をもたらす。

一般化合意モデル

Multigresは無修正のPostgresレプリケーションの上に実装されており、厳密な一貫性要件を満たす。さらに、過半数のクォーラムのような制約に縛られず、ユーザーが任意の耐久性ポリシーを定義できる。例えば「単一のアベイラビリティゾーン(AZ)障害に耐える」を設定すれば、それ以上のゾーンにスタンバイを配置することも可能だ。

レプリカの動的追加と削除

クラスタ稼働中にレプリカを安全に増減できる。パフォーマンスに影響を与えず、設定された耐久性ポリシーと整合性を保ったままスケーリングが可能だ。

コネクションプーリングの革新

クライアント multigateway(接続受付&ルーティング)
multipooler(バックエンド接続管理) Postgresプライマリ Postgresレプリカ

Multigresは独自の2サービスアーキテクチャによるコネクションプーリングを採用している。クライアント接続を受け付ける「multigateway」と、バックエンド接続を管理する「multipooler」で構成され、単一プロセスのプーラーにはない利点がある。

トラフィックルーティングとフェイルオーバー

HAシステムとの統合により、multigatewayは常に現在のプライマリに透過的に接続を転送する。フェイルオーバー発生時は新しいプライマリが昇格するまでリクエストを保留し、エラーを最小化する。読み取り負荷は複数レプリカに分散可能で、将来的にはシャード間のルーティングにも対応予定だ。

コンテキストアウェアプーリング

Multigresはトランザクションやセッションといったプーリングモードを明示的に選択する必要がない。組み込みのパーサーが各リクエストの効果を理解し、接続状態を追跡する。ステートフルなトランザクションが必要な場合だけ接続をそのクライアントに固定し、それ以外は再利用する。

ユーザー別プールとプリペアドステートメント

ユーザーごとに独立したコネクションプールを保持し、SET ROLEによるなりすましを使わない。固定の接続予算をフェアシェアアルゴリズムで分配する。さらに、プリペアドステートメントはゲートウェイ間で重複排除され、Postgres側で文の解析、計画、キャッシュが1回だけ行われる。

バックアップ戦略

完全バックアップデータディレクトリ全体のチェックポイント時コピー
差分バックアップ前回の完全バックアップ以降の変更ファイルを保存
増分バックアップ前回のバックアップ(完全または増分)からの変更のみ保存

MultigresはバックアップにpgBackRestを使用し、プライマリに負荷をかけないようレプリカから取得する。バックアップの種類は完全、増分、差分の3つで、通常は定期的な完全バックアップと短い間隔の増分・差分を組み合わせる。

オンデマンドとスケジュール

CLIでバックアップの一覧表示や手動バックアップ、リストアが可能だ。スケジュール機能は今後のクラスタスペックを通じて追加予定となっている。

クラスターブートストラップ

クラスタ起動時にMultigresが自動的にプライマリを特定し、バックアップを取得して他のレプリカを初期化する。これにより人手を介さずに即座に利用可能なクラスタが立ち上がる。

アルファ版の制限と今後の展望

v0.1 アルファ版の制限
・シャーディング未実装(単一シャードのみ)
・既知の課題がGitHubイシューにあり
・将来バージョンとの後方互換性は保証されない
・CR APIが安定していない
・パフォーマンスベンチマーク未公開
今後の展開
・シャーディング機能の実装(主力機能)
・スケジュールバックアップのサポート
・APIの安定化とベンチマークの公開
・コミュニティからのフィードバック集約

v0.1 Alphaは実験とフィードバックに十分な安定性を持つが、本番運用にはまだ適さない。シャーディングは今後のリリースで追加予定の主力機能であり、現在はHAとプーリングを備えた単一シャードクラスタの形で提供されている。ベータやv1.0に向けてAPIの安定化とベンチマークの公開が進められる見通しだ。

この記事のポイント

  • MultigresはPostgresのスケーリングと運用を自動化するオープンソースOS
  • v0.1 AlphaでKubernetesオペレーター、HA、高度なコネクションプーリングを提供
  • 一般化合意モデルによりスプリットブレインを安全に解決
  • コンテキストアウェアプーリングでモード選択不要、ユーザー別プールも実装
  • シャーディングは将来リリース予定、現在はフィードバック収集段階
海田 洋祐

・ 複数業界における17年間のデジタルビジネス開発経験 ・ ウェブサイト開発のためのHTML、PHP、CSS、Java等の実用的知識 ・ 15ヶ国語対応の多言語SaaSの開発経験 ・ 17年間にも及ぶ、Eコマース長期運営経験 ・ 幅広い業界でのSEO最適化の豊富な経験

メッセージを残す