主要なPostgreSQLクラスタ

2010年10月19日(火)

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クラスタを紹介します。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています