Я использую Postgres 11.5 и докер. Я запустил 3 контейнера - 1 ведущий и 2 ведомых.
ведущий pg-0:
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:
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:
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
Репликация отлично работает между контейнерами, а также, если я остановлю мастер pg-0, тогда pg-1 \ pg-2 займет место мастера.
Моя проблема в том,если у меня есть приложение python в другом контейнере, который подключается к мастеру db pg-0 Что мне делать, когда мастер меняется на pg-1 или pg-2? Я не хочу, чтобы соединение db пыталось соединиться со всеми 3 серверами, я уверен, что есть лучший способ.
Способ, которым я подключаюсь из приложения python, использует имя контейнера - host = pg-0Что делать, когда изменился контейнер имени хоста db master?
РЕДАКТИРОВАТЬ: это то, что я пытаюсь в 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
мой пакет - psycopg2-2.8.4 и использует python3.7