#

## pgpool.conf設定

### 概要

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

### 機能

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

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

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

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

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

### Table of Contents

- Connections
- Backends
- PCP
- Logging
- Replication
- Health Check
- Online Recovery
- System Database
- Others

### Connections

項目 | 詳細
--- | ---
TCP/IPコネクションを受け付けるアドレス listen_addresses (string) | TCP/IPコネクションを受け付けるアドレスをホスト名またはIPアドレスで指定します。「*」を指定するとすべてのIPインタフェースからのコネクションを受け付けます。「''」を指定するとTCP/IPコネクションを受け付けま せん。デフォルト値は「localhost」です。 UNIXドメインソケット経由のコネクションは常に受け付けます。
pgpoolがコネクションを受け付けるポート番号 port (integer) | pgpoolがコネクションを受け付けるポート番号です。デフォルト値は9999です
pgpoolがコネクションを受け付けるUnix domain socketディレクトリ socket_dir (string) | PostgreSQLサーバのUnix domain socketのディレクトリです。デフォルト値は'/tmp'です。
preforkするpgpoolのサーバプロセス数 num_init_children (integer) | preforkするpgpoolのサーバプロセスの数です。デフォルト値は32になっています。 なお、問い合わせのキャンセルを行うと通常のコネクションとは別に新たなコネクションが張られます。したがって、すべてのコネクションが使用中の場合は問い合わせのキャンセルができなくってしまうので、ご注意下 さい。問い合わせのキャンセルを必ず保証したい場合は、想定されるコネクション数の倍の値を設定することをおすすめします。
pgpoolの各サーバプロセスがキープするPostgreSQLへの最大コネクション数 max_pool (integer) | pgpoolの各サーバプロセスがキープするPostgreSQLへの最大コネクション数です。pgpoolは、ユーザ名、データベースが同じならばコネクションを再利用しますが、そうでなければ新たにPostgreSQLへのコネクションを確立しようとします。したがって、ここでは想定される[ユーザ名:データベース名]のペアの種類の数だけをmax_poolに指定しておく必要があります。もしmax_poolを使いきってしまった場合は一番古いコネクションを切断し、そのスロットが再利用されます。 max_poolのデフォルト値は4です。 なお、pgpool全体としては、num_init_children*max_pool 分だけPostgreSQLへのコネクションが張られる点に注意してください
pgpoolの子プロセスの寿命 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です。
各pgpool子プロセスが終了するまでの接続回数 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 が動作しているホスト名 pgpool2_hostname (string) | pgpool2が稼働しているホスト名を指定します。

### Backends

項目 | 詳細 |
PostgreSQLサーバのUnix domain socketのディレクトリ backend_socket_dir (string) | PostgreSQLサーバのUnix domain socketのディレクトリです。デフォルト値は'/tmp'です。
pgpoolが接続するPostgreSQLサーバ(postmaster)が動いているホスト名 backend_hostname (string) | postmasterが稼働しているホスト名を指定します。指定しない場合にはUnix domain socketで接続します。
PostgreSQLサーバのポート番号 backend_port (integer) | postmasterが稼働しているポート番号です。
ロードバランスモード時のSELECTを振り分ける「重み」の定義 backend_weight (integer) | ロードバランスモード時に振り分ける重みを0から1の値で設定します。すべてのバックエンドサーバで指定した値から相対的な重みを計算して振り分けます。
PostgreSQL サーバのデータベースクラスタディレクトリ 名 backend_data_directory (string) | 使用する PostgreSQL サーバのデータベースクラスタの パスを指定します。実際には、"backend_data_directory"の後にDBノー ドIDを付加して使用する複数のPostgreSQLを区別します。このパラメー タはオンラインリカバリの際に使用します。オンラインリカバリを使 用しない場合には設定する必要はありません。

### PCP (pgpool Control Port)

項目 | 詳細
--- | ---
pgpool-IIが受け付けているポート番号 pcp_port (integer) | PCPに接続するためのポート番号です。デフォルトは9898です。
pcpがコネクションを受け付けるUnix domain socketディレクトリ pcp_socket_dir (string) | PCPのUnix domain socketのディレクトリです。デフォルト値は'/tmp'です。
この時間内にクライアントから応答がない場合はコネクションを切断して終了 pcp_timeout (integer) | PCPコマンドのタイムアウトを設定します。この時間の間に応答がない場合にはコネクションを切断します。

### Logging

