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接続を受け付けません。 デフォルト値はlocalhostです。 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に接続しようとした場合、reserved_connectionsが1以上に設定されている場合を除き、それらのクライアントは、Pgpool-IIのどれかのプロセスへの接続が閉じられるまで待たされます(PostgreSQLのように接続拒否エラーにはなりません。)。 待たされる数の上限は、listen_backlog_multiplier * num_init_children です。

待ち行列は、OS内部に作られ、「listenキュー」と呼ばれます。 listenキューの長さは「バックログ」と呼ばれます。 システムによってはバックログの上限が設定されており、listen_backlog_multiplier*num_init_childrenがこれを越える場合はバックログを大きく設定する必要があります。 さもないと高負荷時に以下のような問題が発生する可能性があります:

  • Pgpool-IIへの接続が失敗する。

  • カーネル内で行われるリトライにより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) (クエリのキャンセルを考慮する場合)
      

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

reserved_connections (integer)

このパラメータが1以上に設定されていると、(num_init_children - reserved_connections)以上のクライアントからの接続はブロックされるのではなく受け付けられず、"Sorry, too many clients already"というエラーになります。 たとえば、reserved_connections = 1で、num_init_children = 32なら、32番目のクライアントからの接続は拒否されます。 これは、PostgreSQLと似た挙動で、クライアントからの接続数が多く、各セッションが長時間に渡るようなシステムで有効です。 この場合、listenキューが非常に長くなる可能性があり、システムを不安定にさせます。 こうした状況では、このパラメータを0以外にして、listenキューが長くなるのを防ぐのは良い考えです。

このパラメータを0にすると、クライアントからの接続要求は拒否されなくなります。 デフォルト値は0です。 このパラメータはサーバ起動時にのみ設定可能です。

5.2.2. 認証設定

enable_pool_hba (boolean)

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

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

pool_passwd (string)

認証用のパスワードファイルへのパス(絶対パスまたは相対パス)を指定します。 デフォルト値は"pool_passwd"です。 相対パスは、設定ファイルが置かれているディレクトリを基準としています。 ''(空文字列)を指定すると パスワードファイルの使用は無効になります。

パスワードは、3つの形式でpool_passwdファイルに保存できます。 AES256暗号化形式、平文形式、md5形式です。 Pgpool-IIは接頭辞によってパスワードの形式を確認するため、pool_passwd内の各パスワードのエントリはパスワードの形式を接頭語として付ける必要があります。

平文形式のパスワードを保存するためには、TEXT接頭辞を使用します。 例として、pool_passwd内にクリアテキストパスワード文字列"mypassword"を保存する場合、パスワード文字列の先頭にTEXT接頭辞を追加します。 例えば、TEXTmypasswordとなります。

同様に、md5ハッシュパスワードはmd5接頭辞、AES256暗号化パスワード形式はAES接頭辞を使って保存することができます。 AES256暗号化パスワードの詳細は、項6.4を参照してください。

有効な接頭辞がない場合、Pgpool-IIは平文のパスワードとして文字列を見なします。

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

allow_clear_text_frontend_auth (boolean)

PostgreSQLバックエンドサーバはあるユーザの認証に対してmd5またはSCRAM認証を必要としており、そのユーザのパスワードが"pool_passwd"ファイルに存在しない場合、allow_clear_text_frontend_authPgpool-IIがフロントエンドクライアントとクリアテキストパスワード認証を行い、クライアントから平文形式のパスワードを取得しバックエンド認証のために使用することを許可します。

デフォルトはfalseです。

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

注意: allow_clear_text_frontend_authenable_pool_hbaが有効でない場合のみ機能します。

authentication_timeout (integer)

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

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