[Документация Yandex Cloud](../../index.md) > [Yandex Managed Service for PostgreSQL](../index.md) > Вопросы и ответы > Высокая доступность и балансировка

# Высокая доступность и балансировка

* [Как исключить хост из выбора мастером?](#excluded-host)

* [Почему при настройке каскадной репликации возникает ошибка?](#cascade-error)

* [Как всегда подключаться к хосту-мастеру?](#connect-to-master-ha)

* [Как всегда подключаться к наименее отстающей от мастера реплике?](#connect-to-replica-ha)

* [Почему мастер и реплики поменялись местами?](#failover)

* [Можно ли настроить мультимастер в кластере или между двумя кластерами?](#setting-multimaster)

* [Как настроить балансировку, чтобы запросы на чтение уходили на реплики?](#balancing-replicas)

* [В каких случаях может происходить автоматическое переключение мастера?](#auto-failover)

#### Как исключить хост из выбора мастером? {#excluded-host}

Вы можете исключить хост из выбора мастером при автоматической или ручной смене хоста-мастера. Для этого настройте [каскадную репликацию](../concepts/replication.md#replication-manual): [укажите](../operations/hosts.md#update) источник репликации для хоста, который не должен становиться мастером.

{% note warning %}

Для обеспечения высокой доступности во время технического обслуживания в кластере должен быть хотя бы один хост-реплика без источника репликации.

{% endnote %}

#### Почему при настройке каскадной репликации возникает ошибка? {#cascade-error}

Текст ошибки:

```text
cluster should have at least 2 HA hosts to use cascade host
```

Ошибка возникает, если вы указываете источник репликации для единственной некаскадной реплики.

Для обеспечения высокой доступности в кластере должна быть хотя бы одна реплика без источника репликации. Во время технического обслуживания или при сбое хоста-мастера роль мастера переключится на эту реплику.

Подробнее о репликации читайте в [соответствующем разделе](../concepts/replication.md).

#### Как всегда подключаться к хосту-мастеру? {#connect-to-master-ha}

Чтобы подключиться к текущему хосту-мастеру, используйте [особый FQDN](../operations/connect/fqdn.md#special-fqdns). Он имеет вид `c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz`. При подключении к этому FQDN вы сможете выполнять операции чтения и записи.

{% cut "Пример команды для подключения к мастеру" %}

  ```bash
  psql "host=c-<идентификатор_кластера>.rw.mdb.yandexcloud.kz \
        port=6432 \
        sslmode=verify-full \
        dbname=<имя_БД> \
        user=<имя_пользователя>"
  ```

{% endcut %}

#### Как всегда подключаться к наименее отстающей от мастера реплике? {#connect-to-replica-ha}

Чтобы подключиться к наименее отстающей от мастера реплике, используйте [особый FQDN](../operations/connect/fqdn.md#special-fqdns). Он имеет вид `c-<идентификатор_кластера>.ro.mdb.yandexcloud.kz`. При подключении к этому FQDN вы сможете выполнять только операции чтения. 

{% cut "Пример команды для подключения к реплике" %}

```bash
psql "host=c-<идентификатор_кластера>.ro.mdb.yandexcloud.kz \
      port=6432 \
      sslmode=verify-full \
      dbname=<имя_БД> \
      user=<имя_пользователя>"
```

{% endcut %}

Если в кластере нет активных реплик, то этот FQDN укажет на текущий хост-мастер.

#### Почему мастер и реплики поменялись местами? {#failover}

Это значит, что произошло переключение роли мастера на хост-реплику. Переключение обеспечивает доступность кластера во время технического обслуживания и при выходе из строя хоста-мастера.

Чтобы всегда подключаться к текущему мастеру, используйте [особый FQDN](../operations/connect/fqdn.md#special-fqdns).

{% note warning %}

Используйте подключение с помощью особого FQDN хоста-мастера только для процессов, которые допускают недоступность базы данных на запись продолжительностью до 10 минут.

{% endnote %}

#### Можно ли настроить мультимастер в кластере или между двумя кластерами? {#setting-multimaster}

Нет, в сервисе Managed Service for PostgreSQL не поддерживается настройка мультимастера.


#### Как настроить балансировку, чтобы запросы на чтение отправлялись только на реплики? {#balancing-replicas}

Балансировка не осуществляется на стороне Managed Service for PostgreSQL, поэтому ее необходимо реализовать в бэкенде вашего приложения. Чтобы отправлять запросы на чтение репликам, приложение должно определить самостоятельно, какой из хостов является репликой, а какой — мастером. Например, это можно сделать с помощью библиотеки `libpq`. Подробнее читайте в [документации PostgreSQL](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNECT-TARGET-SESSION-ATTRS).

Либо вы можете воспользоваться [особым FQDN](../operations/connect/fqdn.md#fqdn-replica), который указывает на наименее отстающую реплику.

Дополнительные сведения в разделе [Высокая доступность](../concepts/high-availability.md).

#### В каких случаях может происходить автоматическое переключение мастера? {#auto-failover}

Хост-мастер может автоматически переключиться на другой хост:

* во время операций [изменения кластера](../operations/update.md);
* при выходе текущего хоста-мастера из строя;
* при восстановлении работоспособности кластера;
* при [техническом обслуживании](../concepts/high-availability.md#maintenance-settings) кластера.

Переключение мастера обеспечивает правильную работу кластера при указанных действиях.

{% note info %}

Чтобы обеспечить [высокую доступность](../concepts/high-availability.md), в кластере всегда есть хотя бы одна реплика без явно указанного [источника репликации](../concepts/replication.md#replication-manual), которая может стать мастером.

{% endnote %}