Pgpool-IIについては、下記で動作確認をしましたが、ここではさらに、pgpool.confで設定されるコマンド、
follow_primary_command
failover_command
failback_command
がどのタイミングで実行されるかを検証してみました。
環境)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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# Copyright VMware, Inc. # SPDX-License-Identifier: APACHE-2.0 version: '2.1' services: pg-0: image: docker.io/bitnami/postgresql-repmgr:14 ports: - 5433:5432 environment: - POSTGRESQL_POSTGRES_PASSWORD=adminpassword - POSTGRESQL_USERNAME=customuser - POSTGRESQL_PASSWORD=custompassword - POSTGRESQL_DATABASE=customdatabase - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1 - REPMGR_PRIMARY_HOST=pg-0 - REPMGR_PARTNER_NODES=pg-1,pg-0 - REPMGR_NODE_NAME=pg-0 - REPMGR_NODE_NETWORK_NAME=pg-0 - REPMGR_USERNAME=repmgr - REPMGR_PASSWORD=repmgrpassword pg-1: image: docker.io/bitnami/postgresql-repmgr:14 ports: - 5434:5432 environment: - POSTGRESQL_POSTGRES_PASSWORD=adminpassword - POSTGRESQL_USERNAME=customuser - POSTGRESQL_PASSWORD=custompassword - POSTGRESQL_DATABASE=customdatabase - POSTGRESQL_NUM_SYNCHRONOUS_REPLICAS=1 - REPMGR_PRIMARY_HOST=pg-0 - REPMGR_PARTNER_NODES=pg-0,pg-1 - REPMGR_NODE_NAME=pg-1 - REPMGR_NODE_NETWORK_NAME=pg-1 - REPMGR_USERNAME=repmgr - REPMGR_PASSWORD=repmgrpassword pgpool: image: docker.io/bitnami/pgpool:4 ports: - 5432:5432 environment: - PGPOOL_BACKEND_NODES=0:pg-0:5432,1:pg-1:5432 - PGPOOL_SR_CHECK_USER=repmgr - PGPOOL_SR_CHECK_PASSWORD=repmgrpassword - PGPOOL_ENABLE_LDAP=no - PGPOOL_POSTGRES_USERNAME=postgres - PGPOOL_POSTGRES_PASSWORD=adminpassword - PGPOOL_ADMIN_USERNAME=admin - PGPOOL_ADMIN_PASSWORD=adminpassword - PGPOOL_ENABLE_LOAD_BALANCING=yes - PGPOOL_POSTGRES_CUSTOM_USERS=customuser - PGPOOL_POSTGRES_CUSTOM_PASSWORDS=custompassword healthcheck: test: ["CMD", "/opt/bitnami/scripts/pgpool/healthcheck.sh"] interval: 10s timeout: 5s retries: 5 |
起動
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
呼ばれたとき標準出力されるように設定。(見落としがないようわかりやすい文字列に)
設定を反映させるため、reload。(stopするとコンテナが落ちるため。) デフオルトと場所が違うためコピー。あまり良いやり方ではないが今回の目的が確認できれば良いということと、永続性を考慮していないためokとする。
ログを確認(抜粋)
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されたことで、テーブルが追加されたことも確認できました。