pgpool.conf設定

概要

pgpoolの設定ファイルであるpgpool.confの設定内容を表示・変更することができます。

機能

変更したい値を入力して更新ボタンを押してください。

バックエンドホストの追加

新しいバックエンドホストを追加したい場合には、追加ボタンを押してください。
バックエンドホストの項目に新しい入力欄ができますので、そこに新しいバックエンドホストの情報を入力してください。
入力が終わりましたら、更新ボタンを押してください。

バックエンドホストの削除

登録してあるバックエンドホストを削除したい場合には、そのホスト設定の右側にある削除ボタンを押してください。

Connections

項目 詳細

listen_addresses (string)
TCP/IPコネクションを受け付けるアドレスをホスト名またはIPアドレスで指定します。「*」を指定するとすべてのIPインタフェースからのコネクションを受け付けます。「''」を指定するとTCP/IPコネクションを受け付けま せん。デフォルト値は「localhost」です。
UNIXドメインソケット経由のコネクションは常に受け付けます。

port (integer)
pgpoolがコネクションを受け付けるポート番号です。デフォルト値は9999です

socket_dir (string)
PostgreSQLサーバのUnix domain socketのディレクトリです。デフォルト値は'/tmp'です。

num_init_children (integer)
preforkするpgpoolのサーバプロセスの数です。デフォルト値は32になっています。
なお、問い合わせのキャンセルを行うと通常のコネクションとは別に新たなコネクションが張られます。したがって、すべてのコネクションが使用中の場合は問い合わせのキャンセルができなくってしまうので、ご注意下 さい。問い合わせのキャンセルを必ず保証したい場合は、想定されるコネクション数の倍の値を設定することをおすすめします。

max_pool (integer)
pgpoolの各サーバプロセスがキープするPostgreSQLへの最大コネクション数です。pgpoolは、ユーザ名、データベースが同じならばコネクションを再利用しますが、そうでなければ新たにPostgreSQLへのコネクションを確立しようとします。したがって、ここでは想定される[ユーザ名:データベース名]のペアの種類の数だけをmax_poolに指定しておく必要があります。もしmax_poolを使いきってしまった場合は一番古いコネクションを切断し、そのスロットが再利用されます。
max_poolのデフォルト値は4です。
なお、pgpool全体としては、num_init_children*max_pool 分だけPostgreSQLへのコネクションが張られる点に注意してください

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

connection_life_time (integer)
コネクションプール中のコネクションの有効期間を秒単位で指定します。0を指定すると有効期間は無限になります。connection_life_timeのデフォルト値は0です。

child_max_connections (integer)
各pgpool子プロセスへの接続回数がこの設定値を超えると、その子プロセスを終了します。child_life_timeやconnection_life_timeが効かないくらい忙しいサーバで、PostgreSQLバックエンドが肥大化するのを防ぐのに有効です。

client_idle_limit
前回クライアントから来たクエリから,client_idle_limit 秒 越えても次の クエリが届かない場合は,クライアントへの接続を強 制的に切断し,クライ アントからの次のコネクションを待つように します。デフォルト値は 0(無効)です。このパラメータを変更した時 には設定ファイルを再読み込みしてください。

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

connection_cache
trueならコネクションをキャッシュします。デフォルトはtrueです。

pgpool2_hostname (string)
pgpool2が稼働しているホスト名を指定します。

Backends

項目 詳細

backend_socket_dir (string)
PostgreSQLサーバのUnix domain socketのディレクトリです。デフォルト値は'/tmp'です。

backend_hostname (string)
postmasterが稼働しているホスト名を指定します。指定しない場合にはUnix domain socketで接続します。

backend_port (integer)
postmasterが稼働しているポート番号です。

backend_weight (integer)
ロードバランスモード時に振り分ける重みを0から1の値で設定します。すべてのバックエンドサーバで指定した値から相対的な重みを計算して振り分けます。

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

PCP (pgpool Control Port)

項目 詳細

pcp_port (integer)
PCPに接続するためのポート番号です。デフォルトは9898です。

pcp_socket_dir (string)
PCPのUnix domain socketのディレクトリです。デフォルト値は'/tmp'です。

pcp_timeout (integer)
PCPコマンドのタイムアウトを設定します。この時間の間に応答がない場合にはコネクションを切断します。

Logging

項目 詳細

logdir (string)
pgpoolの各種ログファイルを格納するディレクトリです。現在のところ、pgpool.pidというプロセスIDを格納するファイルだけが作られるようになっています。logdirのデフォルト値は'/tmp'です。

print_timestamp
trueならばpgpoolのログにタイムスタンプを追加します。デフォルトはtrueです。

log_statement
trueならばSQL文をログ出力します。この役目はPostgreSQLのlog_statementオプションと似ていて、デバッグオプションがないときでも問い合わせをログ出力して調べることができるので便利です。

log_connections
trueならばクライアントから受信した接続ごとにログを出力します。デフォルトはfalseです。

log_hostname
trueならばクライアントのホスト名を"ps"コマンドの結果に出力します。またlog_connectionsが有効になっている場合、クライアントから受信した接続のログと一緒にホスト名も出力されます。ただしホスト名の探索には負荷がかかりますので、有効にする場合には注意してください。

Replication

項目 詳細

