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.
Алиасы
Алиасы позволяют обращаться к мастеру, наименее отстающей реплике, а также к каждому конкретному хосту кластера Managed Service for PostgreSQL по стабильному человекочитаемому имени, независимо от внутренних FQDN. Алиасы задаются пользователем и могут использоваться наравне с обычными и особыми FQDN.
Алиас кластера
Алиас кластера всегда указывает на текущий хост-мастер в кластере Managed Service for PostgreSQL. Имеет следующий вид:
c-<краткое_имя>-pg-<идентификатор_каталога>.rw.mdb.yandexcloud.net
Где <краткое_имя> — условное имя, которое задается пользователем при формировании алиаса.
Алиас кластера должен быть уникальным в рамках каталога. Для каждого кластера можно назначить только один алиас.
Алиасы кластеров позволяют переключить нагрузку с одного кластера на другой, например после восстановления из бэкапа. Для переключения достаточно переместить алиас между кластерами. При этом вносить изменения на стороне приложения не требуется.
Важно
После переключения мастера может потребоваться до 10 минут на обновление DNS-записей. В течение этого времени алиас кластера может указывать на старый хост, который уже стал репликой. Используйте алиас кластера только для процессов, которые допускают недоступность базы данных на запись продолжительностью до 10 минут.
Алиасы хостов
Алиас, указывающий на конкретный хост в кластере, имеет следующий вид:
h-<краткое_имя_хоста>-pg-<идентификатор_каталога>.mdb.yandexcloud.net
Где <краткое_имя_хоста> — условное имя, которое задается пользователем при формировании алиаса хоста.
Алиас хоста должен быть уникальным в рамках каталога. Для каждого хоста можно назначить только один алиас.
Выбор 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-репозитории
.