С 8 октября Бипиум столкнулся с серьёзными сбоями в инфраструктуре Yandex Cloud, где размещалась часть наших сервисов. Сначала стали недоступны виртуальные машины и кластеры баз данных в одной зоне доступности, позднее проблемы возникли и в другой.
В первые часы для нас было важно понять три вещи: в каком состоянии находятся данные, как быстрее вернуть облако в работу и что делать, если инфраструктура Yandex Cloud не восстановится в короткие сроки.
Ниже рассказываем по дням, как развивалась ситуация и какие решения мы принимали.
8 октября. Авария и первые попытки восстановления
В 01:32 МСК произошёл инцидент в инфраструктуре Yandex Cloud, который затронул зону доступности B.
В 04:55 Yandex Cloud ограничил создание новых виртуальных машин и кластеров баз данных в других зонах, которые на тот момент продолжали работать.
Примерно в 07:00 мы начали разбираться в ситуации и проверять, из каких резервных копий можем восстановить сервис.
В этот момент картина была следующей:
- объектное хранилище S3 продолжало работать, поэтому файлы оставались доступны;
- виртуальные машины и базы данных в зоне B были недоступны;
- резервные копии баз данных дублировались между зонами, поэтому возможность восстановления сохранялась;
- при этом резервная копия могла не включать самые последние изменения;
- восстановить резервные копии баз данных можно было только внутри Yandex Cloud. Напрямую скачать их и развернуть у другого провайдера было невозможно.
Фактически у нас было два варианта.
Первый — дождаться восстановления зоны B. В тот момент ещё не было понятно, насколько серьёзная авария и сколько времени займёт восстановление, поэтому этот вариант оставался рабочим.
Второй — поднять новую инфраструктуру в другой зоне Yandex Cloud и восстановить туда базы данных из резервных копий.
Для этого нам требовались дополнительные ресурсы и квоты, поэтому мы сразу направили обращения в поддержку Yandex Cloud.
В 12:00 первая линия поддержки ответила стандартным сообщением об инциденте, связанном с пожаром в зоне B. Там же сообщили, что выделение ресурсов в других зонах на тот момент недоступно.
После этого мы начали искать дополнительные каналы связи с Yandex Cloud и параллельно продолжали пробовать создавать ресурсы самостоятельно, в том числе в минимальной конфигурации. Задача была простая: получить хотя бы базовую инфраструктуру, на которой можно запустить восстановление баз данных.
К 19:00 стало понятно, что рассчитывать на быстрое восстановление зоны B уже не стоит. Основным вариантом стало восстановление из резервных копий в другой зоне. Через дополнительные контакты нам удалось эскалировать запрос на выделение ресурсов.
9 октября. Запуск Бипиума в другой зоне
В 04:00 техническая поддержка Yandex Cloud рассмотрела наш запрос и выделила индивидуальные квоты в зоне A.
После этого мы сразу начали поднимать необходимую инфраструктуру. В первую очередь запустили восстановление кластера баз данных из резервной копии.
К 06:00 кластер был восстановлен, но подключиться к нему ещё было нельзя. Параллельно мы настраивали остальные части инфраструктуры. Из-за высокой нагрузки операции в Yandex Cloud выполнялись заметно медленнее обычного.
В 09:30 база данных начала принимать подключения, после чего мы смогли закончить основные настройки приложения.
К 11:45 новая инфраструктура была развёрнута, и облако Бипиум снова заработало.
После запуска работа не остановилась: мы продолжили проверять состояние данных, настройки инфраструктуры и стабильность сервиса.
11 октября. Второй сбой и решение готовить независимую площадку
Через два дня произошёл новый инцидент.
В 04:12 Telegram-канал Yandex Cloud Alerts сообщил о критическом нарушении электропитания в зоне доступности ru-central1-a, физическая площадка которой находится во Владимире.
После второго серьёзного сбоя стало очевидно, что нам нужен вариант восстановления не только внутри Yandex Cloud.
Поэтому мы начали параллельно готовить инфраструктуру у другого провайдера.
В 09:00 в зоне D Yandex Cloud мы создали новый кластер баз данных и начали восстанавливать его из резервной копии на 11 октября, 02:40.
Одновременно начали оценивать альтернативные площадки: Selectel, Сбер, VK и МТС.
В 11:30 база данных в Yandex Cloud восстановилась, но для запуска всей инфраструктуры не хватало виртуальных машин. Мы снова запросили увеличение квот.
В качестве основной резервной площадки на этом этапе выбрали Сбер. Одной из причин было то, что у нас были прямые контакты с менеджерами и возможность быстрее подключать специалистов к решению возникающих вопросов.
Параллельно мы начали искать способ физически выгрузить базы из Yandex Cloud. Штатная система резервного копирования была рассчитана в первую очередь на восстановление внутри самого Yandex Cloud, поэтому простой возможности перенести готовый бэкап к другому провайдеру не было.
В 12:30 на стороне Сбера уже работали виртуальные машины. Мы начали синхронизировать файловое хранилище S3 из Yandex Cloud в S3 Сбер Cloud.
Одновременно начали выгружать базы PostgreSQL.
На тот момент рабочим вариантом был pg_dump — отдельный дамп каждой базы. На больших базах такой процесс занимал по несколько часов.
В 15:00 мы дополнительно закупили оборудование для локального резервного копирования и начали сохранять копии данных на физические диски.
В 23:00 приступили к развёртыванию инфраструктуры на мощностях Сбера, но столкнулись с технической проблемой. После общения с менеджерами стало понятно, что подключить профильных специалистов получится только утром, после 09:00.
К этому моменту Yandex Cloud уже выделил нам необходимые квоты на виртуальные машины. Мы решили не бросать вариант со Сбером, но параллельно восстановить сервис на доступных ресурсах Яндекса.
12 октября. Данные выгружены, сервис снова работает
К 03:00 синхронизация файлового хранилища S3 из Yandex Cloud в S3 Сбер Cloud завершилась.
Также к этому времени мы закончили выгрузку дампов всех баз данных и сохранили копии на локальные диски.
В 09:00 снова связались со Сбером по технической проблеме. Запрос передали профильным специалистам.
К 11:00 стало понятно, что быстро решить проблему на стороне Сбера не получится.
Поэтому мы решили не ждать и продолжить восстановление на уже выделенных мощностях Yandex Cloud.
В 11:40 облако Бипиум снова было доступно пользователям.
В 16:40 восстановили и сайт с документацией.
При этом работу над резервной инфраструктурой мы не остановили. После двух аварий подряд для нас было принципиально важно иметь копии баз и файлов за пределами одной облачной площадки.
13 октября. Вторая площадка и ускорение резервного копирования
К 10:00 проблема со Сбером всё ещё оставалась нерешённой. Поэтому в качестве следующей резервной площадки мы начали более активно рассматривать Selectel.
В 17:00 на мощностях Selectel в тестовом режиме запустили второй экземпляр облака Бипиум. Для него использовались дампы баз данных, которые мы сняли 11 октября.
В тот же день удалось заметно ускорить процесс снятия дампов.
В 20:00 мы запустили повторное резервное копирование всех баз уже по обновлённой схеме.
К 23:00 процесс завершился.
Новые копии баз данных сохранялись сразу в нескольких местах:
- на мощностях Сбера;
- в S3 Сбер Cloud;
- на локальных дисках.
14 октября. Автоматические бэкапы и дополнительная копия файлов
В 11:00 мы снова сняли дампы всех баз данных. Копии отправили в S3 Сбер Cloud и сохранили на локальные диски.
В 17:00 запустили дополнительную синхронизацию файлового хранилища S3 на инфраструктуру Selectel.
К этому моменту мы также подготовили автоматический скрипт резервного копирования всех баз данных.
Сейчас он запускается каждые четыре часа и сохраняет копии сразу в нескольких независимых местах:
- S3 Сбер Cloud;
- объектное хранилище Selectel;
- локальные диски.
Что в итоге
За период с 8 по 14 октября мы несколько раз фактически перестраивали инфраструктуру Бипиум в условиях продолжающихся сбоев.
За это время мы:
- восстановили облако после недоступности зоны B;
- повторно восстановили сервис после следующего сбоя в инфраструктуре Yandex Cloud;
- вывели копии баз данных и файлов за пределы основной облачной площадки;
- подготовили резервную инфраструктуру у другого провайдера;
- настроили регулярное автоматическое резервное копирование.
На текущий момент облако Бипиум и сайт с документацией работают.
Файлы из объектного хранилища скопированы в S3 Сбер Cloud. Резервные копии баз данных теперь находятся не только внутри Yandex Cloud, но также в независимых хранилищах и на локальных носителях.
Кроме того, мы подготовили тестовый экземпляр облака на мощностях Selectel.
Автоматическое резервное копирование баз запускается каждые четыре часа, а копии сохраняются сразу в нескольких местах.
На этом работа не заканчивается. Мы продолжаем проверять целостность данных, дорабатывать резервную инфраструктуру и снижать зависимость Бипиум от одной облачной площадки.
Главный вывод после этой ситуации для нас простой: важно не только уметь восстановить сервис после аварии, но и заранее иметь несколько независимых вариантов, куда можно перенести инфраструктуру и данные.
