5.2. 接続と認証

5.2.1. 接続設定

listen_addresses (string)

Pgpool-IIがTCP/IP接続を受け付けるホスト名またはIPアドレスを指定します。 *を指定すると入ってくる全ての接続を受け付けます。 ''を指定するとTCP/IP接続を受け付けません。 デフォルト値は'localhost'です。 UNIXドメインソケット経由の接続は常に受け付けます。

このパラメータはサーバ起動時にのみ設定可能です。

port (integer)

Pgpool-IIが接続を受け付けるために監視するポート番号です。 デフォルト値は9999です。

このパラメータはサーバ起動時にのみ設定可能です。

socket_dir (string)

Pgpool-IIが接続を受け付けるUNIXドメインソケットを置くディレクトリです。 デフォルト値は/tmpです。 このソケットは、cron によって削除されることがあるので注意してください。 /var/runなどのディレクトリに変更することをお勧めします。

このパラメータはサーバ起動時にのみ設定可能です。

pcp_listen_addresses (string)

PCPプロセスがTCP/IP接続を受け付けるホスト名またはIPアドレスを指定します。 *を指定すると入ってくる全ての接続を受け付けます。 ''を指定するとTCP/IP接続を受け付けません。 デフォルト値は*です。 UNIXドメインソケット経由のコネクションは常に受け付けます。

このパラメータはサーバ起動時にのみ設定可能です。

pcp_port (integer)

PCPプロセスが接続を受け付けるために監視するポート番号です。 デフォルト値は9898です。

このパラメータはサーバ起動時にのみ設定可能です。

pcp_socket_dir (string)

PCPプロセスが接続を受け付けるUNIXドメインソケットを置くディレクトリです。 デフォルト値は/tmpです。 このソケットは、cron によって削除されることがあるので注意してください。 /var/runなどのディレクトリに変更することをお勧めします。

このパラメータはサーバ起動時にのみ設定可能です。

num_init_children (integer)

preforkするPgpool-IIのサーバプロセスの数です。 デフォルト値は32です。 num_init_childrenはPgpool-IIに対してクライアントが同時に接続できる上限の数でもあります。 num_init_childrenより多いクライアントがPgpool-IIに接続しようとした場合、それらのクライアントは、Pgpool-IIのどれかのプロセスへの接続が閉じられるまで待たされます(PostgreSQLのように接続拒否エラーにはなりません。)。 待たされる数の上限は、listen_backlog_multiplier * num_init_children です。

待ち行列は、OS内部に作られ、「listenキュー」と呼ばれます。 listenキューの長さは「バックログ」と呼ばれます。 システムによってはバックログの上限が設定されており、listen_backlog_multiplier*num_init_childrenがこれを越える場合はバックログを大きく設定する必要があります。 さもないと高負荷時に以下のような問題が発生する可能性があります: 1) Pgpool-IIへの接続が失敗する。 2) カーネル内で行われるリトライによりPgpool-IIへの接続が遅くなる。 実際にlistenキューが溢れているかどうかは、"netstat -s"コマンドを使って確認できます。 もし、以下のような出力があった場合、

535 times the listen queue of a socket overflowed
			

listenキューが溢れています。 この場合にはバックログを増やす必要があります(スーパユーザ権限が必要になります)。

# sysctl net.core.somaxconn
net.core.somaxconn = 128
# sysctl -w net.core.somaxconn = 256
			

/etc/sysctl.confに以下のように書いても構いません。

net.core.somaxconn = 256
			

PostgreSQLへ貼られる接続数は大まかにはmax_pool*num_init_childrenとなります。

ただし、問い合わせのキャンセルを行うとバックエンドに対して別の接続が張られます。 したがって、すべての接続が使用中の場合には問い合わせのキャンセルができなくなります。 問い合わせのキャンセルを必ず保証したい場合は、想定されるコネクション数の倍の値を設定してください。

また、PostgreSQLは一般ユーザによる同時接続をmax_connections - superuser_reserved_connections個まで許しています。

まとめると、max_pool、num_init_children、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) (クエリのキャンセルを考慮する場合)
			

このパラメータはサーバ起動時にのみ設定可能です。

5.2.2. 認証設定

enable_pool_hba (boolean)

trueの場合、Pgpool-IIはクライアント認証にpool_hba.confを使用します。 クライアント認証のためpool_hba.confを設定する方法について、詳細は項6.1を参照してください。 デフォルトはfalseです。

このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。

pool_passwd (string)

md5 認証で用いるパスワードのファイルのファイル名を指定します。 デフォルト値は"pool_passwd"です。 ''(空文字列)を指定すると パスワードファイルの使用は無効になります。 詳細は項6.2.2を参照してください

このパラメータはサーバ起動時にのみ設定可能です。

authentication_timeout (integer)

Pgpool-IIの認証処理のタイムアウト時間を秒単位で指定します。 0 を指定するとタイムアウトを無効にします。 デフォルト値は60です。

このパラメータはPgpool-IIの設定を再読み込みすることで変更可能です。