replication_mode
レプリケーションモードで動作させる場合はtrueを指定してください。デフォルト値はfalseです。

replicate_select
true を設定するとロードバランスされない SELECT 文をレプリケーションさせます。

replication_stop_on_mismatch
trueを指定するとマスタとセカンダリの間でデータの不一致があった場合に強制的に縮退運転に入ります。このオプションがfalseの場合は、該当の問い合わせを強制的に終了するだけに留めます。デフォルト値はfalseです。

reset_query_list (string)
セッションが終了するときにコネクションを初期化するためのSQLコマンドを「;」で区切って列挙します。デフォルトは以下のようになっていますが、任意のSQL文を追加しても構いません。

reset_query_list = 'ABORT; RESET ALL; SET SESSION AUTHORIZATION DEFAULT'

PostgreSQLのバージョンによって使用できるSQLコマンドが違うので、PostgreSQL 7.3以前では注意してください(「4. pgpoolの稼働環境」参照)。
なお、「ABORT」は、PostgreSQL 7.4以上ではトランザクションブロックの中にいない場合には発行されません。

Health Check

項目 詳細

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

health_check_period (integer)
ヘルスチェックを行う間隔を秒単位で指定します。0を指定するとヘルスチェックを行いません。デフォルトは0です(つまりヘルスチェックを行いません)。

health_check_user (string)
ヘルスチェックを行うためのPostgreSQLユーザ名です。

Online Recovery

項目 詳細

recovery_user (string)
オンラインリカバリを行うための PostgreSQL ユーザ名です。

recovery_password (string)
オンラインリカバリを行うための PostgreSQL ユーザパスワードです。

recovery_1st_stage_command (string)
最初にオンラインリカバリ中に起動するコマンド名を 指定します。コマンドファイルはセキュリティ上の観点 からデータベースクラスタ以下にあるコマンドやスクリ プトのみを呼び出します。 例えば、 recovery_1st_stage_command = 'sync-command' と設定し てある場 合、$PGDATA/sync-command を起動しようとしま す。 recovery_1st_stage_command を実行している間は pgpool ではクライアン トからの接続を制限しません。参 照や更新を行うことができます。

recovery_2nd_stage_command (string)
2 回目のオンラインリカバリ中に起動するコマンド名 を指定します。コマンドファイルはセキュリティ上の観 点からデータベースクラスタ以下にあるコマンドやスク リプトのみを呼び出します。 例えば、 recovery_2nd_stage_command = 'sync-command' と設定し てある場 合、$PGDATA/sync-command を起動しようとしま す。 recovery_2nd_stage_command を実行している間は pgpool ではクライアン トから接続、参照、更新処理を一 切受け付けません。また、バッチ 処理などによって接続 しているクライアントが長時間存在している場合には コ マンドを起動しません。接続を制限し、現在の接続数が 0 になった時点 でコマンドを起動します。

recovery_timeout (integer)
オンラインリカバリ処理の最大待ち時間を指定します。0 を指 定すると待ち時間無しとなり、リカバリが一瞬で終了しない場合以 外は失敗となります。

System Database

項目 詳細

system_db_hostname (string)
システムDBが稼働しているホスト名を指定します。指定しない場合にはUnix domain socketで接続します。

system_db_port (integer)
システムDBがあるPostgreSQLに接続するためのポート番号を指定します。

system_db_dbname (string)
システムDBのデータベース名を指定します。

system_db_schema (string)
システムDBのスキーマを指定します。

system_db_user (string)
システムDBに接続するユーザ名を指定します。

system_db_password (string)
システムDBに接続するユーザのパスワードを指定します。

Others

項目 詳細

load_balance_mode
trueを指定するとレプリケーションモードの際に、SELECT文をマスタとセカンダリの間でロードバランスします。デフォルト値はfalseです

master_slave_mode
trueならばマスタ/スレーブモードでpgpoolを運転します。デフォルトはfalseです。このモードはreplication_modeとは両立しません。

insert_lock
SERIAL型を使っているテーブルをレプリケーションすると、SERIAL型の列の値がマスタとセカンダリで一致しなくなることがあります。この問題は、該当テーブルを明示的にロックすることで回避できます(もちろんトランザ クションの並列実行性は犠牲になりますが)。しかし、そのためには、

INSERT INTO ...

BEGIN;
LOCK TABLE ...
INSERT INTO ...
COMMIT;

に書き換えなければなりません。insert_lockをtrueにすると自動的にトランザクションの開始、テーブルロック、トランザクションの終了を行ってくれるので、こうした手間を省くことができます(すでにトランザクションが開始されている場合はLOCK TABLE...だけが実行されます)。


ignore_leading_white_space
trueならば、load balanceの際にSQL文行頭の空白を無視します(全角スペースは無視されません)。これは、DBI/DBD:Pgのように、勝手に行頭にホワイトスペースを追加するようなAPIを使い、ロードバランスしたいときに有効です

parallel_mode
pgpoolをパラレルモードで稼働させる場合にはtrueを指定します。この場合には分散ルールを指定する必要があります。

enable_query_cache
SELECTの結果をキャッシュする場合にはtrueにします。

enable_pool_hba
pool_hba.confを使ったクライアント認証機能を有効にする場合にはtrueにします。