pgpool-IIはPostgreSQL専用のミドルウェアで、PostgreSQLのデータベースクライアントとPostgreSQLサーバの間に割り込む形で動作し、PostgrSQLに以下のような機能を追加します。
pgpool-IIはPostgreSQLバックエンドとフロントエンドの通信プロトコルを理解してその間を中継します。すなわち、PostgreSQLのデータベースアプリケーションからはPostgreSQLサーバに、PostgreSQLからはデータベースアプリケーションに見えるように設計されています。そのため、PostgreSQLそのものはもちろん、アプリケーションの開発言語によらず、PostgreSQLのデータベースアプリケーションにほとんど手を加えることなく、pgpool-IIの機能が利用できます。
対応するPostgreSQLのバージョンは、PostgreSQLの6.4以降です。ただしパラレルクエリモードを使用するときはPostgreSQL 7.4以降をお使いください。
また、PostgreSQL 7.4より前のバージョンでは、使用できる機能に制限事項があります。
もっとも、そのような古いバージョンのPostgreSQLはそもそも使うべきではありません。
pgpool-II配下で利用するPostgreSQLサーバのメジャーバージョンは一致していなければなりません。
また、オンラインリカバリ機能を利用するときは、OSやハードウェアアーキテクチャを同じものにしなければなりません。
Linux用のRPMパッケージは、CentOS、RedHat Enterprise Linux、Fedora、Debian用などが提供されています。
該当リポジトリをチェックしてみてください。
pgpool-IIのソースコードからのインストールには、gcc 2.9以上、およびGNU makeが必要です。
また、pgpool-IIはlibpq(PostgreSQL付属のクライアントライブラリ)を使用するので、ビルドを行うマシン上にlibpqがインストールされていることが必要です。
また、OpenSSLサポートを有効にする場合は、OpenSSLライブラリと開発用のヘッダーファイルが必要です。
pgpool-IIの設定ファイルはデフォルトでは/usr/local/etc/pgpool.confおよび
/usr/local/etc/pcp.confです。pgpool-IIは動作モードによって使用できる機能と、
必要な設定項目が異なります。
どの動作モードでも、pcp.confの設定は必要です。pgpool-IIには管理者がpgpool-IIの
停止や情報取得などの管理操作を行うためのインターフェイスが用意されていま
す。そのインターフェイスを利用するためにはユーザ認証が必要になるので、そ
のユーザ名とパスワードをpcp.confに登録します。
pgpool-IIをインストールすると、$prefix/etc/pcp.conf.sampleができるので、それを
$prefix/etc/pcp.confという名前でコピーします。
pgpool-IIをインストールすると、インストール先ディレクトリ(デフォルトでは/usr/local)/etc/pgpool.conf.sampleができるので、それを
インストール先ディレクトリ/etc/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_keyとssl_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_keyとssl_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_keyとssl_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_keyとssl_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