I'm using Postgres 11.5 and docker. I have started 3 containers - 1 master and 2 slaves.
pg-0 master:
docker run --detach --name pg-0 \
--network my-network \
--env REPMGR_PARTNER_NODES=pg-0,pg-1,pg-2 \
--env REPMGR_NODE_NAME=pg-0 \
--env REPMGR_NODE_NETWORK_NAME=pg-0 \
--env REPMGR_PRIMARY_HOST=pg-0 \
--env REPMGR_PASSWORD=repmgrpass \
--env POSTGRESQL_PASSWORD=secretpass \
bitnami/postgresql-repmgr:latest
pg-1 slave:
docker run --detach --name pg-1 \
--network my-network \
--env REPMGR_PARTNER_NODES=pg-0,pg-1,pg-2 \
--env REPMGR_NODE_NAME=pg-1 \
--env REPMGR_NODE_NETWORK_NAME=pg-1 \
--env REPMGR_PRIMARY_HOST=pg-0 \
--env REPMGR_PASSWORD=repmgrpass \
--env POSTGRESQL_PASSWORD=secretpass \
bitnami/postgresql-repmgr:latest
pg-2 slave:
docker run --detach --name pg-2 \
--network my-network \
--env REPMGR_PARTNER_NODES=pg-0,pg-1,pg-2 \
--env REPMGR_NODE_NAME=pg-2 \
--env REPMGR_NODE_NETWORK_NAME=pg-2 \
--env REPMGR_PRIMARY_HOST=pg-0 \
--env REPMGR_PASSWORD=repmgrpass \
--env POSTGRESQL_PASSWORD=secretpass \
bitnami/postgresql-repmgr:latest
Replication works fine between containers, and also if I stop master pg-0 then pg-1 \ pg-2 takes over to be the master.
My issue is, if I have python application on a different container that connect to db pg-0 master What do i do when the master is changing to pg-1 or pg-2? I don't want db connection to try to connect to all 3 servers, I'm sure there is a better way.
The way I connect from python app is using the container name - host =pg-0 What do to when db master host name container changed?
EDIT : this what i try in API
>>> psycopg2.connect(host="db-0, db-1", user="user", password="password", database="data")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect
conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not translate host name "db-0, db-1" to address: Temporary failure in name resolution
my package is psycopg2-2.8.4 and using python3.7