Last modified: Fri Apr 20 15:56:23 JST 2012
Welcome to pgpool -II 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以降です。ただしパラレルクエリモードを使用するときはPostgreSQL 7.4以降をお使いください。 また、PostgreSQL 7.4より前のバージョンでは、使用できる機能に制限事項があります。 もっとも、そのような古いバージョンのPostgreSQLはそもそも使うべきではありません。

pgpool-II配下で利用するPostgreSQLサーバのメジャーバージョンは一致していなければなりません。 また、オンラインリカバリ機能を利用するときは、OSやハードウェアアーキテクチャを同じものにしなければなりません。

pgpool-IIのインストール

Linux用のRPMパッケージは、CentOS、RedHat Enterprise Linux、Fedora、Debian用などが提供されています。 該当リポジトリをチェックしてみてください。

pgpool-II のソースコードはpgpool開発ページ からダウンロードできます。

pgpool-IIのソースコードからのインストールには、gcc 2.9以上、およびGNU makeが必要です。 また、pgpool-IIはlibpq(PostgreSQL付属のクライアントライブラリ)を使用するので、ビルドを行うマシン上にlibpqがインストールされていることが必要です。 また、OpenSSLサポートを有効にする場合は、OpenSSLライブラリと開発用のヘッダーファイルが必要です。

configureの実行

ソースコードのtar ballを展開したら、configureを実行します。

./configure
configureに指定できるオプションは以下です。
  • --prefix=path
    pgpool-II本体や関連ファイルをインストールするトップディレクトリを指定します。 デフォルトは/usr/localです。
  • --with-pgsql=path
    PostgreSQLのクライアントライブラリなどがインストールされているトップディ レクトリを指定します。デフォルトはpg_configコマンドで取得できるパスです。
  • --with-openssl
    pgpool-IIをOpenSSLサポート付で作成します。 デフォルトではOpenSSLサポートは無効です。
  • --enable-sequence-lock
    pgpool-II 3.0シリーズ(3.0.4まで)互換のinsert_lockを使用します。 pgpool-IIは、シーケンステーブルの行に対してロックを行います。 これは、2011年06月より後にリリースされたPostgreSQL 8.2以降では使用できません。
  • --enable-table-lock
    pgpool-II 2.2と2.3シリーズ互換のinsert_lockを使用します。 pgpool-IIは、挿入対象のテーブルに対してロックを行います。 これは、ロックがVACUUMと競合するため非推奨です。

makeの実行

make
make install

pgpool_regclassのインストール

PostgreSQL 8.0以降を使用している場合は、pgpool-IIが内部で使用するC関数pgpool_regclassをインストールします。 この関数がインストールされていなくてもpgpool-IIは動作しますが、違うスキーマで同じテーブル名を定義していて、SQL文の中でスキーマ名を省略している場合に、不具合が生じることがあります(一時テーブルを除く)。 したがって、可能ならばpgpool_regclassをインストールすることをお勧めします。 このインストールは、pgpool-IIがアクセスする予定のすべてのPostgreSQLサーバで実施してください。

cd pgpool-II-x.x.x/sql/pgpool-regclass
make
make install
psql -f pgpool-regclass.sql template1
pgpool-regclass.sqlの実行は、pgpool-II経由で利用するデータベース毎に必要になります。 ただし、"psql -f pgpool-regclass.sql template1"を実行後に作成されたデータベースでは自動的にpgpool-regclass.sqlの内容が反映されているので、新たにpgpool-regclass.sqlを実行する必要はありません。

insert_lockテーブルの作成

レプリケーションモードでinsert_lockを利用したい場合は、排他制御用のテーブルpgpool_catalog.insert_lockを作成します。 insert_lockテーブルが存在しなくても今のところinsert_lockは動作しますが、その場合は、挿入対象のテーブルに対してロックが行われます。これはpgpool-II 2.2と2.3シリーズの動作と同じです。挿入対象のテーブルに対するロックは、VACUUMと競合してINSERT処理が長時間が待たされる可能性があります。 したがって、insert_lockテーブルを作成することをお勧めします。 テーブルの作成は、pgpool-IIがアクセスする予定のすべてのPostgreSQLサーバで実施してください。

cd pgpool-II-x.x.x/sql
psql -f insert_lock.sql template1
insert_lock.sqlの実行は、pgpool-II経由で利用するデータベース毎に必要になります。 ただし、"psql -f insert_lock.sql template1"を実行後に作成されたデータベースでは自動的にinsert_lock.sqlの内容が反映されているので、新たにinsert_lock.sqlを実行する必要はありません。

以上でインストールが完了します(GNU makeが必要なので、SolarisやFreeBSDなどでは makeをgmakeに読み替えてください)。

pgpool-IIの設定

pgpool-IIの設定ファイルはデフォルトでは/usr/local/etc/pgpool.confおよび /usr/local/etc/pcp.confです。pgpool-IIは動作モードによって使用できる機能と、 必要な設定項目が異なります。

使用できる機能/モード rawモード(*3) レプリケーションモード マスタスレーブモード パラレルクエリモード
コネクションプーリング ×
レプリケーション × × △(*1)
負荷分散 × △(*1)
フェイルオーバ ×
オンラインリカバリ × △(*2) ×
パラレルクエリ × × ×
サーバ台数 1以上 2以上 2以上 2以上
システムDB 不要 不要 不要 必要

  • (*1)パラレルクエリモードでは、レプリケーションまたは負荷分散を有効にする必要があります。 ただし、分割して保存しているテーブルに対しては、レプリケーションならびに負荷分散の機能は使用されません。
  • (*2)マスタースレーブモードでは、Streaming Replicationと併用するときにのみオンラインリカバリが可能です。
  • (*3)単にpgpool-IIを経由して接続するだけのモードです。 レプリケーションモードもマスタースレーブモードも有効にしていないときの動作です。 PostgreSQLサーバへの接続セッション数を制限したり、2台以上のPostgreSQLサーバを用意してフェイルオーバ動作をさせたいときに利用します。

pcp.confの設定

どの動作モードでも、pcp.confの設定は必要です。pgpool-IIには管理者がpgpool-IIの 停止や情報取得などの管理操作を行うためのインターフェイスが用意されていま す。そのインターフェイスを利用するためにはユーザ認証が必要になるので、そ のユーザ名とパスワードをpcp.confに登録します。 pgpool-IIをインストールすると、$prefix/etc/pcp.conf.sampleができるので、それを $prefix/etc/pcp.confという名前でコピーします。

cp $prefix/etc/pcp.conf.sample $prefix/etc/pcp.conf

pcp.confでは空白行や#で始まる行はコメントと見なされます。 ユーザとパスワードは、

ユーザ名:[md5暗号化したパスワード]

のように指定します。 [md5暗号化したパスワード]は、$prefix/bin/pg_md5コマンドで作成できます。

./pg_md5 foo
acbd18db4cc2f85cedef654fccc4a4d8

パスワードを引数に渡したくない場合は pg_md5 -p を実行してください。

./pg_md5 -p
password: <パスワードを入力>

pcp.confは、pgpool-IIを動作させるユーザIDで読み取り可能になっていなければ なりません。