項目 | 詳細
--- | ---
pgpoolの各種ログファイルを格納するディレクトリ logdir (string) | pgpoolの各種ログファイルを格納するディレクトリです。現在のところ、pgpool.pidというプロセスIDを格納するファイルだけが作られるようになっています。logdirのデフォルト値は'/tmp'です。
pgpoolのログにタイムスタンプを追加 print_timestamp | trueならばpgpoolのログにタイムスタンプを追加します。デフォルトはtrueです。
trueならばSQL文をログ出力 log_statement | trueならばSQL文をログ出力します。この役目はPostgreSQLのlog_statementオプションと似ていて、デバッグオプションがないときでも問い合わせをログ出力して調べることができるので便利です。
trueならば受信した接続のログを出力 log_connections | trueならばクライアントから受信した接続ごとにログを出力します。デフォルトはfalseです。
trueならばクライアントのホスト名を"ps"ステータスに出力。log_connectionsがtrueであればログにも出力 log_hostname | trueならばクライアントのホスト名を"ps"コマンドの結果に出力します。またlog_connectionsが有効になっている場合、クライアントから受信した接続のログと一緒にホスト名も出力されます。ただしホスト名の探索には負荷がかかりますので、有効にする場合には注意してください。

### Replication

項目 | 詳細
--- | ---
レプリケーションモードの有効化 replication_mode | レプリケーションモードで動作させる場合はtrueを指定してください。デフォルト値はfalseです。
true ならば SELECT をレプリケーションし、false ならばマスタにのみ送信 replicate_select | true を設定するとロードバランスされない SELECT 文をレプリケーションさせます。
trueを指定するとマスタとセカンダリの間でデータの不一致があった場合に強制的に縮退運転 replication_stop_on_mismatch | trueを指定するとマスタとセカンダリの間でデータの不一致があった場合に強制的に縮退運転に入ります。このオプションがfalseの場合は、該当の問い合わせを強制的に終了するだけに留めます。デフォルト値はfalseです。
セッションが終了するときにコネクションを初期化するためのSQLコマンド 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です(つまりヘルスチェックを行いません)。
ヘルスチェックを行うためのPostgreSQLユーザ名 health_check_user (string) | ヘルスチェックを行うためのPostgreSQLユーザ名です。

### Online Recovery

項目 | 詳細
--- | ---
リカバリを行うためのPostgreSQLユーザ recovery_user (string) | オンラインリカバリを行うための PostgreSQL ユーザ名です。
リカバリを行うためのPostgreSQLユーザパスワード recovery_password (string) | オンラインリカバリを行うための PostgreSQL ユーザパスワードです。
オンラインリカバリ第1ステージで実行するコマンド recovery_1st_stage_command (string) | 最初にオンラインリカバリ中に起動するコマンド名を 指定します。コマンドファイルはセキュリティ上の観点 からデータベースクラスタ以下にあるコマンドやスクリ プトのみを呼び出します。 例えば、 recovery_1st_stage_command = 'sync-command' と設定し てある場 合、$PGDATA/sync-command を起動しようとしま す。 recovery_1st_stage_command を実行している間は pgpool ではクライアン トからの接続を制限しません。参 照や更新を行うことができます。
オンラインリカバリ第2ステージで実行するコマンド 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が動いているホスト名 system_db_hostname (string) | システムDBが稼働しているホスト名を指定します。指定しない場合にはUnix domain socketで接続します。
System DBに接続するためのポート番号 system_db_port (integer) | システムDBがあるPostgreSQLに接続するためのポート番号を指定します。
System DBのデータベース名 system_db_dbname (string) | システムDBのデータベース名を指定します。
System DBのスキーマ system_db_schema (string) | システムDBのスキーマを指定します。
System DBに接続するときのユーザ名 system_db_user (string) | システムDBに接続するユーザ名を指定します。
System DBに接続するユーザのパスワード system_db_password (string) | システムDBに接続するユーザのパスワードを指定します。

### Others

項目 | 詳細
--- | ---
レプリケーションモード時にSELECT文を各ノードにロードバランス load_balance_mode | trueを指定するとレプリケーションモードの際に、SELECT文をマスタとセカンダリの間でロードバランスします。デフォルト値はfalseです
マスタ/スレーブモードでpgpoolを運転 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...だけが実行されます）。
trueならば、load balanceの際にSQL文行頭の空白を無視 ignore_leading_white_space | trueならば、load balanceの際にSQL文行頭の空白を無視します(全角スペースは無視されません)。これは、DBI/DBD:Pgのように、勝手に行頭にホワイトスペースを追加するようなAPIを使い、ロードバランスしたいときに有効です
パラレルモードでpgpoolを運転 parallel_mode | pgpoolをパラレルモードで稼働させる場合にはtrueを指定します。この場合には分散ルールを指定する必要があります。
クエリキャッシュ機能の有効化 enable_query_cache | SELECTの結果をキャッシュする場合にはtrueにします。
クライアント認証(HBA)の有効化 enable_pool_hba | pool_hba.confを使ったクライアント認証機能を有効にする場合にはtrueにします。