Планирование топологии кластера
При планировании топологии кластера важно понимать, что может нарушить работу кластера и насколько ваше приложение толерантно к подобным нарушениям.
Работа кластера может быть нарушена в следующих ситуациях:
- Плановое обслуживание оборудования, в том числе:
- обновление оборудования;
- обновление ОС, BIOS и встроенного программного обеспечения;
- изменение конфигурации ОС;
- обновления безопасности.
- Внеплановое обслуживание при возникновении неисправностей оборудования или сетевой инфраструктуры.
- Проблемы связанные с движком базы данных или пользовательской нагрузкой, например:
- нехватка оперативной памяти;
- недостаток места на диске.
Поведение кластера в описанных выше ситуациях зависит от его топологии. В Yandex Managed Service for PostgreSQL доступны несколько вариантов топологии кластера. Вы можете выбрать наиболее подходящий под ваши требования вариант.
Чтобы кластер из двух и более хостов оставался доступен на чтение при переключении мастера, требуется дополнительная настройка.
Варианты топологии кластера
В Managed Service for PostgreSQL доступны следующие варианты топологии кластера:
- Кластер с одним хостом.
- Кластер с двумя хостами.
- Кластер с тремя и более хостами.
Кластер с одним хостом
Кластер с одним хостом — это самый дешевый и простой в работе вариант. Рекомендуется использовать его для тестовых кластеров или production-приложений, не требующих высокой доступности кластера.
Преимущества:
- Цена — такой кластер дешевле кластера из нескольких хостов (в зависимости от выбранного класса хостов).
- Простота работы — хост-мастер всегда один, поэтому приложению не нужно поддерживать переключение мастера.
Недостатки:
- На кластер из одного хоста не распространяется Соглашение об уровне обслуживания (SLA)
. - Кластер из одного хоста не обеспечивает отказоустойчивость. При выходе из строя ВМ хоста-мастера кластер будет недоступен на чтение и запись до окончания работ по восстановлению ВМ.
- При аварии на хосте-мастере данные будут восстанавливаться из резервных копий. При этом возможна потеря данных, записанных между последним резервным копированием и моментом отказа хоста-мастера.
Кластер с двумя хостами
Кластер с двумя хостами соответствует критериям высокой доступности и на него распространяется SLA
По сравнению с кластером из одного хоста кластер с двумя хостами дает следующие преимущества:
- Балансировка при чтении данных на два хоста, что ускоряет работу кластера.
- Автоматическое переключение мастера при недоступности текущего хоста-мастера, если включена опция Автоматическое переключение мастера. Это вызовет кратковременную недоступность кластера на запись, пока не произойдет переключение, но при этом кластер все равно будет доступен на чтение.
Кластер с тремя и более хостами
Кластер с тремя или более хостами соответствует критериям высокой доступности и на него распространяется SLA
По сравнению с кластерами из двух хостов кластер с тремя и более хостами дает следующие преимущества:
-
Вместо синхронной репликации применяется кворумная репликация. Это ускоряет подтверждение транзакций и снижает риски рассинхронизации данных на репликах.
Транзакция в среднем подтверждается быстрее: ее должны подтвердить хост-мастер и не менее половины хостов-реплик.
-
Можно балансировать запросы на чтение между мастером и как минимум двумя репликами. Кроме ускорения работы кластера это позволяет вашему приложению отправлять запросы на чтение данных на конкретные хосты этого кластера. Это может ускорить получение данных если ваше приложение расположено в той же зоне доступности, что и хост кластера.
-
Кластер будет доступен на чтение даже при мажорных обновлениях версии PostgreSQL.
Доступность кластера при разных топологиях
Информация о доступности кластера для записи верна при условии, что в кластере настроено автоматическое переключение хоста-мастера. Эта настройка необходима, чтобы кластер сам восстанавливал работоспособность при выходе из строя или недоступности мастера. В противном случае кластер будет недоступен для записи до тех пор, пока мастер не вернется в строй или не будет переключен вручную.
Количество хостов, указанное в таблицах, включает в себя хост-мастер и хосты-реплики, для которых используется автоматическая репликация. Хосты-реплики, для которых указан источник репликации, не учитываются.
Топология кластера |
Один хост |
Два хоста |
Три хоста и более ( |
|
|
|
|
Не используется |
Используется |
Используется |
|
Роли хостов |
Мастер |
Мастер и одна синхронная реплика |
Мастер и |
Доступность кластера при при техническом обслуживании или выходе хоста-мастера из строя |
Недоступен для записи и чтения |
Может быть недоступен для записи до автоматического переключения мастера |
|
Доступность кластера при обновлении версии PostgreSQL |
Недоступен для записи и чтения |
Недоступен для записи, но минимум одна реплика доступна для чтения |
Доступность кластера при переключении хоста-мастера
Если в вашем кластере высокой доступности включена опция Автоматическое переключение мастера и при этом источник репликации не указан как минимум для двух хостов, вам нужно обеспечить доступность кластера для чтения при переключении мастера. Для этого есть следующие способы:
-
Подключаться к кластеру по особым FQDN:
- Для записи используется FQDN текущего хоста-мастера —
c-<идентификатор_кластера>.rw.mdb.yandexcloud.net
. - Для чтения используется FQDN наименее отстающей реплики —
c- <идентификатор_кластера>.ro.mdb.yandexcloud.net
.
Этот способ прост в применении, но основан на использовании DNS, поэтому при переключении мастера требуется дополнительное время на обновление DNS-записи.
- Для записи используется FQDN текущего хоста-мастера —
-
Указывать в конфиге приложения FQDN всех хостов кластера через запятую. При этом на чтение указывать параметр
target_session_attrs=any
, а на запись —target_session_attrs=read-write
.В этом случае обновление DNS-записи не требуется. Если время переключения для вас критично, рекомендуется использовать этот способ.