pgpool.confの設定

サンプルファイル

pgpool-IIをインストールすると、インストール先ディレクトリ(デフォルトでは/usr/local)/etc/pgpool.conf.sampleができるので、それを インストール先ディレクトリ/etc/pgpool.confという名前でコピーします。

cp インストール先ディレクトリ/etc/pgpool.conf.sample $prefix/etc/pgpool.conf

また、各動作モード用のサンプルpgpool.confが用意されています。 こちらもご利用下さい。

動作モード サンプルファイル名
レプリケーションモード pgpool.conf.sample-replication
マスタースレーブモード(Slony-I) pgpool.conf.sample-master-slave
マスタースレーブモード(Streaming replication) pgpool.conf.sample-stream

コメントの扱い

pgpool.confでは空白行や#で始まる行はコメントと見なされます。

共通設定項目

各動作モードで共通する設定項目を説明します。

listen_addresses

pgpool-IIがTCP/IPコネクションを受け付けるアドレスをホスト名またはIPアドレスで 指定します。「*」を指定するとすべてのIPインタフェースからのコネクショ ンを受け付けます。「''」を指定するとTCP/IPコネクションを受け付けま せん。デフォルト値は「localhost」です。 UNIXドメインソケット経由のコネクションは常に受け付けます。このパラメー タを変更した時には pgpool-II を再起動してください。

port

pgpool-IIがコネクションを受け付けるポート番号です。デフォルト値は9999 です。 このパラメータを変更した時には pgpool-II を再起動してください。

socket_dir

pgpool-IIがコネクションを受け付けるUNIXドメインソケットを置くディレクトリです。 デフォルト値は'/tmp'です。 このソケットは、cronによって削除されることがあるので注意してください。 '/var/run'などのディレクトリに変更することをお勧めします。 このパラメータを変更した時には pgpool-II を再起動してください。

pcp_port

pcpが使用するポート番号です。 このパラメータを変更した時には pgpool-II を再起動してください。

pcp_socket_dir

pcpがコネクションを受け付けるUNIXドメインソケットを置くディレクトリです。 デフォルト値は'/tmp'です。 このソケットは、cronによって削除されることがあるので注意してください。 '/var/run'などのディレクトリに変更することをお勧めします。 このパラメータを変更した時には pgpool-II を再起動してください。

backend_socket_dir
DEPRECATED

このパラメータは、libpqのポリシーに合わせて削除されます。 代わりにbackend_hostnameパラメータを使ってください。

UNIXドメインソケット経由でpgpool-IIがPostgreSQLと接続する際に使用する PostgreSQLのUNIXドメインソケットが置かれているディレクトリです。デフォルト値は/tmpです。 このパラメータを変更した時には pgpool-II を再起動してください。

pcp_timeout

pcpがpgppoolと接続する際のタイムアウト値。0にするとタイムアウトしません。 デフォルト値は10(秒)です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

num_init_children

preforkするpgpool-IIのサーバプロセスの数です。デフォルト値は32になっています。 これが、pgpool-IIに対してクライアントが同時に接続できる上限の数になります。 これを超えた場合は、そのクライアントは、pgpool-IIのどれからのプロセスへのフロントエンドの接続が終了するまで待たされます(PostgreSQLと違ってエラーになりません)。 待たされる数の上限は、2*num_init_children です。 基本的に後述のmax_pool*num_init_children分だけPostgreSQLへのコネクションが張られますが、他に以下の考慮が必要です。

  • 問い合わせのキャンセルを行うと通常のコネクションとは別に新たなコネクションが張られます。 したがって、すべてのコネクションが使用中の場合は問い合わせのキャンセルができなくなってしまうので、ご注意下さい。 問い合わせのキャンセルを必ず保証したい場合は、想定されるコネクション数の倍の値を設定することをおすすめします。
  • 一般ユーザでPostgreSQLに接続できるのは、max_connections - superuser_reserved_connections 分だけです。

以上をまとめると、

max_pool*num_init_children <= (max_connections - superuser_reserved_connections) (クエリのキャンセルを考慮しない場合)
max_pool*num_init_children*2 <= (max_connections - superuser_reserved_connections) (クエリのキャンセルを考慮する場合)
のどちらかを満たすように設定してください。

このパラメータを変更した時には pgpool-II を再起動してください。

child_life_time

pgpool-IIの子プロセスの寿命です。アイドル状態になってから child_life_time秒経過すると、一旦終了して新しいプロセスを起動します。 メモリーリークその他の障害に備えた予防措置です。child_life_timeのデ フォルト値は300秒、すなわち5分です。0を指定するとこの機能は働きませ ん(すなわち起動しっ放し)。なお、まだ一度もコネクションを 受け付けていないプロセスにはchild_life_timeは適用されません。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

child_max_connections

各pgpool-II子プロセスへの接続回数がこの設定値を超えると、その子プロ セスを終了します。child_life_timeやconnection_life_timeが効かないく らい忙しいサーバで、PostgreSQLバックエンドが肥大化するのを防ぐのに 有効です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

client_idle_limit

前回クライアントから来たクエリから、client_idle_limit 秒越えても次の クエリが届かない場合は、クライアントへの接続を強制的に切断し、クライ アントからの次のコネクションを待つようにします。 この設定は、だらしないクライアントプログラムや、クライアントとpgpoolの間のTCP/IPコネクションが不調なことによって、pgpoolの子プロセスが占有されてしまう問題を回避するのに役立ちます。 デフォルト値は 0(無効)です。このパラメータは、オンラインリカバリのセカンドステージでは無視されます。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

authentication_timeout

認証処理のタイムアウト時間を秒単位で指定します。0 を指定するとタイ ムアウトを無効にします。authentication_timeout のデフォルト値は 60 です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

logdir

このディレクトリ下に、pgpool-IIのDBノードの状態を記録するpgpool_statusファイルが書かれます。

log_destination

pgpool-IIは、stderrかsyslogのどちらかにログを書くことができます。デフォルトはstderrです。

注意:syslogを使う場合は、syslogデーモンの設定を変更する必要があります。 Note: you will need to alter the configuration of your system's syslog daemon in order to make use of the syslog option for log_destination. pgpool-IIは、syslog ファシリティ LOCAL0 から LOCAL7 までにログを書くことができます (syslog_facilityをご覧ください)。 しかし、ほとんどのデフォルトのsyslog設定は、そのようなメッセージを廃棄してしまいます。 そこで、syslogデーモンの以下のような設定が必要になります。

	local0.*    /var/log/pgpool.log
	

syslog_facility

syslogが有効な場合、このパラメータによってsyslogの「ファシリティ」を設定します。 LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7から選択します。 デフォルトは LOCAL0 です。 併せてsyslogデーモンのドキュメントもご覧ください。

syslog_ident

syslogが有効な場合、このパラメータによってsyslogのメッセージにあらわれるプログラム名を設定します。デフォルトは"pgpool"です。

pid_file_name

pgpool-IIのpid file(プロセスIDを格納したファイル)のフルパス名です。 デフォルト値は'/var/run/pgpool/pgpool.pid'です。 このパラメータを変更した時には pgpool-II を再起動してください。

