[pgpool-general-jp: 1661] Re: pcp_attach_node実行時の動きについて

Tatsuo Ishii ishii @ sraoss.co.jp
2021年 1月 26日 (火) 17:54:35 JST


こんにちは。

石井です。

> いつもお世話になっております。
> 北村と申します。
> 
> 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 メーリングリストの案内