PR

主要な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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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