print_timestamp

trueならばpgpool-IIのログにタイムスタンプを追加します。デフォルトは trueです。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

connection_cache

trueならPostgreSQLへのコネクションをキャッシュします。デフォルトはtrueです。 このパラメータを変更した時には pgpool-II を再起動してください。

health_check_timeout

pgpool-IIはサーバ障害やネットワーク障害を検知するために、定期的にバッ クエンドに接続を試みます。これを「ヘルスチェック」と言います。障害 が検知されると、フェイルオーバや縮退運転を試みます。 この パラメータは、ネットワークケーブルが抜けた際などにヘルスチェッ クが長時間待たされるのを防ぐためのタイムアウト値を秒単位で指定しま す。デフォルトは20秒です。0を指定するとタイムアウト処理をしません (すなわち TCP/IP のタイムアウトまで待つことになります)。 なお、ヘルスチェックを有効にすると、ヘルスチェックのための余分の接 続が1つ必要になりますので、PostgreSQLのpostgresql.confの設定項目の max_connectionsを少くとも1増やすようにしてください。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_period

ヘルスチェックを行う間隔を秒単位で指定します。0を指定するとヘルス チェックを行いません。デフォルトは0です(つまりヘルスチェックを行い ません)。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_user

ヘルスチェックを行うためのPostgreSQLユーザ名です。 このユーザ名はPostgreSQLに登録済みでなければなりません。 さもないと、ヘルスチェックがエラーとなります。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_password

このパラメータはまだ実装されていません。 ヘルスチェックを行うためのPostgreSQLパスワードです。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

failover_command

ノードが切り離された時に実行するコマンドを指定します。特殊文字を指定す ると、pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d切り離されたノード番号
%h切り離されたノードのホスト名
%H新しいマスターのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

フェイルオーバー時には、pgpoolはまず子プロセスを切断します(結果として、すべてのセッションが切断されます)。次に、pgpoolはフェイルオーバコマンドを実行し、その完了を待ちます。 そのあとで新しいpgpoolの子プロセスが起動され、クライアントからの接続を受け付けられる状態になります。

failback_command

ノードが復帰した時に実行するコマンドを指定します。特殊文字を指定すると、 pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d復帰したノード番号
%h復帰したノードのホスト名
%p復帰したノードのポート番号
%D復帰したノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%H新しいマスターのホスト名
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

follow_master_command

マスターノードのフェイルオーバー後に実行するコマンドを指定します。 これは、マスタースレーブモードでストリーミングレプリケーション構成の場合のみ有効です。 特殊文字を指定すると、pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d切り離されたノード番号
%h切り離されたノードのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%H新しいマスターのホスト名
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

空文字列以外を指定すると、マスターノードのフェイルオーバー後に新しいマスター以外のすべてのノードは切り離され、クライアントから再び接続を受け付けるために子プロセスの再起動が行われます。その後、切り離されたそれぞれのノードに対してfollow_master_commandに指定したコマンドが実行されます。通常は、ここにpcp_recovery_nodeコマンドを組み込んだシェルスクリプトなどを指定し、新しいマスターからスレーブをリカバリするために使用します。

fail_over_on_backend_error

trueならば、バックエンドのソケットへの書き込みに失敗するとフェイルオーバします。 これはpgpool-II 2.2.xまでの挙動と同じです。 falseにすると、フェイルオーバせず、単にエラーがレポートされてセッションが切断されます。 このパラメータをfalseにする場合には、health checkを有効にすることをお勧めします。 なお、このパラメータがfalseの場合でも、クライアントがpgpoolに接続する際にバックエンドへの接続に失敗した場合、あるいはバックエンドがシャットダウンされたことをpgpool-IIが検知した場合にはフェイルオーバが起きることに注意してください。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

ignore_leading_white_space

trueならば、load balanceの際にSQL文行頭の空白を無視します(全角ス ペースは無視されません)。これは、DBI/DBD:Pgのように、勝手に行頭にホ ワイトスペースを追加するようなAPIを使い、ロードバランスしたいときに 有効です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_statement

trueならばSQL文をログ出力します。この役目はPostgreSQLの log_statementオプションと似ていて、デバッグオプションがないときでも 問い合わせをログ出力して調べることができるので便利です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_per_node_statement

log_statementと似ていますが、DBノード単位でログが出力されるので、レプリケーションや負荷分散の確認が容易です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_hostname

trueならば、psコマンドでの状態表示時にIPアドレスではなく、ホスト名 を表示します。また、log_connectionsが有効な場合にはログにホスト名を 出力します。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_connections

trueならば、全てのクライアント接続をログへ出力します。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

enable_pool_hba

trueならば、pool_hba.confに従ってクライアント認証を行います。 詳細はクライアント認証(HBA)のためのpool_hba.conf設定 方法を参照してください。 このパラメータを変更した時には pgpool-II を再起動してください。

backend_hostname

使用するPostgreSQLサーバのホスト名を指定します。 pgpool-IIは、このホスト名を使ってPostgreSQLと通信します。

TCP/IPを使用する場合、ホスト名またはIPアドレスを指定できます。 "/"で始まる文字列を指定すると、TCP/IPではなく、UNIXドメインソケットを使用され、 ディレクトリ名とみなしてそこにソケットファイルが作成されることになります。 空文字('')を指定すると、/tmp下に作成したUNIXドメインソケットで接続します。

実際には、"backend_hostname"の後に0, 1, 2...と数字を付加して使用する複数 のPostgreSQLを区別します(たとえばbackend_hostname0)。 この数字のことを「DBノードID」と呼び、0から開始します。 DBノードID == 0のPostgreSQLは、特別に「マスターDB」と呼ばれます。 複数のDBノードを運用している場合、条件によってはマスターDBがダウンしても 運用を続けることができます。この場合は、稼働中かつDBノードIDがもっとも 若いものが新しいマスターDBになります。

ただし、ストリーミングレプリケーションモードで運用している場合は、DBノードIDが0のノードには特別な意味はなく、プライマリノードかどうかが問題になります。 詳細はStreaming Replicationへの対応をご覧ください。

1台しかPostgreSQLを使用しない場合は、"backend_hostname0"としてください。

backend_hostname は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_port

使用するPostgreSQLサーバのポート番号を指定します。 実際には、"backend_port"の後に0, 1, 2...とDBノードIDを付加して使用する複数 のPostgreSQLを区別します。1台しかPostgreSQLを使用しない場合は、 "backend_port0"としてください。

backend_port は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_weight

使用するPostgreSQLサーバに対する負荷分散の比率を0以上の整数または浮動小数点で指定します。 "backend_weight"の後には、DBノードIDを付加して使用する複数のPostgreSQLを区別します。 1台しかPostgreSQLを使用しない場合は、"backend_weight0"としてください。 負荷分散を使用しない場合は、「1」を設定してください。

backend_weight は新しく追加した行を設定ファイル再読み込みで追加することができます。 pgpool-II 2.2.6/2.3以降では、設定ファイルの再読込でbackend_weight値を変更できます。 新しく接続したクライアントセッションから、この新しいweight値が反映されます。 マスタースレーブモードにおいて、あるスレーブに対して管理業務を実施する都合上、問い合わせがそのスレーブに送られるのを防ぎたい場合に有用です。

