Pgpool-IIとは?

Pgpool-IIは、PostgreSQLサーバとPostgreSQLデータベースクライアントの間に位置するプロキシソフトウェアです。 以下のような機能を提供します。

コネクションプーリング

Pgpool-IIは、PostgreSQLサーバへの確立された接続を維持し、プロパティ(つまりユーザ名、データベース、プロトコルバージョン、他に指定されていれば接続パラメータも)が同じ新規のコネクションが到着する度に再利用します。 コネクションオーバヘッドを軽減することによって、システム全体のスループットを改善します。

負荷分散

(レプリケーションモードあるいはマスタースレーブモードで動作しているので)データベースがレプリケーションされている場合は、どのサーバにSELECTを発行しても同じ結果が得られます。 Pgpool-IIは、個々のPostgreSQLサーバの負荷を軽減するために、レプリケーションを利用します。 SELECTクエリをサーバに分散させ、システム全体のスループットを改善します。 理想的には、PostgreSQLサーバの数に比例して検索性能が向上します。 多数のユーザが検索のみのクエリを同時に発行するようなシナリオで、負荷分散は最大の効果を発揮します。

自動フェイルオーバ

データベースサーバのどれかがダウンしたり、到達できなくなったときは、Pgpool-IIはそのサーバを切り離し、残ったサーバで運用を継続します。 自動フェイルオーバの助けになるような、タイムアウト、リトライといった洗練された機能もあります。

オンラインリカバリ

Pgpool-IIはコマンド一つでデータベースノードのオンラインリカバリができます。 自動フェイルオーバと組み合わせることで、フェイルオーバにより切り離されたノードをスタンバイとして自動で復帰させることも可能です。 新しいPostgreSQLサーバを同期しノードとして追加することもできます。

レプリケーション

Pgpool-IIは複数のPostgreSQLサーバを管理することができます。 レプリケーション機能を有効にすることにより、2つあるいはそれ以上のPostgreSQLクラスタのリアルタイムバックアップを作成できます。 これによって、クラスタの一つがダウンしても、中断なしにサービスを継続できます。 Pgpool-IIには、組み込みレプリケーション(ネィティブレプリケーション)機能があります。 しかし、PostgreSQLのストリーミングレプリケーションのような、外部のレプリケーション機能を使うこともできます。

限度を超えた接続の制限

PostgreSQLへの最大同時接続数には制限があり、その制限に達すると新しいコネクションは拒否されます。 最大接続数を大きくすると、リソースの消費が増え、システム全体の性能に悪影響があります。 Pgpool-IIにも最大接続数の制限があります。 しかし、制限を超えた接続要求はすぐにエラーが返るのではなく、待ち行列に入ります。 ただし、制限を超えた接続要求に対してエラーを返すように設定することも可能です(4.1 以降)。

Watchdog

Watchdogは、複数のPgpool-IIを協調させて動作させることにより、単一障害点やスプリットブレインの起きない堅牢なクラスタを運用することが可能です。 スプリットブレインを防ぐためには、少なくとも3台のPgpool-IIノードが必要です。 他のPgpool-IIの死活監視を行い、障害を検出することができます。 稼働系のPgpool-IIがダウンしても、待機系のPgpool-IIが稼動系に昇格し、仮想IPを引き継ぐことができます。

インメモリキャッシュ

SELECT文とその検索結果をキャッシュに保存できます。同じSELECT文が発行された場合、Pgpool-IIはキャッシュから結果を返します。 SQLの解析もPostgreSQLへのアクセスも行われないため、インメモリキャッシュの利用は非常に高速です。 反面、キャッシュを保存するオーバヘッドが生じるので、通常の方法より遅くなる場合もあります。

Pgpool-IIは、PostgreSQLのバックエンドフロントエンドプロトコルを理解し、バックエンドとフロントエンドの間でメッセージを転送します。 つまり、データベースアプリケーション(フロントエンド)にはPgpool-IIが実際のPostgreSQLサーバであるように見えます。 サーバ(バックエンド)には、Pgpool-IIがフロントエンドであるように見えます。 Pgpool-IIは、サーバとクライアントに対して透過なので、既存のデータベースアプリケーションは、ソースコードに変更を加えることなくPgpool-IIを利用できます。

Pgpool-II は、Linuxをはじめ、SolarisやFreeBSDなどのほとんどのUNIX環境で動作します。 Windows では動きません。 対応するPostgreSQLのバージョンは、7.4 以降です。 Pgpool-II配下で利用するPostgreSQLサーバのメジャーバージョン、 OS やハードウェアアーキテクチャを同じものにしなければなりません。 また、バージョンが同じであっても、PostgreSQL のビルド方法が違うものを混ぜている場合の動作は保証できません。 たとえば、SSL サポートの有無、日付型の実装方法 (--disable-integer-datetimes)、ブロックサイズの違いなどは、Pgpool-IIの一部の機能に影響を与えるでしょう。 PostgreSQL のマイナーバージョンが違う場合は大抵の場合問題になりませんが、 すべてのPostgreSQLのマイナーバージョンを検証したわけではないので、 できればマイナーバージョンを合わせておくことをお勧めします。

Pgpool-IIでSQLを使うにあたっては、制限事項があります。 詳細は制限事項をご覧ください。