FQDN хостов PostgreSQL
Для подключения к хосту потребуется его FQDN — доменное имя. Его можно получить несколькими способами:
-
Скопируйте команду для подключения к кластеру в консоли управления
. Команда содержит заполненный FQDN хоста. Чтобы получить команду, перейдите на страницу кластера и нажмите кнопку Подключиться. -
Посмотрите FQDN в консоли управления:
- Перейдите на страницу кластера.
- Перейдите в раздел Хосты.
- Скопируйте значение в столбце FQDN хоста.
Для хостов кластера также используются особые FQDN.
Особые FQDN
Наравне с обычными FQDN, Managed Service for PostgreSQL предоставляет несколько особых FQDN, которые также можно использовать при подключении к кластеру.
В кластерах из нескольких хостов особые FQDN могут некоторое время (до 10 минут) указывать на старый хост, даже если он сменил роль (например, из мастера стал репликой). Если используется особый FQDN, который указывает на текущий мастер, то часть запросов на запись может завершиться неудачей — они могут быть направлены к реплике. Это связано с тем, что на обновление DNS-записей для особых FQDN требуется время. Если запрос на запись завершился ошибкой, повторите его позднее.
Текущий мастер
FQDN вида c-<идентификатор_кластера>.rw.mdb.yandexcloud.net всегда указывает на текущий хост-мастер в кластере. Идентификатор кластера можно запросить со списком кластеров в каталоге.
При подключении к этому FQDN разрешено выполнять операции чтения и записи.
Важно
Используйте подключение с помощью особого FQDN хоста-мастера только для процессов, которые допускают недоступность базы данных на запись продолжительностью до 10 минут.
Наименее отстающая реплика
FQDN вида c-<идентификатор_кластера>.ro.mdb.yandexcloud.net указывает на наименее отстающую от мастера реплику. Идентификатор кластера можно запросить со списком кластеров в каталоге.
Особенности:
- При подключении к этому FQDN разрешено выполнять только операции чтения.
- Если в кластере нет активных реплик, то этот FQDN укажет на текущий хост-мастер.
- Реплики, для которых вручную установлен источник репликации, не могут выбираться как наименее отстающие при использовании этого FQDN.
Выбор FQDN и способа подключения к кластеру
К кластеру можно подключиться с использованием FQDN хостов или с использованием особых FQDN. Если кластер состоит из нескольких хостов, то при подключении необходимо учитывать, что текущий мастер может в следующий момент времени стать репликой, и наоборот.
Важно
Если при автоматическом переключении мастера новым мастером или наименее отстающей репликой станет хост без публичного доступа, подключиться к такому хосту из интернета будет невозможно. Чтобы этого избежать, включите публичный доступ для всех хостов кластера.
Воспользуйтесь одним из способов, чтобы подключиться к хостам-мастерам с возможностью чтения и записи:
-
Подключитесь с помощью особого FQDN, который указывает на текущий мастер.
При переключении мастера этот FQDN может некоторое время указывать на бывший мастер, который стал репликой, поскольку необходимо время для обновления DNS-записи.
Поэтому если приложение использует такой FQDN, то оно должно корректно обрабатывать ситуацию, когда мастер временно недоступен. Например, можно повторять запросы на запись через некоторое время.
Пример подключения
В этом примере используется идентификатор кластера
c9qash3nb1v9********:psql "host=c-c9qash3nb1v9********.rw.mdb.yandexcloud.net \ port=6432 \ sslmode=verify-full \ dbname=<имя_БД> \ user=<имя_пользователя>" -
Подключитесь, перечислив все хосты кластера и указав параметр
target_session_attrs=read-write.Пример подключения
В этом примере перечисляются все хосты кластера.
Хосты имеют идентификаторы
rc1a-be***.mdb.yandexcloud.net,rc1b-5r***.mdb.yandexcloud.netиrc1d-t4***.mdb.yandexcloud.net:psql "host=rc1a-be***.mdb.yandexcloud.net,rc1b-5r***.mdb.yandexcloud.net,rc1d-t4***.mdb.yandexcloud.net \ port=6432 \ sslmode=verify-full \ dbname=<имя_БД> \ user=<имя_пользователя> \ target_session_attrs=read-write"
Воспользуйтесь одним из способов, чтобы подключиться к хостам с возможностью чтения:
-
Подключитесь с помощью особого FQDN, который указывает на наименее отстающую реплику.
Пример подключения
В этом примере используется идентификатор кластера
c9qash3nb1v9********:psql "host=c-c9qash3nb1v9********.ro.mdb.yandexcloud.net \ port=6432 \ sslmode=verify-full \ dbname=<имя_БД> \ user=<имя_пользователя>" -
Подключитесь, перечислив все хосты кластера и указав параметр
target_session_attrs=any.Пример подключения
В этом примере перечисляются все хосты кластера.
Хосты имеют идентификаторы
rc1a-be***.mdb.yandexcloud.net,rc1b-5r***.mdb.yandexcloud.netиrc1d-t4***.mdb.yandexcloud.net:psql "host=rc1a-be***.mdb.yandexcloud.net,rc1b-5r***.mdb.yandexcloud.net,rc1d-t4***.mdb.yandexcloud.net \ port=6432 \ sslmode=verify-full \ dbname=<имя_БД> \ user=<имя_пользователя> \ target_session_attrs=any"
Примечание
Параметр target_session_attrs можно указать, если для подключения используется клиент, работающий с библиотекой libpq.
Значение read-write для этого параметра поддерживается библиотекой libpq начиная с версии 10
Как обновить версию библиотеки, которую использует утилита psql
- Для дистрибутивов Linux на основе Debian — установите пакет
postgresql-client-10или новее (например, через apt-репозиторий ). - Для ОС, использующих RPM-пакеты, воспользуйтесь дистрибутивом PostgreSQL, доступным в yum-репозитории
.