3. Streaming Replication

Streaming Replication(ストリーミング・レプリケーション)は、PostgreSQL本体がサポートした、最初のレプリケーションです。PostgreSQL 9.0で、リリースされました(関連URL)。Streaming Replicationがどのように動作するのかを調べることで、適用領域を理解できます。

Streaming Replicationは、PostgreSQLのHA機能として提案されました(関連URL)。

従来、組み込みのHA機能を持たないデータベースでは、第1回で紹介したような、共有ディスクを用いたコールド・スタンバイ型のクラスタが一般的でした。しかし、この方法は、障害の検出からデータベースの再起動までの時間が数分から十数分と長いのが欠点でした。共有ディスクが必須であることも、ハードウエア・コストを押し上げていました。

一方、PostgreSQLの機能だけでも、リカバリは可能です。図4は、その方法です。バックアップを取得し、バックアップ後にデータベースになされた変更のログも蓄積しておきます。クラッシュしたら、最初に取得したバックアップと、その後の変更データを使って、データベースの状態を復元します。

図4: PostgreSQL単体のリカバリ

2つのPostgreSQLデータベースを使えば、図5に示したように、更新ログの取得と、ログをバックアップに適用することが、同時並列に可能になります。こうすることで、スレーブ側のデータベースの状態を最新の状態に保つことができます。これが、Streaming Replicationです。マスターがクラッシュした場合でも、即座にスレーブに運転を切り替えることができます。

図5: WAL(Write Ahead Logging)を使ったレプリケーションの作成

現在リリースされているPostgreSQLのStreaming Replicationは、非同期型と呼ばれるものです。マスターで更新ログ(WAL)を作成した後で、これをスレーブに転送するようになっています。この間、わずかに時間差があるため、クラッシュする直前に作られたWALがスレーブに届かないというリスクは残ります。

スレーブ側は、常にデータベースのリカバリを実行していることになります。このままでは、スレーブ側でSQL文を処理することはできません。しかも、利用するWALはデータベースの格納構造そのものなので、マスターとスレーブのPostgreSQLは同一バージョンである必要があり、アーキテクチャも双方で同じでなければなりません。

4. Hot Standby

Hot Standbyは、Streaming Replicationと同時にPostgreSQL本体に採用された機能です。Streaming Replicationを行っている間でも、スレーブ側で参照用のSQLが使えるようにします(図6)。

Hot Standbyが動作しているスレーブでは、PostgreSQLの格納構造をそのまま適用しつづけているので、これと矛盾するような更新用のSQLを処理することはできません。しかし、データベースの内容を書き換えない参照用のSQL文は、処理が可能になります。

図6: Hot Standbyを使い、スレーブで参照SQLを処理

スレーブ側で参照SQLを処理することにより、マスターの負荷を軽減し、性能向上を図ることができます。

Streaming ReplicationによってWALがマスターからスレーブに送られ、これが実際にスレーブのデータベースに適用されるまでには、わずかな時間差があります。これが問題にならないような場合に使うとよいでしょう。

5. 第3回まとめ

今回は、代表的なPostgreSQLクラスタを紹介しました。可用性、性能、リカバリの点から、PostgreSQLをクラスタで利用するのは、もはや当然になってきています。一方、具体的なアプリケーションの要件によって、どのクラスタを使うべきかをきちんと選択することが重要です。

次回は、現在開発中のPostgres-XCクラスタを紹介します。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30