page]pgpool-IIとはpgpool-IIはPostgreSQL専用のミドルウェアで、PostgreSQLのデータベースクライアントとPostgreSQLサーバの間に割り込む形で動作し、PostgrSQLに以下のような機能を追加します。コネクションプーリングPostgreSQLへの接続を保存しておき、同じ属性(ユーザ名、データベース、プロトコルバージョン)を持つ接続を受け付けたときに再利用することによってPostgreSQLへの接続オーバヘッドを低減し、システム全体のスループットを向上することができます。レプリケーションpgpool-IIは複数のPostgreSQLサーバを管理することができます。レプリケーション機能を使用することにより、物理的に2台以上のDBサーバにリアルタイムでデータを保存することができ、万が一どれかのDBサーバに障害が発生しても運用を継続することができます。負荷分散レプリケーションまたマスタースレーブモードで運用している場合、どのサーバに問い合わせても同じ結果が返ってきます。多数の検索リクエストをそれぞれのサーバで分担して負荷を軽減させ、システム全体の性能を向上させることができます。最良の場合にはサーバ台数に比例した性能向上が見込めます。多数のユーザが大量の問い合わせを投げるような環境で威力を発揮します。接続数の制限PostgreSQLに接続可能なセッション数には上限があり、それを超えて接続することはできません。言って、同時セッション数をむやみに多くすると、メモリーなどのリソースが多く消費されてパフォーマンスに影響があります。pgpool-IIでもクライアントからの接続数には上限がありますが、それを超えてもただちにエラーになることはなく、一定の間待たされるようになっています。したがって、pgpool-IIはPostgreSQLへの接続要求を実質的にキューイングし、PostgreSQLへの過大な接続数を制限することが可能です。パラレルクエリ複数のサーバにデータを分割して受け持たせ、それぞれのサーバに同時に検索問い合わせを投げて、問い合わせの処理時間を短縮するパラレルクエリが利用できます。大規模なデータベースに対して検索を実行するときに威力を発揮します。pgpool-IIはPostgreSQLバックエンドとフロントエンドの通信プロトコルを理解してその間を中継します。PostgreSQLのデータベースアプリケーションからはPostgreSQLサーバに、PostgreSQLからはデータベースアプリケーションに見えるように設計されています。そのため、PostgreSQLそのものはもちろん、アプリケーションの開発言語によらず、PostgreSQLのデータベースアプリケーションにほとんど手を加えることなく、pgpool-IIの機能が利用できます。一部のSQLには制限事項があります。pgpool-IIの稼働環境pgpool-IIは、Linuxをはじめ、SolarisやFreeBSDなどのほとんどのUNIX環境で動作します。Windowsでは動きません。対応するPostgreSQLのバージョンは、PostgreSQLの6.4以降です。7.4以降をお使いください。7.4より前のバージョンでは、使用できる機能に制限事項があります。そのような古いバージョンのPostgreSQLはそもそも使うべきではありません。pgpool-II配下で利用するPostgreSQLサーバのメジャーバージョンは一致していなければなりません。オンラインリカバリ機能を利用するときは、OSやハードウェアアーキテクチャを同じものにしなければなりません。Linux、Fedora、Debian用などが提供されています。該当リポジトリをチェックしてみてください。ダウンロードできます。pgpool-IIはlibpq(PostgreSQL付属のクライアントライブラリ)を使用するので、ビルドを行うマシン上にlibpqがインストールされていることが必要です。OpenSSLサポートを有効にする場合は、OpenSSLライブラリと開発用のヘッダーファイルが必要です。ballを展開したら、configureを実行します。./configureconfigureに指定できるオプションは以下です。--prefix=pathpgpool-II本体や関連ファイルをインストールするトップディレクトリを指定します。デフォルトは/usr/localです。レクトリを指定します。デフォルトはpg_configコマンドで取得できるパスです。--with-opensslpgpool-IIをOpenSSLサポート付で作成します。デフォルトではOpenSSLサポートは無効です。3.0シリーズ(3.0.4まで)互換のinsert_lockを使用します。pgpool-IIは、シーケンステーブルの行に対してロックを行います。8.2以降では使用できません。2.2と2.3シリーズ互換のinsert_lockを使用します。pgpool-IIは、挿入対象のテーブルに対してロックを行います。これは、ロックがVACUUMと競合するため非推奨です。8.0以降を使用している場合は、pgpool-IIが内部で使用するC関数pgpool_regclassをインストールします。この関数がインストールされていなくてもpgpool-IIは動作しますが、違うスキーマで同じテーブル名を定義していて、SQL文の中でスキーマ名を省略している場合に、不具合が生じることがあります(一時テーブルを除く)。したがって、可能ならばpgpool_regclassをインストールすることをお勧めします。このインストールは、pgpool-IIがアクセスする予定のすべてのPostgreSQLサーバで実施してください。template1pgpool-regclass.sqlの実行は、pgpool-II経由で利用するデータベース毎に必要になります。template1"を実行後に作成されたデータベースでは自動的にpgpool-regclass.sqlの内容が反映されているので、新たにpgpool-regclass.sqlを実行する必要はありません。insert_lockテーブルの作成レプリケーションモードでinsert_lockを利用したい場合は、排他制御用のテーブルpgpool_catalog.insert_lockを作成します。insert_lockテーブルが存在しなくても今のところinsert_lockは動作しますが、その場合は、挿入対象のテーブルに対してロックが行われます。2.2と2.3シリーズの動作と同じです。挿入対象のテーブルに対するロックは、VACUUMと競合してINSERT処理が長時間が待たされる可能性があります。したがって、insert_lockテーブルを作成することをお勧めします。テーブルの作成は、pgpool-IIがアクセスする予定のすべてのPostgreSQLサーバで実施してください。template1insert_lock.sqlの実行は、pgpool-II経由で利用するデータベース毎に必要になります。template1"を実行後に作成されたデータベースでは自動的にinsert_lock.sqlの内容が反映されているので、新たにinsert_lock.sqlを実行する必要はありません。makeをgmakeに読み替えてください)。/usr/local/etc/pcp.confです。必要な設定項目が異なります。必要(*1)パラレルクエリモードでは、レプリケーションまたは負荷分散を有効にする必要があります。分割して保存しているテーブルに対しては、レプリケーションならびに負荷分散の機能は使用されません。Replicationと併用するときにのみオンラインリカバリが可能です。(*3)単にpgpool-IIを経由して接続するだけのモードです。レプリケーションモードもマスタースレーブモードも有効にしていないときの動作です。PostgreSQLサーバへの接続セッション数を制限したり、2台以上のPostgreSQLサーバを用意してフェイルオーバ動作をさせたいときに利用します。pcp.confの設定どの動作モードでも、pcp.confの設定は必要です。ユーザ名とパスワードをpcp.confに登録します。$prefix/etc/pcp.confという名前でコピーします。$prefix/etc/pcp.confpcp.confでは空白行や#で始まる行はコメントと見なされます。ユーザとパスワードは、ユーザ名:[md5暗号化したパスワード]のように指定します。[md5暗号化したパスワード]は、$prefix/bin/pg_md5コマンドで作成できます。