[pgpool-general-jp: 1663] Re: pcp_attach_node実行時の動きについて
Tatsuo Ishii
ishii @ sraoss.co.jp
2021年 2月 1日 (月) 09:23:04 JST
> 石井様
>
> いつもお世話になっております。
> 北村です。
>
> ご教示いただきありがとうございます。
どういたしまして。
> ★1のメッセージについて、子プロセスがアイドル状態の時に再起動が
> 行われているとのこと、承知いたしました。
>
> ★2のメッセージについては、メッセージは出力されていますが、
> 今回の設定(connection_cache = off)では実際にバックエンドへの
> コネクションを破棄してはいないはず、とのこと承知いたしました。
はい。元々破棄すべきコネクションがないので。
> 今回、javaアプリケーション側でコネクションプーリングを行っている環境でして、
> そのコネクションが破棄されたのではないかと考えたのですが
> そういった可能性は考えられますでしょうか?
Java側のコネクションプーリングの仕様はわかりませんが、完全にPgpool-II
へのコネクションを保持し続けているとすれば、*2のメッセージが出ないはず
です。ただ、実際にはメッセージが出ているようなので、推測ですが、何かの
条件(たとえば一定時間経過後)に一旦Pgpool-IIへのコネクションを切るよ
うな仕様になっているのかも知れません。
> 以上、よろしくお願いいたします。
>
>> -----
>>
>> こんにちは。
>>
>> 石井です。
>>
>> > いつもお世話になっております。
>> > 北村と申します。
>> >
>> > pcp_attach_nodeコマンドを実行した際の、Pgpool-IIの
>> > 内部の動きについてご教示いただけませんでしょうか。
>> >
>> > [環境]
>> > ○PostgreSQL 11
>> > - RHEL 7に構築
>> > - 2台構成で非同期ストリーミングレプリケーションを構築
>> > ○Pgpool-II 4.0.2
>> > - RHEL 7に構築(DBサーバとは別サーバ)
>> > - コネクションプーリング機能は使用しない(connection_cache = off)
>> > (javaのコネクションプーリングを使用)
>> > - 負荷分散機能は使用しない(load_balance_mode = off)
>> >
>> > [状況]
>> > 運用中(アプリケーションがPgpool-II経由でプライマリDBにアクセス中)に、
>> > スタンバイDBのリカバリ(pg_basebackup)を行いレプリケーションを再開し、
>> > pcp_attach_nodeを実行しPgpool-II にスタンバイDBを復帰させました。
>> > 以下は、pcp_attach_node実行時のPgpool-IIのログです。
>> > --------------------------------
>> > LOG: Do not restart children because we are failing back node id 1 host: dbnode02 port: 5432 and we are in streaming
>> replication mode and not all backends were down
>> > LOG: find_primary_node_repeatedly: waiting for finding a primary node
>> > LOG: verify_backend_node_status: primary 0 does not connect to standby 1
>> > LOG: verify_backend_node_status: primary 0 owns only 0 standbys out of 1
>> > LOG: find_primary_node: primary node is 0
>> > LOG: find_primary_node: standby node is 1
>> > LOG: failover: set new primary node: 0
>> > LOG: failover: set new master node: 0
>> > LOG: new IPC connection received
>> > LOG: received the failover indication from Pgpool-II on IPC interface
>> > LOG: watchdog is informed of failover end by the main process
>> > LOG: worker process received restart request
>> > LOG: failback done. reconnect host dbnode02(5432)
>> > LOG: failback event detected ★1
>> > DETAIL: restarting myself ★1
>> > LOG: failback event detected
>> > DETAIL: restarting myself
>> > LOG: selecting backend connection ★2
>> > DETAIL: failback event detected, discarding existing connections ★2
>> > ・・・
>> > --------------------------------
>> >
>> > [ご教示いただきたい事項]
>> > 1)★1のメッセージが、pcp_attach_node実行後に多数続けて出力されて
>> > いるのですが、このメッセージは、pcp_attach_nodeの実行により、
>> > 子プロセスの再起動を行っているという意味でよろしいでしょうか?
>>
>> はい、そうです。pcp_attach_nodeの実行により、使用可能なDBノードの数が
>> 増えたので、その情報を子プロセスを再起動することによって取り込んでいま
>> す。再起動は子プロセスがアイドル状態(フロントエンドからの接続がない状態)の時に行われます[1]。
>>
>> > また、pcp_attach_node実行後に子プロセスの再起動が行われるのは
>> > 仕様となりますでしょうか?
>>
>> はい、仕様どおりです。
>>
>> > 2)★2のメッセージも、pcp_attach_node実行後に何度か出力されて
>> > いるのですが、このメッセージは、pcp_attach_node実行時にDBへの
>> > コネクションが張られていたため、そのコネクションを破棄した、
>> > という意味でよろしいでしょうか?
>>
>> このメッセージが出力されるのは、フロントエンドからの接続を受け付けたタ
>> イミングです。pcp_attach_nodeが実行され、かつ[1]の処理が行われていない
>> 時には、コネクションプールの情報が古い(新しいDBノードへの接続がない)
>> 可能性があるので、バックエンドへのコネクションプールの中で、
>> connection_life_timeを超えてアイドル状態のコネクションがあればそれをを
>> 破棄します。
>>
>> しかし北村さんの設定ではconnection_cache = offによってバックエンドへの
>> コネクションキャッシュがオフになっているため、実際にはこの処理でバック
>> エンドへのコネクションを破棄することはないと思われます。破棄するような
>> コネクションは存在していないはずなので。
>>
>> > また、pcp_attach_node実行により、接続済みのコネクションが
>> > 破棄されることは仕様となりますでしょうか?
>>
>> はい、そうです。
>>
>> > 以上、よろしくお願いいたします。
>> --
>> Tatsuo Ishii
>> SRA OSS, Inc. Japan
>> English: http://www.sraoss.co.jp/index_en.php
>> Japanese:http://www.sraoss.co.jp
>
pgpool-general-jp メーリングリストの案内