backend_data_directory

使用する PostgreSQL サーバのデータベースクラスタのパスを指定します。 実際には、"backend_data_directory"の後にDBノードIDを付加して使用する複 数のPostgreSQLを区別します。 このパラメータはオンラインリカバリの際に使用します。オンラインリカバリ を使用しない場合には設定する必要はありません。

backend_data_directory は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_flag

バックエンド単位での様々な挙動を制御するフラグです。 実際には、"backend_flag"の後に数字を付けて、どのバックエンドのフラグか指定します。例: backend_flag0 複数のフラグを"|"で連結して指定することができます。 現在以下のものがあります。

ALLOW_TO_FAILOVER
フェイルオーバやデタッチが可能になります。これがデフォルトの動作です。 DISALLOW_TO_FAILOVERと同時には指定できません。
DISALLOW_TO_FAILOVER
フェイルオーバやデタッチが行われません。 HheartbeatやPacemakerなどのHA(High Availability)ソフトでバックエンドを二重化しているなどの事情で、 pgpool-II側でフェイルオーバの制御をして欲しくないときなどに指定します。 ALLOW_TO_FAILOVERと同時には指定できません。

このパラメータを変更した時には pgpool-II を再起動してください。

ssl

trueならばpgpool-IIとフロントエンド、pgpool-IIとバックエンドの間のSSL接続が可能になります。 なお、pgpool-IIとフロントエンドの接続にSSLが利用できるためには、ssl_keyssl_certが設定されてなければなりません。

