Pgpool-II & PostgreSQL w/ repmgr

Pgpool-IIについては、下記で動作確認をしましたが、ここではさらに、pgpool.confで設定されるコマンド、

follow_primary_command
failover_command
failback_command

がどのタイミングで実行されるかを検証してみました。

Pgpool-II & PostgreSQL

環境)Docker Desktop, pgAdmin4 / Mac(arm)
pgpool:5432,pg-0:5433,pg-01:5434 pgAdmin4からそれぞれのportにアクセス。

参考)https://hub.docker.com/r/bitnami/pgpool

ここで使わせていただくdoker imageのpostgresqlは、Replication Manager(repmgr)が動作していますが、これについては簡単な確認にとどめます。

docker-compose.yml

起動

docker-compose up

デーモンにせず標準出力のログを確認する。(永続性は考えず)
正しい挙動かどうかわからないが、pg-1がWaiting for primary node…後しばらくして停止

pgpool-pg-1-1 | postgresql-repmgr 01:14:00.93 INFO ==> Waiting for primary node…
pgpool-pg-1-1 exited with code 1

pg-1を手動でstart

テーブルの作成

pg-0,pg-1でも確認

pgpool.confを編集


呼ばれたとき標準出力されるように設定。(見落としがないようわかりやすい文字列に)

設定を反映させるため、reload。(stopするとコンテナが落ちるため。) デフオルトと場所が違うためコピー。あまり良いやり方ではないが今回の目的が確認できれば良いということと、永続性を考慮していないためokとする。

pg-0を手動でstop

ログを確認(抜粋)

pgpool-pgpool-1 | 2023-10-03 02:03:13.516: main pid 1: LOG: execute command: echo “>>> Failoverrrr 0 pg-0 5432 /opt/bitnami/pgpool/data 1 pg-1”
pgpool-pgpool-1 | >>> Failoverrrr 0 pg-0 5432 /opt/bitnami/pgpool/data 1 pg-1
pgpool-pgpool-1 | 2023-10-03 02:03:13.741: follow_child pid 6072: LOG: execute command: echo “>>> follow_primary – 0 pg-0 5432 /opt/bitnami/pgpool/data 1 pg-1”
pgpool-pgpool-1 | >>> follow_primary – 0 pg-0 5432 /opt/bitnami/pgpool/data 1 pg-1

テーブル追加

pg-0を手動でstart

ログを確認(抜粋)

pgpool-pg-0-1 | postgresql-repmgr 02:10:44.43 INFO ==> Cloning data from primary node…
pgpool-pgpool-1 | 2023-10-03 02:11:38.308: main pid 1: LOG: execute command: echo “>>> Failbackkkk – 0 pg-0 5432 /opt/bitnami/pgpool/data 0 pg-0”
pgpool-pgpool-1 | >>> Failbackkkk – 0 pg-0 5432 /opt/bitnami/pgpool/data 0 pg-0


目的のコマンドがどのタイミングで呼び出されているか、ログから確認できました。まがrepmgrの機能でpg-0がPrimaryNodeからCloningされたことで、テーブルが追加されたことも確認できました。