Надежность базы данных в облаке обеспечивается двумя взаимодополняющими механизмами:
Репликация — дублирование данных с основного узла на один или несколько резервных узлов.
Мультизональность — распределение узлов по разным зонам доступности.
Правильный выбор топологии кластера (количества узлов, их ролей и расположения) позволяет минимизировать время простоя при сбоях и сохранить данные.
В кластере Managed PostgreSQL® узлы выполняют разные роли:
Primary — основной узел (мастер), принимает все операции записи и чтения.
Standby — реплика, может использоваться только для чтения.
Репликация позволяет:
обеспечить отказоустойчивость — при сбое мастера одна из реплик становится новым мастером;
балансировать нагрузку — распределить запросы на чтение между репликами и снизить нагрузку на мастер.
Потоковая репликация — вид репликации, при которой изменения на мастере фиксируются в WAL, а затем передаются на реплику. Далее реплика по этому журналу изменяет свои данные.
Режимы потоковой репликации:
Асинхронный — мастер фиксирует изменения и не ждет подтверждения получения данных от реплики. Режим минимизирует задержки, но может привести к небольшому отставанию между мастером и репликой.
Синхронный — мастер не фиксирует изменения, пока не получит подтверждение получения данных от реплики. Режим минимизирует риск потери данных при сбое, но скорость выполнения операций ниже из-за задержки на подтверждение.
Для кластеров в режиме «Бизнес» с тремя узлами используется синхронная кворумная репликация (ANY 1). Мастер ожидает подтверждения от одной из двух реплик, что снижает задержки по сравнению с двухузловой синхронной репликацией и гарантирует сохранность данных при сбое.
Failover используется в PostgreSQL® для автоматического переключения нагрузки с мастера на реплику. Благодаря репликации данные в реплике остаются актуальными.
Если мастер перестает отвечать, реплика становится новым мастером. Это минимизирует простой и предотвращает потерю данных. Все запросы перенаправляются на новый мастер. Когда прежний мастер восстановлен, его можно снова добавить в кластер как реплику.
Мультизональное размещение позволяет повысить отказоустойчивость кластера на уровне инфраструктуры. Если все узлы находятся в одной зоне доступности, сбой или обслуживание в этой зоне приведут к полной недоступности базы данных. При распределении узлов по нескольким зонам база данных продолжает работать даже при отказе одной из зон.
Изменить распределение узлов между одной и разными зонами можно только удалив все реплики и добавив их заново с новым вариантом размещения.
В зависимости от выбранных при создании кластера режима и распределения узлов возможны следующие топологии:
Тип кластера | Режим | Количество узлов | Размещение | Отказоустойчивость |
|---|---|---|---|---|
Single | Любой | 1 узел с ролью Primary | Одна зона | Отсутствует. Подходит для разработки, тестирования. |
Primary/Standby | Стандарт | 2 (Primary + Standby) | Одна зона | Базовая: при сбое мастера выполняется автоматическое переключение (failover). При отказе зоны кластер становится недоступен. |
Primary/Standby | Бизнес | 2 (Primary + Standby) | Одна или разные зоны | Если узлы в одной зоне: базовая отказоустойчивость, но при отказе зоны кластер недоступен. Если узлы в разных зонах: кластер выдерживает сбой одной зоны. При сбое мастера выполняется автоматическое переключение (failover). |
Cluster HA (3 узла в одной зоне) | Бизнес | 3 (Primary + 2 Standby) | Одна зона | Высокая внутри одной зоны: при сбое мастера выполняется автоматическое переключение (failover). При отказе зоны кластер недоступен. |
Cluster HA (3 узла в разных зонах) | Бизнес | 3 (Primary + 2 Standby) | Разные зоны: по одному узлу в зоне | Максимальная: зона может выйти из строя, кластер продолжает работу на двух оставшихся узлах. |
Трехузловая конфигурация с размещением в разных зонах (Cluster HA) является рекомендованной для production‑окружений.
Синхронная кворумная репликация
Скорость выполнения запросов выше, риски рассинхронизации данных на репликах снижаются. Транзакция в среднем подтверждается быстрее: ее должны подтвердить мастер и одна из реплик.
Мультизональность
Узлы распределены по трем зонам. При отказе одной зоны оставшиеся два узла сохраняют кворум, и кластер продолжает работу.
Масштабирование чтения
Две реплики могут обслуживать запросы на чтение, снижая нагрузку на мастер.