(%s%I!"pgp$G$OL5;k$5$l$^$9!# このパラメータを変更した時には設定ファイルを再読み込みしてください。

authentication_timeout

認証処理のタイムアウト時間を秒単位で指定します。0 を指定するとタイ ムアウトを無効にします。authentication_timeout のデフォルト値は 60 です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

logdir

このディレクトリ下に、pgpool-IIのDBノードの状態を記録するpgpool_statusファイルが書かれます。

log_destination

pgpool-IIは、stderrかsyslogのどちらかにログを書くことができます。デフォルトはstderrです。

注意:syslogを使う場合は、syslogデーモンの設定を変更する必要があります。 Note: you will need to alter the configuration of your system's syslog daemon in order to make use of the syslog option for log_destination. pgpool-IIは、syslog ファシリティ LOCAL0 から LOCAL7 までにログを書くことができます (syslog_facilityをご覧ください)。 しかし、ほとんどのデフォルトのsyslog設定は、そのようなメッセージを廃棄してしまいます。 そこで、syslogデーモンの以下のような設定が必要になります。

	local0.*    /var/log/pgpool.log
	

syslog_facility

syslogが有効な場合、このパラメータによってsyslogの「ファシリティ」を設定します。 LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7から選択します。 デフォルトは LOCAL0 です。 併せてsyslogデーモンのドキュメントもご覧ください。

syslog_ident

syslogが有効な場合、このパラメータによってsyslogのメッセージにあらわれるプログラム名を設定します。デフォルトは"pgpool"です。

pid_file_name

pgpool-IIのpid file(プロセスIDを格納したファイル)のフルパス名です。 デフォルト値は'/var/run/pgpool/pgpool.pid'です。 このパラメータを変更した時には pgpool-II を再起動してください。

print_timestamp

trueならばpgpool-IIのログにタイムスタンプを追加します。デフォルトは trueです。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

connection_cache

trueならPostgreSQLへのコネクションをキャッシュします。デフォルトはtrueです。 このパラメータを変更した時には pgpool-II を再起動してください。

health_check_timeout

pgpool-IIはサーバ障害やネットワーク障害を検知するために、定期的にバッ クエンドに接続を試みます。これを「ヘルスチェック」と言います。障害 が検知されると、フェイルオーバや縮退運転を試みます。 この パラメータは、ネットワークケーブルが抜けた際などにヘルスチェッ クが長時間待たされるのを防ぐためのタイムアウト値を秒単位で指定しま す。デフォルトは20秒です。0を指定するとタイムアウト処理をしません (すなわち TCP/IP のタイムアウトまで待つことになります)。 なお、ヘルスチェックを有効にすると、ヘルスチェックのための余分の接 続が1つ必要になりますので、PostgreSQLのpostgresql.confの設定項目の max_connectionsを少くとも1増やすようにしてください。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_period

ヘルスチェックを行う間隔を秒単位で指定します。0を指定するとヘルス チェックを行いません。デフォルトは0です(つまりヘルスチェックを行い ません)。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_user

ヘルスチェックを行うためのPostgreSQLユーザ名です。 このユーザ名はPostgreSQLに登録済みでなければなりません。 さもないと、ヘルスチェックがエラーとなります。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_password

このパラメータはまだ実装されていません。 ヘルスチェックを行うためのPostgreSQLパスワードです。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

failover_command

ノードが切り離された時に実行するコマンドを指定します。特殊文字を指定す ると、pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d切り離されたノード番号
%h切り離されたノードのホスト名
%H新しいマスターのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

フェイルオーバー時には、pgpoolはまず子プロセスを切断します(結果として、すべてのセッションが切断されます)。次に、pgpoolはフェイルオーバコマンドを実行し、その完了を待ちます。 そのあとで新しいpgpoolの子プロセスが起動され、クライアントからの接続を受け付けられる状態になります。

failback_command

ノードが復帰した時に実行するコマンドを指定します。特殊文字を指定すると、 pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d復帰したノード番号
%h復帰したノードのホスト名
%p復帰したノードのポート番号
%D復帰したノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%H新しいマスターのホスト名
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

follow_master_command

マスターノードのフェイルオーバー後に実行するコマンドを指定します。 これは、マスタースレーブモードでストリーミングレプリケーション構成の場合のみ有効です。 特殊文字を指定すると、pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d切り離されたノード番号
%h切り離されたノードのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%H新しいマスターのホスト名
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

空文字列以外を指定すると、マスターノードのフェイルオーバー後に新しいマスター以外のすべてのノードは切り離され、クライアントから再び接続を受け付けるために子プロセスの再起動が行われます。その後、切り離されたそれぞれのノードに対してfollow_master_commandに指定したコマンドが実行されます。通常は、ここにpcp_recovery_nodeコマンドを組み込んだシェルスクリプトなどを指定し、新しいマスターからスレーブをリカバリするために使用します。

fail_over_on_backend_error

trueならば、バックエンドのソケットへの書き込みに失敗するとフェイルオーバします。 これはpgpool-II 2.2.xまでの挙動と同じです。 falseにすると、フェイルオーバせず、単にエラーがレポートされてセッションが切断されます。 このパラメータをfalseにする場合には、health checkを有効にすることをお勧めします。 なお、このパラメータがfalseの場合でも、クライアントがpgpoolに接続する際にバックエンドへの接続に失敗した場合、あるいはバックエンドがシャットダウンされたことをpgpool-IIが検知した場合にはフェイルオーバが起きることに注意してください。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

ignore_leading_white_space

trueならば、load balanceの際にSQL文行頭の空白を無視します(全角ス ペースは無視されません)。これは、DBI/DBD:Pgのように、勝手に行頭にホ ワイトスペースを追加するようなAPIを使い、ロードバランスしたいときに 有効です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_statement

trueならばSQL文をログ出力します。この役目はPostgreSQLの log_statementオプションと似ていて、デバッグオプションがないときでも 問い合わせをログ出力して調べることができるので便利です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_per_node_statement

log_statementと似ていますが、DBノード単位でログが出力されるので、レプリケーションや負荷分散の確認が容易です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_hostname

trueならば、psコマンドでの状態表示時にIPアドレスではなく、ホスト名 を表示します。また、log_connectionsが有効な場合にはログにホスト名を 出力します。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_connections

trueならば、全てのクライアント接続をログへ出力します。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

enable_pool_hba

trueならば、pool_hba.confに従ってクライアント認証を行います。 詳細はクライアント認証(HBA)のためのpool_hba.conf設定 方法を参照してください。 このパラメータを変更した時には pgpool-II を再起動してください。

backend_hostname

使用するPostgreSQLサーバのホスト名を指定します。 pgpool-IIは、このホスト名を使ってPostgreSQLと通信します。

TCP/IPを使用する場合、ホスト名またはIPアドレスを指定できます。 "/"で始まる文字列を指定すると、TCP/IPではなく、UNIXドメインソケットを使用され、 ディレクトリ名とみなしてそこにソケットファイルが作成されることになります。 空文字('')を指定すると、/tmp下に作成したUNIXドメインソケットで接続します。

実際には、"backend_hostname"の後に0, 1, 2...と数字を付加して使用する複数 のPostgreSQLを区別します(たとえばbackend_hostname0)。 この数字のことを「DBノードID」と呼び、0から開始します。 DBノードID == 0のPostgreSQLは、特別に「マスターDB」と呼ばれます。 複数のDBノードを運用している場合、条件によってはマスターDBがダウンしても 運用を続けることができます。この場合は、稼働中かつDBノードIDがもっとも 若いものが新しいマスターDBになります。

ただし、ストリーミングレプリケーションモードで運用している場合は、DBノードIDが0のノードには特別な意味はなく、プライマリノードかどうかが問題になります。 詳細はStreaming Replicationへの対応をご覧ください。

1台しかPostgreSQLを使用しない場合は、"backend_hostname0"としてください。

backend_hostname は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_port

使用するPostgreSQLサーバのポート番号を指定します。 実際には、"backend_port"の後に0, 1, 2...とDBノードIDを付加して使用する複数 のPostgreSQLを区別します。1台しかPostgreSQLを使用しない場合は、 "backend_port0"としてください。

backend_port は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_weight

使用するPostgreSQLサーバに対する負荷分散の比率を0以上の整数または浮動小数点で指定します。 "backend_weight"の後には、DBノードIDを付加して使用する複数のPostgreSQLを区別します。 1台しかPostgreSQLを使用しない場合は、"backend_weight0"としてください。 負荷分散を使用しない場合は、「1」を設定してください。

backend_weight は新しく追加した行を設定ファイル再読み込みで追加することができます。 pgpool-II 2.2.6/2.3以降では、設定ファイルの再読込でbackend_weight値を変更できます。 新しく接続したクライアントセッションから、この新しいweight値が反映されます。 マスタースレーブモードにおいて、あるスレーブに対して管理業務を実施する都合上、問い合わせがそのスレーブに送られるのを防ぎたい場合に有用です。

backend_data_directory

使用する PostgreSQL サーバのデータベースクラスタのパスを指定します。 実際には、"backend_data_directory"の後にDBノードIDを付加して使用する複 数のPostgreSQLを区別します。 このパラメータはオンラインリカバリの際に使用します。オンラインリカバリ を使用しない場合には設定する必要はありません。

backend_data_directory は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_flag

バックエンド単位での様々な挙動を制御するフラグです。 実際には、"backend_flag"の後に数字を付けて、どのバックエンドのフラグか指定します。例: backend_flag0 複数のフラグを"|"で連結して指定することができます。 現在以下のものがあります。

ALLOW_TO_FAILOVER
フェイルオーバやデタッチが可能になります。これがデフォルトの動作です。 DISALLOW_TO_FAILOVERと同時には指定できません。
DISALLOW_TO_FAILOVER
フェイルオーバやデタッチが行われません。 HheartbeatやPacemakerなどのHA(High Availability)ソフトでバックエンドを二重化しているなどの事情で、 pgpool-II側でフェイルオーバの制御をして欲しくないときなどに指定します。 ALLOW_TO_FAILOVERと同時には指定できません。

このパラメータを変更した時には pgpool-II を再起動してください。

ssl

trueならばpgpool-IIとフロントエンド、pgpool-IIとバックエンドの間のSSL接続が可能になります。 なお、pgpool-IIとフロントエンドの接続にSSLが利用できるためには、ssl_keyssl_certが設定されてなければなりません。

(%s%I!"pgp$G$OL5;k$5$l$^$9!# このパラメータを変更した時には設定ファイルを再読み込みしてください。

authentication_timeout

認証処理のタイムアウト時間を秒単位で指定します。0 を指定するとタイ ムアウトを無効にします。authentication_timeout のデフォルト値は 60 です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

logdir

このディレクトリ下に、pgpool-IIのDBノードの状態を記録するpgpool_statusファイルが書かれます。

log_destination

pgpool-IIは、stderrかsyslogのどちらかにログを書くことができます。デフォルトはstderrです。

注意:syslogを使う場合は、syslogデーモンの設定を変更する必要があります。 Note: you will need to alter the configuration of your system's syslog daemon in order to make use of the syslog option for log_destination. pgpool-IIは、syslog ファシリティ LOCAL0 から LOCAL7 までにログを書くことができます (syslog_facilityをご覧ください)。 しかし、ほとんどのデフォルトのsyslog設定は、そのようなメッセージを廃棄してしまいます。 そこで、syslogデーモンの以下のような設定が必要になります。

	local0.*    /var/log/pgpool.log
	

syslog_facility

syslogが有効な場合、このパラメータによってsyslogの「ファシリティ」を設定します。 LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7から選択します。 デフォルトは LOCAL0 です。 併せてsyslogデーモンのドキュメントもご覧ください。

syslog_ident

syslogが有効な場合、このパラメータによってsyslogのメッセージにあらわれるプログラム名を設定します。デフォルトは"pgpool"です。

pid_file_name

pgpool-IIのpid file(プロセスIDを格納したファイル)のフルパス名です。 デフォルト値は'/var/run/pgpool/pgpool.pid'です。 このパラメータを変更した時には pgpool-II を再起動してください。

print_timestamp

trueならばpgpool-IIのログにタイムスタンプを追加します。デフォルトは trueです。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

connection_cache

trueならPostgreSQLへのコネクションをキャッシュします。デフォルトはtrueです。 このパラメータを変更した時には pgpool-II を再起動してください。

health_check_timeout

pgpool-IIはサーバ障害やネットワーク障害を検知するために、定期的にバッ クエンドに接続を試みます。これを「ヘルスチェック」と言います。障害 が検知されると、フェイルオーバや縮退運転を試みます。 この パラメータは、ネットワークケーブルが抜けた際などにヘルスチェッ クが長時間待たされるのを防ぐためのタイムアウト値を秒単位で指定しま す。デフォルトは20秒です。0を指定するとタイムアウト処理をしません (すなわち TCP/IP のタイムアウトまで待つことになります)。 なお、ヘルスチェックを有効にすると、ヘルスチェックのための余分の接 続が1つ必要になりますので、PostgreSQLのpostgresql.confの設定項目の max_connectionsを少くとも1増やすようにしてください。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_period

ヘルスチェックを行う間隔を秒単位で指定します。0を指定するとヘルス チェックを行いません。デフォルトは0です(つまりヘルスチェックを行い ません)。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_user

ヘルスチェックを行うためのPostgreSQLユーザ名です。 このユーザ名はPostgreSQLに登録済みでなければなりません。 さもないと、ヘルスチェックがエラーとなります。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_password

このパラメータはまだ実装されていません。 ヘルスチェックを行うためのPostgreSQLパスワードです。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

failover_command

ノードが切り離された時に実行するコマンドを指定します。特殊文字を指定す ると、pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d切り離されたノード番号
%h切り離されたノードのホスト名
%H新しいマスターのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

フェイルオーバー時には、pgpoolはまず子プロセスを切断します(結果として、すべてのセッションが切断されます)。次に、pgpoolはフェイルオーバコマンドを実行し、その完了を待ちます。 そのあとで新しいpgpoolの子プロセスが起動され、クライアントからの接続を受け付けられる状態になります。

failback_command

ノードが復帰した時に実行するコマンドを指定します。特殊文字を指定すると、 pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d復帰したノード番号
%h復帰したノードのホスト名
%p復帰したノードのポート番号
%D復帰したノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%H新しいマスターのホスト名
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

follow_master_command

マスターノードのフェイルオーバー後に実行するコマンドを指定します。 これは、マスタースレーブモードでストリーミングレプリケーション構成の場合のみ有効です。 特殊文字を指定すると、pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d切り離されたノード番号
%h切り離されたノードのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%H新しいマスターのホスト名
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

空文字列以外を指定すると、マスターノードのフェイルオーバー後に新しいマスター以外のすべてのノードは切り離され、クライアントから再び接続を受け付けるために子プロセスの再起動が行われます。その後、切り離されたそれぞれのノードに対してfollow_master_commandに指定したコマンドが実行されます。通常は、ここにpcp_recovery_nodeコマンドを組み込んだシェルスクリプトなどを指定し、新しいマスターからスレーブをリカバリするために使用します。

fail_over_on_backend_error

trueならば、バックエンドのソケットへの書き込みに失敗するとフェイルオーバします。 これはpgpool-II 2.2.xまでの挙動と同じです。 falseにすると、フェイルオーバせず、単にエラーがレポートされてセッションが切断されます。 このパラメータをfalseにする場合には、health checkを有効にすることをお勧めします。 なお、このパラメータがfalseの場合でも、クライアントがpgpoolに接続する際にバックエンドへの接続に失敗した場合、あるいはバックエンドがシャットダウンされたことをpgpool-IIが検知した場合にはフェイルオーバが起きることに注意してください。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

ignore_leading_white_space

trueならば、load balanceの際にSQL文行頭の空白を無視します(全角ス ペースは無視されません)。これは、DBI/DBD:Pgのように、勝手に行頭にホ ワイトスペースを追加するようなAPIを使い、ロードバランスしたいときに 有効です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_statement

trueならばSQL文をログ出力します。この役目はPostgreSQLの log_statementオプションと似ていて、デバッグオプションがないときでも 問い合わせをログ出力して調べることができるので便利です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_per_node_statement

log_statementと似ていますが、DBノード単位でログが出力されるので、レプリケーションや負荷分散の確認が容易です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_hostname

trueならば、psコマンドでの状態表示時にIPアドレスではなく、ホスト名 を表示します。また、log_connectionsが有効な場合にはログにホスト名を 出力します。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_connections

trueならば、全てのクライアント接続をログへ出力します。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

enable_pool_hba

trueならば、pool_hba.confに従ってクライアント認証を行います。 詳細はクライアント認証(HBA)のためのpool_hba.conf設定 方法を参照してください。 このパラメータを変更した時には pgpool-II を再起動してください。

backend_hostname

使用するPostgreSQLサーバのホスト名を指定します。 pgpool-IIは、このホスト名を使ってPostgreSQLと通信します。

TCP/IPを使用する場合、ホスト名またはIPアドレスを指定できます。 "/"で始まる文字列を指定すると、TCP/IPではなく、UNIXドメインソケットを使用され、 ディレクトリ名とみなしてそこにソケットファイルが作成されることになります。 空文字('')を指定すると、/tmp下に作成したUNIXドメインソケットで接続します。

実際には、"backend_hostname"の後に0, 1, 2...と数字を付加して使用する複数 のPostgreSQLを区別します(たとえばbackend_hostname0)。 この数字のことを「DBノードID」と呼び、0から開始します。 DBノードID == 0のPostgreSQLは、特別に「マスターDB」と呼ばれます。 複数のDBノードを運用している場合、条件によってはマスターDBがダウンしても 運用を続けることができます。この場合は、稼働中かつDBノードIDがもっとも 若いものが新しいマスターDBになります。

ただし、ストリーミングレプリケーションモードで運用している場合は、DBノードIDが0のノードには特別な意味はなく、プライマリノードかどうかが問題になります。 詳細はStreaming Replicationへの対応をご覧ください。

1台しかPostgreSQLを使用しない場合は、"backend_hostname0"としてください。

backend_hostname は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_port

使用するPostgreSQLサーバのポート番号を指定します。 実際には、"backend_port"の後に0, 1, 2...とDBノードIDを付加して使用する複数 のPostgreSQLを区別します。1台しかPostgreSQLを使用しない場合は、 "backend_port0"としてください。

backend_port は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_weight

使用するPostgreSQLサーバに対する負荷分散の比率を0以上の整数または浮動小数点で指定します。 "backend_weight"の後には、DBノードIDを付加して使用する複数のPostgreSQLを区別します。 1台しかPostgreSQLを使用しない場合は、"backend_weight0"としてください。 負荷分散を使用しない場合は、「1」を設定してください。

backend_weight は新しく追加した行を設定ファイル再読み込みで追加することができます。 pgpool-II 2.2.6/2.3以降では、設定ファイルの再読込でbackend_weight値を変更できます。 新しく接続したクライアントセッションから、この新しいweight値が反映されます。 マスタースレーブモードにおいて、あるスレーブに対して管理業務を実施する都合上、問い合わせがそのスレーブに送られるのを防ぎたい場合に有用です。

backend_data_directory

使用する PostgreSQL サーバのデータベースクラスタのパスを指定します。 実際には、"backend_data_directory"の後にDBノードIDを付加して使用する複 数のPostgreSQLを区別します。 このパラメータはオンラインリカバリの際に使用します。オンラインリカバリ を使用しない場合には設定する必要はありません。

backend_data_directory は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_flag

バックエンド単位での様々な挙動を制御するフラグです。 実際には、"backend_flag"の後に数字を付けて、どのバックエンドのフラグか指定します。例: backend_flag0 複数のフラグを"|"で連結して指定することができます。 現在以下のものがあります。

ALLOW_TO_FAILOVER
フェイルオーバやデタッチが可能になります。これがデフォルトの動作です。 DISALLOW_TO_FAILOVERと同時には指定できません。
DISALLOW_TO_FAILOVER
フェイルオーバやデタッチが行われません。 HheartbeatやPacemakerなどのHA(High Availability)ソフトでバックエンドを二重化しているなどの事情で、 pgpool-II側でフェイルオーバの制御をして欲しくないときなどに指定します。 ALLOW_TO_FAILOVERと同時には指定できません。

このパラメータを変更した時には pgpool-II を再起動してください。

ssl

trueならばpgpool-IIとフロントエンド、pgpool-IIとバックエンドの間のSSL接続が可能になります。 なお、pgpool-IIとフロントエンドの接続にSSLが利用できるためには、ssl_keyssl_certが設定されてなければなりません。

(%s%I!"pgp$G$OL5;k$5$l$^$9!# このパラメータを変更した時には設定ファイルを再読み込みしてください。

authentication_timeout

認証処理のタイムアウト時間を秒単位で指定します。0 を指定するとタイ ムアウトを無効にします。authentication_timeout のデフォルト値は 60 です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

logdir

このディレクトリ下に、pgpool-IIのDBノードの状態を記録するpgpool_statusファイルが書かれます。

log_destination

pgpool-IIは、stderrかsyslogのどちらかにログを書くことができます。デフォルトはstderrです。

注意:syslogを使う場合は、syslogデーモンの設定を変更する必要があります。 Note: you will need to alter the configuration of your system's syslog daemon in order to make use of the syslog option for log_destination. pgpool-IIは、syslog ファシリティ LOCAL0 から LOCAL7 までにログを書くことができます (syslog_facilityをご覧ください)。 しかし、ほとんどのデフォルトのsyslog設定は、そのようなメッセージを廃棄してしまいます。 そこで、syslogデーモンの以下のような設定が必要になります。

	local0.*    /var/log/pgpool.log
	

syslog_facility

syslogが有効な場合、このパラメータによってsyslogの「ファシリティ」を設定します。 LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7から選択します。 デフォルトは LOCAL0 です。 併せてsyslogデーモンのドキュメントもご覧ください。

syslog_ident

syslogが有効な場合、このパラメータによってsyslogのメッセージにあらわれるプログラム名を設定します。デフォルトは"pgpool"です。

pid_file_name

pgpool-IIのpid file(プロセスIDを格納したファイル)のフルパス名です。 デフォルト値は'/var/run/pgpool/pgpool.pid'です。 このパラメータを変更した時には pgpool-II を再起動してください。

print_timestamp

trueならばpgpool-IIのログにタイムスタンプを追加します。デフォルトは trueです。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

connection_cache

trueならPostgreSQLへのコネクションをキャッシュします。デフォルトはtrueです。 このパラメータを変更した時には pgpool-II を再起動してください。

health_check_timeout

pgpool-IIはサーバ障害やネットワーク障害を検知するために、定期的にバッ クエンドに接続を試みます。これを「ヘルスチェック」と言います。障害 が検知されると、フェイルオーバや縮退運転を試みます。 この パラメータは、ネットワークケーブルが抜けた際などにヘルスチェッ クが長時間待たされるのを防ぐためのタイムアウト値を秒単位で指定しま す。デフォルトは20秒です。0を指定するとタイムアウト処理をしません (すなわち TCP/IP のタイムアウトまで待つことになります)。 なお、ヘルスチェックを有効にすると、ヘルスチェックのための余分の接 続が1つ必要になりますので、PostgreSQLのpostgresql.confの設定項目の max_connectionsを少くとも1増やすようにしてください。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_period

ヘルスチェックを行う間隔を秒単位で指定します。0を指定するとヘルス チェックを行いません。デフォルトは0です(つまりヘルスチェックを行い ません)。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_user

ヘルスチェックを行うためのPostgreSQLユーザ名です。 このユーザ名はPostgreSQLに登録済みでなければなりません。 さもないと、ヘルスチェックがエラーとなります。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

health_check_password

このパラメータはまだ実装されていません。 ヘルスチェックを行うためのPostgreSQLパスワードです。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

failover_command

ノードが切り離された時に実行するコマンドを指定します。特殊文字を指定す ると、pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d切り離されたノード番号
%h切り離されたノードのホスト名
%H新しいマスターのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

フェイルオーバー時には、pgpoolはまず子プロセスを切断します(結果として、すべてのセッションが切断されます)。次に、pgpoolはフェイルオーバコマンドを実行し、その完了を待ちます。 そのあとで新しいpgpoolの子プロセスが起動され、クライアントからの接続を受け付けられる状態になります。

failback_command

ノードが復帰した時に実行するコマンドを指定します。特殊文字を指定すると、 pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d復帰したノード番号
%h復帰したノードのホスト名
%p復帰したノードのポート番号
%D復帰したノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%H新しいマスターのホスト名
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

follow_master_command

マスターノードのフェイルオーバー後に実行するコマンドを指定します。 これは、マスタースレーブモードでストリーミングレプリケーション構成の場合のみ有効です。 特殊文字を指定すると、pgpool が必要な情報に置き換えてコマンドを実行します。

文字意味
%d切り離されたノード番号
%h切り離されたノードのホスト名
%p切り離されたノードのポート番号
%D切り離されたノードのデータベースクラスタパス
%M古いマスターのノード番号
%m新しいマスターのノード番号
%H新しいマスターのホスト名
%P古いプライマリノード番号
%%'%'文字
このパラメータを変更した時には設定ファイルを再読み込みしてください。

空文字列以外を指定すると、マスターノードのフェイルオーバー後に新しいマスター以外のすべてのノードは切り離され、クライアントから再び接続を受け付けるために子プロセスの再起動が行われます。その後、切り離されたそれぞれのノードに対してfollow_master_commandに指定したコマンドが実行されます。通常は、ここにpcp_recovery_nodeコマンドを組み込んだシェルスクリプトなどを指定し、新しいマスターからスレーブをリカバリするために使用します。

fail_over_on_backend_error

trueならば、バックエンドのソケットへの書き込みに失敗するとフェイルオーバします。 これはpgpool-II 2.2.xまでの挙動と同じです。 falseにすると、フェイルオーバせず、単にエラーがレポートされてセッションが切断されます。 このパラメータをfalseにする場合には、health checkを有効にすることをお勧めします。 なお、このパラメータがfalseの場合でも、クライアントがpgpoolに接続する際にバックエンドへの接続に失敗した場合、あるいはバックエンドがシャットダウンされたことをpgpool-IIが検知した場合にはフェイルオーバが起きることに注意してください。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

ignore_leading_white_space

trueならば、load balanceの際にSQL文行頭の空白を無視します(全角ス ペースは無視されません)。これは、DBI/DBD:Pgのように、勝手に行頭にホ ワイトスペースを追加するようなAPIを使い、ロードバランスしたいときに 有効です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_statement

trueならばSQL文をログ出力します。この役目はPostgreSQLの log_statementオプションと似ていて、デバッグオプションがないときでも 問い合わせをログ出力して調べることができるので便利です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_per_node_statement

log_statementと似ていますが、DBノード単位でログが出力されるので、レプリケーションや負荷分散の確認が容易です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_hostname

trueならば、psコマンドでの状態表示時にIPアドレスではなく、ホスト名 を表示します。また、log_connectionsが有効な場合にはログにホスト名を 出力します。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

log_connections

trueならば、全てのクライアント接続をログへ出力します。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

enable_pool_hba

trueならば、pool_hba.confに従ってクライアント認証を行います。 詳細はクライアント認証(HBA)のためのpool_hba.conf設定 方法を参照してください。 このパラメータを変更した時には pgpool-II を再起動してください。

backend_hostname

使用するPostgreSQLサーバのホスト名を指定します。 pgpool-IIは、このホスト名を使ってPostgreSQLと通信します。

TCP/IPを使用する場合、ホスト名またはIPアドレスを指定できます。 "/"で始まる文字列を指定すると、TCP/IPではなく、UNIXドメインソケットを使用され、 ディレクトリ名とみなしてそこにソケットファイルが作成されることになります。 空文字('')を指定すると、/tmp下に作成したUNIXドメインソケットで接続します。

実際には、"backend_hostname"の後に0, 1, 2...と数字を付加して使用する複数 のPostgreSQLを区別します(たとえばbackend_hostname0)。 この数字のことを「DBノードID」と呼び、0から開始します。 DBノードID == 0のPostgreSQLは、特別に「マスターDB」と呼ばれます。 複数のDBノードを運用している場合、条件によってはマスターDBがダウンしても 運用を続けることができます。この場合は、稼働中かつDBノードIDがもっとも 若いものが新しいマスターDBになります。

ただし、ストリーミングレプリケーションモードで運用している場合は、DBノードIDが0のノードには特別な意味はなく、プライマリノードかどうかが問題になります。 詳細はStreaming Replicationへの対応をご覧ください。

1台しかPostgreSQLを使用しない場合は、"backend_hostname0"としてください。

backend_hostname は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_port

使用するPostgreSQLサーバのポート番号を指定します。 実際には、"backend_port"の後に0, 1, 2...とDBノードIDを付加して使用する複数 のPostgreSQLを区別します。1台しかPostgreSQLを使用しない場合は、 "backend_port0"としてください。

backend_port は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_weight

使用するPostgreSQLサーバに対する負荷分散の比率を0以上の整数または浮動小数点で指定します。 "backend_weight"の後には、DBノードIDを付加して使用する複数のPostgreSQLを区別します。 1台しかPostgreSQLを使用しない場合は、"backend_weight0"としてください。 負荷分散を使用しない場合は、「1」を設定してください。

backend_weight は新しく追加した行を設定ファイル再読み込みで追加することができます。 pgpool-II 2.2.6/2.3以降では、設定ファイルの再読込でbackend_weight値を変更できます。 新しく接続したクライアントセッションから、この新しいweight値が反映されます。 マスタースレーブモードにおいて、あるスレーブに対して管理業務を実施する都合上、問い合わせがそのスレーブに送られるのを防ぎたい場合に有用です。

backend_data_directory

使用する PostgreSQL サーバのデータベースクラスタのパスを指定します。 実際には、"backend_data_directory"の後にDBノードIDを付加して使用する複 数のPostgreSQLを区別します。 このパラメータはオンラインリカバリの際に使用します。オンラインリカバリ を使用しない場合には設定する必要はありません。

backend_data_directory は新しく追加した行を設定ファイル再読み込みで追加する ことができます。すでにある情報を途中で変更することはできません。変更す る場合には pgpool-II を再起動してください。

backend_flag

バックエンド単位での様々な挙動を制御するフラグです。 実際には、"backend_flag"の後に数字を付けて、どのバックエンドのフラグか指定します。例: backend_flag0 複数のフラグを"|"で連結して指定することができます。 現在以下のものがあります。

ALLOW_TO_FAILOVER
フェイルオーバやデタッチが可能になります。これがデフォルトの動作です。 DISALLOW_TO_FAILOVERと同時には指定できません。
DISALLOW_TO_FAILOVER
フェイルオーバやデタッチが行われません。 HheartbeatやPacemakerなどのHA(High Availability)ソフトでバックエンドを二重化しているなどの事情で、 pgpool-II側でフェイルオーバの制御をして欲しくないときなどに指定します。 ALLOW_TO_FAILOVERと同時には指定できません。

このパラメータを変更した時には pgpool-II を再起動してください。

ssl

trueならばpgpool-IIとフロントエンド、pgpool-IIとバックエンドの間のSSL接続が可能になります。 なお、pgpool-IIとフロントエンドの接続にSSLが利用できるためには、ssl_keyssl_certが設定されてなければなりません。

(%s%I!"pgp$G$OL5;k$5$l$^$9!# このパラメータを変更した時には設定ファイルを再読み込みしてください。

authentication_timeout

認証処理のタイムアウト時間を秒単位で指定します。0 を指定するとタイ ムアウトを無効にします。authentication_timeout のデフォルト値は 60 です。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

logdir

このディレクトリ下に、pgpool-IIのDBノードの状態を記録するpgpool_statusファイルが書かれます。

log_destination

pgpool-IIは、stderrかsyslogのどちらかにログを書くことができます。デフォルトはstderrです。

注意:syslogを使う場合は、syslogデーモンの設定を変更する必要があります。 Note: you will need to alter the configuration of your system's syslog daemon in order to make use of the syslog option for log_destination. pgpool-IIは、syslog ファシリティ LOCAL0 から LOCAL7 までにログを書くことができます (syslog_facilityをご覧ください)。 しかし、ほとんどのデフォルトのsyslog設定は、そのようなメッセージを廃棄してしまいます。 そこで、syslogデーモンの以下のような設定が必要になります。

	local0.*    /var/log/pgpool.log
	

syslog_facility

syslogが有効な場合、このパラメータによってsyslogの「ファシリティ」を設定します。 LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7から選択します。 デフォルトは LOCAL0 です。 併せてsyslogデーモンのドキュメントもご覧ください。

syslog_ident

syslogが有効な場合、このパラメータによってsyslogのメッセージにあらわれるプログラム名を設定します。デフォルトは"pgpool"です。

pid_file_name

pgpool-IIのpid file(プロセスIDを格納したファイル)のフルパス名です。 デフォルト値は'/var/run/pgpool/pgpool.pid'です。 このパラメータを変更した時には pgpool-II を再起動してください。

print_timestamp

trueならばpgpool-IIのログにタイムスタンプを追加します。デフォルトは trueです。 このパラメータを変更した時には設定ファイルを再読み込みしてください。

con