Управляемая база при отказе зоны облака: четыре сценария

Во время октябрьской аварии в Yandex Cloud большинство отказоустойчивых кластеров управляемых баз данных переключились на уцелевшие узлы, но часть баз стала доступна только на чтение или не открывалась вовсе. Почему одни базы пережили потерю зоны, а другие нет, хорошо объясняет статья документации Yandex Cloud о восстановлении управляемых БД при недоступности зоны. Разбираем четыре описанных в ней сценария и то, что стоит настроить заранее — независимо от того, каким облаком вы пользуетесь.
Четыре сценария
В документации рассматривается пример с недоступной зоной ru-central1-b.
| Ситуация | Что произошло с кластером | Что делать |
|---|---|---|
| Все хосты в недоступной зоне | База недоступна целиком | Восстановить кластер из резервной копии в новом кластере с хостами в других зонах, не дожидаясь зоны |
| Часть хостов недоступна, мастер переключился | База работает | Убедиться, что приложение пишет в новый мастер, добавить хосты в доступных зонах, удалить хосты из недоступной |
| Мастер не переключился, кластер только для чтения | Запись невозможна | Обратиться в поддержку для переключения мастера, затем как во втором сценарии |
| Хостов в недоступной зоне нет | Работает штатно | Проверить конфигурацию по рекомендациям отказоустойчивости, настроить перенос или репликацию данных |
Отдельно документация напоминает: при восстановлении из резервной копии данные после выбранной точки восстановления в новом кластере отсутствуют. Если резервные копии хранятся в объектном хранилище с репликацией по трём зонам, они сохранены, и данные можно выгрузить с доступных хостов, например через pg_dump.

Что из этого следует
Один хост — это не база, а риск. Кластер из одного хоста в одной зоне при отказе зоны недоступен целиком, и единственный путь — восстановление из копии с потерей данных после неё. Для рабочей базы магазина или CRM это неприемлемо.
Хосты в разных зонах — минимум. Кластер с хостами в двух-трёх зонах переживает потерю одной зоны: мастер переключается на уцелевший хост. Но, как показал октябрь, переключение срабатывает не всегда — третий сценарий описывает именно это.
Приложение должно уметь находить новый мастер. Если в настройках сайта указан адрес конкретного хоста, после переключения мастера приложение продолжит писать в недоступный узел. Используйте адрес кластера или специальное имя мастера, которое провайдер обновляет автоматически.
Копии — не только у провайдера. Резервные копии управляемой БД у того же провайдера защищают от поломки хоста, но не от проблем самого провайдера. Регулярный дамп во внешнее хранилище — страховка от второго.
Что настроить заранее
- Проверьте, сколько хостов в кластере и в каких зонах. Для рабочих баз — минимум два хоста в разных зонах.
- Проверьте строку подключения приложения. Она должна указывать на мастер кластера, а не на конкретный хост.
- Проверьте поведение приложения в режиме только чтения. Сайт должен показывать понятное сообщение, а не падать с ошибкой, и хотя бы отдавать каталог и страницы.
- Настройте внешний дамп. Раз в сутки или чаще, в хранилище другого провайдера или на свой сервер.
- Отрепетируйте восстановление. Разверните дамп в новом кластере и засеките время.
- Сохраните контакты поддержки. В третьем сценарии без поддержки провайдера мастер не переключить.
Как проверить свою базу за полчаса
Откройте консоль облака и посмотрите список хостов кластера: сколько их и в каких зонах. Затем найдите строку подключения в настройках сайта или CRM и проверьте, на какой адрес она указывает. Потом посмотрите, когда сделана последняя резервная копия и где она хранится. Если хост один, строка указывает на конкретный хост, а копии только у провайдера — у вас три задачи на ближайший месяц, и все три решаются без смены провайдера.
Что с самописными базами на виртуальных машинах
Если база развёрнута вами на виртуальной машине, всё описанное выше вам нужно делать самим: настраивать репликацию в другую зону, переключение мастера, резервные копии. Это дешевле управляемого сервиса по счёту, но дороже по времени администратора. Для небольшого проекта разумный компромисс — одна ВМ с базой, ежедневный дамп во внешнее хранилище и отрепетированное восстановление на новой машине в другой зоне.
Сколько стоит отказоустойчивость
Второй и третий хост кластера увеличивают счёт за базу примерно пропорционально числу хостов. Для малого бизнеса это часто ощутимо. Поэтому решение стоит принимать по стоимости простоя: если час без базы стоит дороже месяца второго хоста, второй хост нужен. Если нет — достаточно частых внешних копий и отработанного восстановления.
Как понять, что вам нужен второй хост
Посмотрите на два числа. Первое — сколько стоит вам час, когда сайт не принимает заказы или менеджеры не видят клиентов в CRM. Второе — сколько стоит второй хост базы в месяц у вашего провайдера. Если первое больше второго, а восстановление из дампа занимает несколько часов, второй хост окупается при первой же аварии. Если час простоя стоит немного, а база восстанавливается за полчаса, можно обойтись внешними копиями.
Наше мнение
Мы советуем клиентам начинать не с покупки дополнительных хостов, а с проверки: сколько хостов сейчас, куда смотрит приложение и когда последний раз восстанавливалась копия. Часто оказывается, что база уже распределена по зонам, но сайт подключён к конкретному хосту — и при аварии отказоустойчивость не сработала бы. Такие вещи исправляются за час.
Материалы для проверки
Если нужна реализация
Состав работ зависит от текущего проекта и подтверждённой причины. Можно обсудить диагностику или разработку подходящего решения.
Вопросы и ответы
Что делать, если все хосты базы были в упавшей зоне?
По документации Yandex Cloud — восстановить кластер из резервной копии в новом кластере с хостами в других зонах, не дожидаясь восстановления зоны. Данные после точки копии будут отсутствовать.
Почему база перешла в режим только чтения?
Мастер не переключился на уцелевший хост. Самостоятельно переключить его нельзя, нужно обратиться в поддержку провайдера.
Сколько хостов нужно для рабочей базы?
Минимум два в разных зонах. Тогда отказ одной зоны не останавливает базу, если мастер переключается.
Куда должно подключаться приложение?
К адресу мастера кластера, который провайдер обновляет при переключении, а не к конкретному хосту.
Нужны ли внешние копии, если у провайдера есть автоматические бэкапы?
Да. Автоматические копии у провайдера защищают от поломки хоста, внешний дамп — от проблем самого провайдера.