conmgrプロセスのためのディレクトリに、設定ファイルであるconmgr.confを格納します。
conmgr.confの記述方法
conmgr.confでは、記号(#)以降をコメントと見なします。
パラメータ名=値で1組の設定とし、1行で書かなければなりません。
各パラメータの型に合った形式で値を設定してください。型と形式は以下のとおりです。
integer: 数値型。10進数による数字の列で表記します。
string: 文字列型。引用符(')で囲むことで空白を含めることもできます。引用符を含める場合には、引用符でエスケープしてください。
enum: 列挙型。指定可能な値が決められています。
設定するパラメータ
conmgrプロセスが、アプリケーションからの接続を待ち受けるためのポート番号を指定してください。
1以上かつ65535以下の値を指定してください。デフォルトは27546です。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
インスタンスのホスト名またはIPアドレスを指定してください。
IPv6アドレスも使用できます。もし、IPアドレスを直接指定するのであれば、backend_hostaddrパラメータを使用した方が名前解決のための時間を節約できます。backend_hostパラメータとbackend_hostaddrパラメータの両方が指定された場合には、backend_hostaddrパラメータを使用します。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
複数のインスタンスを見分けるために、backend_host0, backend_host1, ... のようにゼロから始まる番号をパラメータ名の直後に付けてください。この番号をインスタンス番号と呼びます。同じインスタンス番号で識別されるパラメータによって、1つのインスタンスの設定が構成されます。
レプリケーション構成から一部のインスタンスを除外したいときには、単にそのインスタンスの設定を削除します。
注意
“1.1.2 生死監視機能の仕組み”の“システム構成に関する注意事項”も参照してください。
注意
conmgr.confに設定したインスタンスの中に、プライマリが含まれない場合には、cm_ctlコマンドでConnection Managerを起動するときに、-Wオプションを付けてください。-Wオプションを付けないと、プライマリとの接続が完了できるまでcm_ctlコマンドが復帰しないからです。
例えば、ある2つのインスタンスが、「ホスト名:host0、ポート番号:5432」と「ホスト名:host1、ポート番号:2345」で待ち受けている場合、以下のように記述します。
backend_host0='host0'
backend_port0=5432
backend_host1='host1'
backend_port1=2345
以下のように異なるインスタンス番号の設定を混合することもできます。
backend_host0='host0'
backend_host1='host1'
backend_port0=5432
backend_port1=2345
以下のように欠番(インスタンス番号1)があっても構いません。
backend_host0='host0'
backend_host2='host2'
backend_port0=5432
backend_port2=2345
以下のインスタンス番号1のように、ホスト名が省略されていた場合は設定ファイルをロードしたときにエラーが発生します。
backend_host0='host0'
backend_host2='host2'
backend_port0=5432
backend_port1=5555
backend_port2=2345
インスタンスのpostmasterが待ち受けるポート番号を指定してください。
1以上かつ65535以下の値を指定してください。デフォルトは27500です。backend_hostパラメータと同じように、インスタンス番号を付けてください。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
watchdogプロセスが待ち受けるポート番号を指定してください。
このポートには、conmgrプロセスが接続しますが、ユーザーアプリケーションは接続しません。postgresql.confのwatchdog.portパラメータと同じ値を設定しなければなりません。1以上かつ65535以下の値を指定してください。デフォルトは27545です。backend_hostパラメータと同じように、インスタンス番号を付けてください。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
生死監視のためのハートビートパケットの送信間隔を指定します。
heartbeat_timeoutパラメータと併せて使用します。Connection Managerの生死監視では、接続の両端から常に定期的にパケットを送信し続けます。もう一方の側から一定時間以内にパケットを受け取れなければリンクがダウンしたとみなします。
この方式はTCP keepaliveとは異なる方式であることに注意してください。TCP keepaliveは一定以上の無通信(idle)状態があったときに初めてkeepaliveのパケットを送信し、そのパケットに対するACKを受け取れることを期待します。ACKを受け取れなければ指定された回数だけこれを繰り返してからリンクがダウンしたとみなします。
heartbeat_intervalパラメータとheartbeat_timeoutパラメータは、conmgrプロセスからwatchdogプロセスに伝達され、watchdogプロセス側からのハートビートパケットの送信間隔にも適用されます。もし、watchdogプロセスが、heartbeat_intervalパラメータに3秒を設定したconmgrプロセスと5秒に設定したconmgrプロセスの両方から接続された場合には、前者のプロセスには3秒間隔でハートビートパケットを送信し、後者のプロセスには5秒間隔でハートビートパケットを送信します。
単位は秒です。1秒以上を指定してください。デフォルトは10秒です。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
本パラメータで指定した時間を超えて生死監視のためのハートビートパケットを受信できなかった場合には、異常が発生したとみなしてアプリケーションに異常を通知します。
このパラメータはheartbeat_intervalパラメータを基準として決めてください。設定ファイルをロードしたときにはエラーが発生しませんが、少なくともheartbeat_intervalパラメータよりも多い値でなければ、生死監視では常に異常であるとみなされます。
単位は秒です。1秒以上を指定してください。デフォルトは20秒です。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
heartbeat_intervalパラメータとheartbeat_timeoutパラメータの設定値と生死監視タイムアウトの関係については、以下の図を参照してください。
一度異常を検知した後、再度、生死監視を確立しようと試みる間隔を指定します。
このパラメータは、データベースサーバだけが起動されていて、インスタンスが起動されていない場合に役に立ちます。このような状況ではTCP接続はただちに失敗し、間隔なくリトライを試みることはできないためです。極端に長い値を指定すると、それだけインスタンスの起動に気づくのが遅れる可能性があります。もし、ある接続の試みが長い時間をかけて失敗したとしても、heartbeat_connect_intervalパラメータで指定された時間が経過した後に次の接続を試みます。
単位は秒です。1秒以上を指定してください。デフォルトは1秒です。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
生死監視を確立するための接続のタイムアウトを指定します。
接続とはTCP接続および最初のハートビートパケットをwatchdogプロセスに送り、watchdogプロセスから返信を受け取るまでの時間を含みます。このパラメータが特に必要とされるのは、相手側サーバがダウンしていたり、ネットワークが繋がっていなかったりする場合です。このような場合には、TCP接続がオペレーティングシステムの設定にしたがって長期間に渡って試行され、接続が失敗するまでに時間がかかるためです。
単位は秒です。1秒以上を指定してください。デフォルトは10秒です。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
メッセージの出力先を指定します。
複数の出力先を指定することができます。複数指定するときには、カンマで区切って列挙し、全体を単一引用符で囲ってください。
指定できるのは、“stderr”と“syslog”です。デフォルトはstderrのみに出力します。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
指定できるのは、“stderr”と“eventlog”です。デフォルトはstderrのみに出力します。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
どのレベルのメッセージを出力するかを指定します。
DEBUG、INFO、NOTICE、WARNING、ERROR、LOG、FATAL、またはPANICのいずれかを指定できます。指定したレベルよりも低いレベルのメッセージは出力されません。デフォルトは“WARNING”です。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
conmgrプロセスに同時接続する接続数の最大値を指定します。
この最大数を超えるクライアントからの接続があった場合には、クライアントにエラーメッセージを送信することなく接続を強制的に閉鎖します。
また、conmgrプロセスは、レベル“LOG”でlog_destinationによる指定先にこの事実を出力します。0以上の値を指定してください。
0を指定した場合には無制限です。デフォルトは0です。このパラメータの変更を反映するためには、conmgrプロセスの再起動が必要です。
注意
OSのユーザーリミットによってconmgrプロセスに課された同時にオープンできるファイルディスクリプタの上限数(ulimitコマンドの-nで確認することができます)を以下の計算式で導出した値よりも大きな値にしてください。そうしなければ、ユーザーリミットによる制限に抵触したときに、conmgrプロセスは異常終了します。
9 + conmgr.confに指定したデータベースインスタンスの数 × 2 + conmgr.confに指定したmax_connections
接続に関する定義について
conmgr.confに設定するIPアドレスまたはホスト名、ポート番号とプロセスの関係について、以下の図に示します。