主要なPostgreSQLクラスタ

2010年10月19日(火)

はじめに

今回は、数多くのPostgreSQLクラスタから、代表的な4つのソフトを紹介します。

  1. Slony-I
  2. pgpool-II
  3. Streaming Replication
  4. Hot Standby

1. Slony-I

Slony-Iは、最も初期に開発されたPostgreSQLクラスタです。第1回の分類では、シングル・マスター型にあたります。開発したのは、PostgreSQLのコア・メンバーでもあるJan Wieck氏で、現在のバージョンは2.0.4です。

図1に、Slony-Iの動作概要を示します。Slony-Iでは、「トリガー」と呼ばれる手法を使っています。これは、テーブルの行を作成・更新・削除する場面で利用できます。行が作成・更新・削除される際に、特定の関数(トリガー)が呼び出されるようになっています。

図1: Slony-Iの動作原理

Slony-Iでは、テーブルのデータが変更される度に、変更内容をトリガーを使って別の専用テーブルに記録します(図中では「更新データ」)。更新データの書き込みは、元のトランザクションと同じトランザクションで実行します。このため、更新データの書き込みだけが失敗することはありません。元のテーブルの更新履歴と、この更新データの内容は、完全に一致します。

更新データは、専用のデーモン・プロセス(名称はslone)を使って、スレーブに送信されます。スレーブでは、専用のプロセス(名称はslonik)が、このデータを受信し、スレーブ側のテーブルのデータを更新します。

注目すべき点は、マスターからスレーブに送信されるテーブルの情報が、PostgreSQLの内部構造を使っておらず、テーブルの行データをテキスト形式で表したレベルになっていることです(すべてが必ずテキストというわけではありません)。

また、更新データは、すべてのテーブルに対して無条件に作るわけではありません。特定のテーブルのデータを選択して作ることが可能です。更新データの送信も、特定のテーブルだけを選択して行うことができます。

このような内部動作になっていることから、Slony-Iには、次のような特徴があります。

  1. マスターとスレーブで使用するPostgreSQLのバージョンを合わせる必要がありません。データベースのバイナリ・レベルでの互換性が必要ないので、双方のPostgreSQLのバージョンが違っていても動作します。スレーブのバージョンがマスターより古くなっていても構いません。
  2. 必要なテーブルの更新情報だけを選択し、複数のスレーブに対して送信できます。用途別に複数のデータベースを作成する場合でも、共通のデータはSlony-Iのマスターで管理しておき、これをそれぞれのアプリケーション用データベースに配信することができます。
  3. スレーブで動作しているPostgreSQLは、特別なものではありません。通常のSQL文を使ってデータを参照できます。例えば、上記の2. の場合のように、アプリケーションとして問題ないのであれば、スレーブ側で更新SQL文を実行することも自由にできます。
  4. マスターで作成される更新データは、元のテーブルの更新履歴と完全に一致しています。このため、たとえマスターがクラッシュしたとしても、その後にリカバリできれば、更新情報は欠けることなくスレーブに送信できます。現実的には、マスターで使用するストレージが十分に信頼できるものであれば、データベースが失われる可能性はほとんどありません。したがって、時間的なずれはあるものの、スレーブにはほぼ間違いなく更新データを届けることができます。

一方、以下の点も考慮する必要があります。

  1. マスターからスレーブへの更新データの転送は、マスター側でデータの更新が完了した少し後で実行されます。この時間は、ほとんどの場合(マスターとスレーブ双方の負荷の状態によります)は、実用上無視できる範囲(1秒以下)です。しかし、更新情報を参照可能になる時刻がマスターとスレーブで違っていては困るような場合は、注意が必要です。
  2. テーブル構造を変更した場合(例えば、行のカラムを追加した場合)や、新しくテーブルを作成した場合、この結果が自動的にスレーブに反映されることはありません。手動の操作が必要になります(現在、PostgreSQL本体で、テーブル構造を変更した際のトリガーを定義できるようにする計画があります。これをDDL(データ定義言語)トリガーと呼びます。DDLトリガーを用いれば、この制約を解決できる可能性があります)。

Slony-Iは、クラッシュしたマスターに代わってスレーブがデータベースを引き継いで運用できるHA(高可用性)機能として開発されました。しかし、このHA機能以外にも、共通データをまとめて管理して配布する、といった柔軟な使い方が可能です。

連載バックナンバー

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

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

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

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