惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Schneier on Security
The Register - Security
The Register - Security
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The GitHub Blog
The GitHub Blog
博客园 - 司徒正美
罗磊的独立博客
U
Unit 42
S
SegmentFault 最新的问题
Y
Y Combinator Blog
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
J
Java Code Geeks
Schneier on Security
Schneier on Security
Know Your Adversary
Know Your Adversary
C
Check Point Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Simon Willison's Weblog
Simon Willison's Weblog
V
Vulnerabilities – Threatpost
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
阮一峰的网络日志
阮一峰的网络日志
The Hacker News
The Hacker News
博客园 - 叶小钗
C
Cybersecurity and Infrastructure Security Agency CISA
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Latest news
Latest news
L
Lohrmann on Cybersecurity
A
About on SuperTechFans
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
S
Securelist
A
Arctic Wolf
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Threatpost
Scott Helme
Scott Helme
博客园 - 聂微东
博客园 - 【当耐特】
T
Tenable Blog
I
Intezer
D
DataBreaches.Net
B
Blog RSS Feed
Security Latest
Security Latest
C
Cisco Blogs
T
Tor Project blog
N
Netflix TechBlog - Medium

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Почему ваш DR-план не сработает при реальной аварии (и что с этим делать)
Victor · 2026-06-16 · via Все публикации подряд на Хабре

Средний

14 мин

123

Тема Disaster Recovery часто напоминает страховку: все про неё знают, оформляют «для галочки» и надеются, что страховой случай никогда не наступит. В итоге планы аварийного восстановления годами пылятся в недрах технической документации, а когда реально падает прод, команда в панике пытается вспомнить, как и куда разворачивать бэкапы.

Недавно на вебинаре Хайстекс как раз разбирались реальные сценарии DR на практике. В чате трансляции зрители задали ряд технических вопросов, и наиболее интересные из них легли в основу этого разбора.

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

Что такое адекватные RTO и RPO?

Для начала стоит договориться о терминах.

RTO (Recovery Time Objective) - за какое максимальное время сервис должен вернуться в рабочее состояние. RPO (Recovery Point Objective) - какой максимальный объем данных бизнес готов потерять, обычно в минутах или часах.

На уровне пожеланий часто звучит "RTO = 0 и RPO = 0". Технически к этому можно приближаться, но цена и сложность растут очень быстро. RPO около нуля обычно требует синхронной репликации или очень частой фиксации изменений. RTO около нуля обычно требует активной резервной площадки, автоматизированного переключения трафика, проверенной сетевой модели и понятной логики разрешения конфликтов.

Поэтому RTO/RPO лучше рассматривать на трех уровнях:

  1. Целевые - что хочет бизнес.

  2. Проектные - что обещает архитектура.

  3. Подтвержденные - что реально получилось на тестах.

Пока метрики не подтверждены регулярным фейловером, это не SLA, а гипотеза.

Если бизнес требует 15 минут RTO, а технический план включает ручной поиск бэкапа, восстановление нескольких ВМ, правку DNS и запуск SQL-скриптов "по памяти", значит реального RTO в 15 минут у вас нет.

Почему бумажный DR-план не работает?

Потому что авария почти никогда не идет по документу.

На бумаге все выглядит линейно: обнаружили сбой, объявили аварию, подняли резервную площадку, переключили пользователей, потом сделали failback. В реальности  одновременно появляются десятки мелких проблем:

  • у части команды нет доступа к нужной консоли;

  • пароль от break-glass-аккаунта лежит в системе, которая тоже недоступна;

  • DNS-записи меняются дольше, чем ожидалось;

  • сертификат привязан к старому имени или старому IP;

  • внешняя интеграция не принимает трафик с резервной площадки;

  • база поднялась, но приложение не проходит миграции или health-check;

  • кластер потерял кворум;

  • мониторинг смотрит только на основной ЦОД и не видит резерв.

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

Что превращает текстовый DR-план в работающий сценарий восстановления?

Самая частая проблема бумажного DR-плана - он написан человеческим языком, но в аварии его надо исполнять машиной и дежурной сменой под давлением. В хорошем DR-плане должны быть конкретные параметры:

  • какие машины входят в сценарий;

  • сколько CPU и RAM им нужно;

  • в каком порядке они стартуют;

  • какие сети и подсети создаются;

  • какие IP назначаются;

  • какие security groups или firewall-правила нужны;

  • какие задержки или условия ожидания есть между компонентами;

  • какие машины можно поднимать параллельно, а какие зависят от базы, брокера или AD.

В Хайстекс Акура эта идея выражена через DR-план: сценарий восстановления описывает машины, сети, ранги запуска и параметры инфраструктуры. План можно создавать через UI, генерировать для группы машин, формировать из списка машин или редактировать в экспертном JSON-режиме. Вместо ручного регламента появляется структура, которую можно переиспользовать для тестового Cloud Site и реального восстановления.

Но неудобный вопрос остается: кто поддерживает этот план актуальным после изменения прода?

Если команда добавила новую ВМ, изменила сеть, перенесла базу, поменяла размер диска или добавила зависимость от нового сервиса, DR-план должен измениться вместе с продом. Иначе он становится не планом восстановления, а снимком старой архитектуры.

Как протестировать DR и не сломать прод?

Для этого используется тестовый failover: резервные машины поднимаются из точек восстановления в изолированной сети. Такой режим позволяет проверить, что ОС загружается, сервисы стартуют, базы проходят recovery, скрипты адаптации отрабатывают, а зависимости между ВМ не разваливаются.

Ключевое слово здесь - изолированной. Тестовая копия не должна:

  • конфликтовать с продом по IP-адресам;

  • писать в боевые очереди, S3-бакеты, базы или CRM;

  • отправлять реальные письма и SMS;

  • регистрироваться в продуктивном service discovery;

  • участвовать в боевом кластере как еще одна нода.

В DR-платформах это обычно решается через отдельные тестовые сети, временные правила маршрутизации, NAT, отключение внешнего доступа или управляемые правила firewall. Например, в Акуре  можно автоматизировать тестовый  failover и поднимать ВМ на резервной площадке без воздействия на работающий прод.

Но сама платформа не знает всех бизнес-зависимостей приложения. Если тестовая копия при старте отправляет реальные платежи, это проблема не гипервизора, а архитектуры приложения и качества DR-runbook.

Для Акуры  важная практическая деталь здесь - Cloud Site. Его можно использовать не только как рабочее аварийное восстановление, но и как площадку для проверки: поднять бизнес-приложение в резервном ЦОДе, пройти тесты, проверить сеть и зависимости, а затем удалить Cloud Site. Это как раз та механика, которая переводит DR из теории в регулярную репетицию.

Достаточно ли просто смонтировать диск с копией базы?

Не всегда. И это один из самых неприятных вопросов в DR.

Снапшот диска может быть согласованный по сбоям: примерно как состояние сервера после внезапного отключения питания. Многие СУБД умеют восстанавливаться из такого состояния за счет журналов транзакций. Но это не то же самое, что гарантированная согласованная на уровне приложений копия на нужный момент времени.

Для файлового сервера согласованной по сбоям  копии часто достаточно. Для PostgreSQL, Oracle, MS SQL Server и других СУБД нужно понимать, в каком состоянии находятся:

  • файлы данных;

  • журналы транзакций;

  • архивные логи;

  • незавершенные транзакции;

  • внешние зависимости приложения.

В PostgreSQL надежный сценарий часто строится вокруг базового бэкапа и WAL-архива. Базовый бэкап дает стартовую точку, а WAL позволяет докатить изменения до нужного момента через PITR (Point-in-Time Recovery).

Упрощенно это выглядит так:

# Фрагмент конфигурации восстановления PostgreSQL.

# Конкретные параметры зависят от версии PostgreSQL и выбранного сценария.

restore_command = 'cp /mnt/archived_wal/%f %p'

recovery_target_time = '2026-06-11 10:15:00+03'

В Oracle похожая логика строится вокруг data files, archived redo logs и штатных инструментов восстановления. Детали отличаются, но принцип тот же: DR-платформа может доставить и поднять инфраструктуру, однако корректность восстановления СУБД определяется тем, насколько правильно подготовлены бэкапы, журналы и процедуры recovery.

Агентская или безагентская репликация?

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

Агентский подход работает внутри гостевой ОС. Он может лучше понимать состояние системы, использовать механизмы вроде VSS в Windows, запускать pre/post-скрипты и передавать измененные блоки на резервную сторону.

Безагентский подход работает на уровне гипервизора или платформы виртуализации. Он удобен для массовой защиты ВМ: не нужно ставить компонент внутрь каждой ОС, а снапшоты и чтение изменений выполняются средствами инфраструктуры.

Оба подхода имеют ограничения. Агенту важны совместимость с ОС и ядром, права, нагрузка на CPU/IO/network, корректная установка и обновление. Безагентской репликации важны возможности гипервизора, guest tools, качество снапшотов, доступ к механизму отслеживания изменившихся блоков и поведение приложений внутри ВМ.

Если продукт поддерживает оба варианта, выбор обычно делается по типу нагрузки:

Что делать, если агент потребляет слишком много ресурсов?

Если у ВМ высокий коэффициент оттока, то есть данные меняются постоянно и большими объемами, агент или гипервизор неизбежно будут читать, сжимать, передавать и подтверждать много блоков.

Перед внедрением DR стоит проверить:

  • есть ли ограничение пропускной способности по сети;

  • можно ли ограничить параллелизм;

  • можно ли разнести полные синхронизации по окнам;

  • есть ли лимиты на IO;

  • как продукт ведет себя при отставании репликации;

  • что происходит, если канал до резервной площадки временно деградировал.

Иногда достаточно пересмотреть RPO, выделить отдельный канал, исключить временные данные из репликации или изменить расписание тяжелых операций.

Для Linux-систем с нестандартными ядрами отдельно проверяйте совместимость модулей. Если используется DKMS или похожий механизм сборки драйвера под текущее ядро, это нужно тестировать заранее, а не в день аварии после обновления kernel minor version.

У Акуры здесь есть несколько практичных преимуществ: для VMware используются механизмы VMware CBT и снапшоты, для Windows - VSS, для Linux - блочный механизм консистентных снимков, а передача дельт идет с дедупликацией, сжатием и WAN-оптимизацией. Это не делает репликацию "бесплатной", но снижает объем передаваемых данных и дает инженерные рычаги для защиты разных типов инфраструктуры.

Почему lift-and-shift решает перенос ВМ, но не всю задачу DR?

Перенести ВМ на резервную площадку - это только часть задачи. После запуска машина должна оказаться в правильной сети, с правильными маршрутами, DNS, firewall-правилами, секретами и зависимостями.

DR-платформа может помочь с оркестрацией запуска, назначением IP-адресов, порядком старта, шаблонами сетевой адаптации и скриптами вроде cloud_init/user_data. Но она не может автоматически угадать, что конкретное приложение хранит адрес соседнего сервиса в старом конфиге, а лицензия привязана к mac_адресу.

Поэтому в DR-плане должны быть явно описаны:

  • какие IP меняются, а какие сохраняются;

  • как переключается DNS и какой TTL стоит заранее;

  • как обновляются security_groups, firewall и routing_allowed;

  • где лежат секреты и доступны ли они при падении основного ЦОДа;

  • какие внешние интеграции должны разрешить резервную площадку;

  • какие сервисы стартуют первыми, а какие ждут базу, брокер или LDAP/AD.

Если завтра резервная площадка поднимется с другими адресами, приложение должно уметь жить не в своей старой сети.

Что если у вас не один гипервизор, а мультиплатформенная инфраструктура?

В реальных инфраструктурах редко бывает стерильная картина, когда  все ВМ живут в одном VMware-кластере. У компании может быть VMware, OpenStack, oVirt, KubeVirt, публичное облако, отдельные Linux/Windows-машины и временная площадка у провайдера.

Здесь важны два вопроса.

Первый: откуда мы забираем данные? Для разных источников используются разные механизмы: API гипервизора, change tracking, снапшоты, агент внутри ОС, чтение блочных изменений.

Второй: куда мы восстанавливаемся? Целевая площадка должна уметь принять машины, сети, диски, security_groups, маршруты и настройки доступа. Если целевое облако не подготовлено или не прошло валидацию, DR-план может быть правильным на бумаге, но невыполнимым технически.

Сильная сторона Акуры в том, что решение изначально работает с несколькими типами целевых облаков и платформ, в зависимости от поставки и конфигурации. В интерфейсе настраиваются target clouds, source/failback_clouds, параметры репликации, типы хранилищ, сети и cloud_agents. Для инженера это важно: DR перестает быть набором разрозненных скриптов под каждую площадку и становится единым управляемым процессом.

Как не сломать восстановление из-за изменившегося порядка дисков?

Имена блочных устройств в Linux не являются надежным контрактом. Сегодня диск может быть /dev/vdb, завтра - /dev/vdc или /dev/sdb, особенно если поменялись драйверы, порядок обнаружения устройств или тип виртуализации.

Хрупкий вариант:

mount /dev/vdb1 /var/lib/postgresql/data

Более надежный вариант - использовать стабильные идентификаторы:

UUID=2d7b0c5a-8b5b-4b3e-8c43-2b5a7f6c9d11 /var/lib/postgresql/data ext4 defaults,nofail 0 2

Или:

mount /dev/disk/by-uuid/2d7b0c5a-8b5b-4b3e-8c43-2b5a7f6c9d11 /var/lib/postgresql/data

Для некоторых систем удобнее использовать filesystem label, LVM, multipath или /dev/disk/by-id. Важно не название механизма, а принцип: DR-скрипт не должен зависеть от случайного порядка устройств при загрузке.

Что будет с кластерами, если на резервной площадке меньше узлов?

Кластеры плохо относятся к неопределенности. Если в основном ЦОДе было пять узлов, а на резервной площадке вы поднимаете три или один, нужно заранее понимать, как поведут себя:

  • кворум;

  • leader election;

  • изоляция;

  • статические списки peers;

  • старые IP и hostnames;

  • политики anti-affinity;

  • split-brain protection.

Для PostgreSQL-кластеров это может означать отдельную процедуру promotion. Для Kafka - проверку ISR, replication factor и controller quorum. Для etcd - аккуратную работу с membership. Для Kubernetes - отдельную стратегию восстановления control plane и etcd.

DR-платформа может поднять машины и выполнить сценарий оркестрации. Но решение "этот узел теперь primary", "этот peer удаляем из membership", "кворум пересобираем так" должно быть описано и проверено владельцами приложения.

Что если нужно восстановить не всю ВМ, а один файл, диск или образ?

Не каждая авария требует полного failover. Иногда пользователь удалил каталог, администратор испортил конфиг, база требует отдельного анализа журналов, а разработчикам нужен один диск из точки восстановления.

Если единственный доступный сценарий - "поднять всю машину целиком", команда будет тратить часы на задачу, которую можно решить точечно.

Полезно заранее иметь несколько уровней восстановления:

  • Загрузка образа из failover - достать отдельный файл или каталог из restore point;

  • Присоединение дисков - подключить диск из точки восстановления к уже запущенной машине для анализа или ручного восстановления;

  • Восстановление в виде виртуальной машины - поднять полноценную ВМ из restore point;

  • Восстановление файлов и папок - выгрузить диск в распространенном формате для внешнего восстановления или расследования.

В Акуре такие сценарии есть в продуктовой модели: восстановление файлов и папок, подключение диска, запуск ВМ из restore point, скачивание failover image или RAW-образа. Это сильная сторона не только для аварии, но и для повседневных инцидентов: не нужно каждый раз запускать полноценный DR, если задача точечная.

Как понять, что резервная площадка действительно готова?

Фраза "ВМ включилась" не означает, что сервис восстановлен. Минимальный набор проверок после тестового фейловера:

  • ОС загрузилась без emergency mode;

  • нужные файловые системы смонтированы;

  • база прошла recovery и принимает подключения;

  • приложение отвечает не только на port check, но и на бизнес health-check;

  • очереди, кэши и фоновые воркеры работают;

  • есть доступ к DNS, NTP, LDAP/AD, KMS, secret storage;

  • мониторинг и логи видят резервную площадку;

  • команда понимает, куда смотреть при ошибках;

  • результаты теста зафиксированы, а не обсуждены устно.

Хорошая практика - хранить evidence: время старта, скриншоты, логи, результаты health-check, список проблем и план исправления. Иначе через полгода никто не вспомнит, что именно было проверено.

Акура помогает закрыть часть этой операционной задачи с помощью логов событий, отчетов, графиков на панелях мониторинга и готовых сводок по процессам аварийного восстановления: состояние машин, использование дискового пространства и сервисная отчетность. Это не заменяет сквозную проверку работоспособности на уровне бизнес-логики приложения, но помогает собрать объективную доказательную базу: что реплицировалось, когда запускалось, какие действия выполнялись, где возникали ошибки и сколько ресурсов при этом потреблялось.

Чем DR отличается от бэкапа?

Бэкап отвечает на вопрос: "Есть ли у нас копия данных?" DR отвечает на вопрос: "Можем ли мы восстановить работающий сервис в заданное время и с заданной потерей данных?" Можно иметь отличные бэкапы и плохой DR. Например, если:

  • восстановление занимает двое суток при RTO четыре часа;

  • никто не знает порядок запуска сервисов;

  • бэкап базы есть, но WAL-архива нет;

  • данные восстановились, но приложение не работает из-за внешней зависимости;

  • резервная площадка не имеет нужных лицензий или сетевых доступов.

Обратная ошибка - считать репликацию заменой бэкапа. Репликация быстро переносит изменения, но так же быстро может перенести логическое удаление, шифрование ransomware или ошибку оператора. Поэтому для критичных систем нужны retention, immutable-копии, отдельные учетные данные, контроль удаления и периодические restore-тесты.

Если ransomware зашифрует прод и изменения уедут на резервную сторону, где находится последняя чистая точка восстановления?

Здесь у Акуры есть отдельный механизм: ransomware protection может обнаруживать аномально большой размер инкрементальной репликации и при превышении порога приостанавливать защиту этой машины, чтобы снизить эффект массового шифрования на DR-копии. Это не замена EDR, сегментации и immutable backup, но хороший предохранитель на уровне DR-процесса.

Как не разориться на длинной истории точек восстановления?

Для минимального RTO данные часто держат в cloud-native block storage: так восстановление быстрее, но хранение может быть дорогим.

Для долгого хранения история обычно уезжает в более дешевое объектное или файловое хранилище. Это снижает стоимость, но увеличивает RTO: перед запуском ВМ данные нужно прочитать, отрендерить или переложить обратно в блочное хранилище целевой площадки.

Это нормальный компромисс:

  • горячие restore points - быстрее восстановление, дороже хранение;

  • холодные restore points - дешевле хранение, дольше восстановление;

  • короткий retention - меньше стоимость, выше риск не найти чистую точку;

  • длинный retention - больше шансов пережить логическую ошибку или ransomware, но выше стоимость и сложность управления.

В Акуре это отражается через разные типы replication storage и retention policies: можно использовать cloud-native block storage для DR-сценариев с низким RTO или объектное/файловое хранилище для VM Backup и более длинной истории. Об этом коллеги подробнее писали тут

Что происходит во время failback?

Failover обычно обсуждают чаще, чем failback. Хотя обратное переключение часто сложнее.

Когда основной ЦОД недоступен, пользователи работают на резервной площадке. Там появляются новые данные. Когда основной ЦОД восстановился, нельзя просто "включить старый прод": он уже отстал и может содержать устаревшее состояние.

Нужен failback-процесс:

  1. Зафиксировать, какая площадка сейчас является источником правды.

  2. Остановить или ограничить запись на время финальной синхронизации.

  3. Передать накопленную дельту изменений обратно.

  4. Проверить консистентность.

  5. Переключить трафик.

  6. Убедиться, что старая резервная площадка снова стала резервной, а не продолжает жить как второй активный прод.

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

Что если упал сам DR-контроллер?

Это вопрос, который часто забывают. DR-система тоже является частью инфраструктуры, а значит тоже может сломаться.

Нужно заранее понимать:

  • где хранится конфигурация DR-планов;

  • где находится каталог точек восстановления;

  • можно ли восстановить контроллер из внешнего бэкапа;

  • что будет, если база управления DR недоступна;

  • можно ли поднять критичные ВМ без исходного контроллера;

  • есть ли HA-режим для management plane;

  • кто и как разворачивает новый контроллер в чистой среде.

В Акуре и похожих DR-платформах для этого используются бэкап конфигурации контроллера и отказоустойчивые варианты развертывания в плоскости управления . Но общий принцип шире: DR-план должен включать восстановление самого инструмента DR.

Еще сильнее этот вопрос проявляется в сценариях с холодными архивами и переносимыми копиями. Если ваша точка восстановления существует только как запись в базе контроллера, потеря контроллера становится критичной. Поэтому для долгосрочного хранения полезны самодостаточные артефакты: пакет с данными, манифестом, контрольными суммами и инструкцией восстановления.

Что если основной ЦОД внезапно оживет?

Это классический риск сетевой сегментации: две площадки считают себя активными и принимают запись.

Автоматический failover звучит красиво, но без надежного fencing может создать больше проблем, чем решить. В реальном DR часто используется осознанное ручное подтверждение: человек или дежурная группа объявляет основную площадку недоступной, после чего запускается переключение.

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

  • отключение питания или сетевой изоляции старой площадки;

  • fencing на уровне гипервизора;

  • запрет записи на старом primary;

  • контроль quorum/witness;

  • понятная процедура возврата площадки после восстановления.

Вместо вывода: чек-лист для самопроверки, пока всё работает

  1. Для каждого критичного сервиса есть подтвержденные RTO и RPO, а не только желаемые?

  2. Последний тестовый failover проводился недавно и с фиксированными результатами?

  3. Тестовая среда изолирована от прода и внешних бизнес-систем?

  4. Для СУБД проверено восстановление на нужный момент времени, а не только запуск ВМ?

  5. Понятно, какие точки восстановления crash-consistent, а какие application-consistent?

  6. Известно, как репликация влияет на CPU, IO, RAM и сеть источника?

  7. DR-план обновляется вместе с изменениями прода?

  8. Скрипты восстановления не завязаны на /dev/vdb1, старые IP и ручные действия "по памяти"?

  9. Кластеры проверены на потерю узлов, смену primary, кворум и fencing?

  10. Целевая площадка проверена по правам, квотам, сетям и лимитам?

  11. Есть сценарии точечного восстановления: файл, диск, образ, отдельная ВМ?

  12. Storage/retention выбраны по требованиям систем, а не оставлены дефолтом?

  13. Есть план failback, а не только failover?

  14. DR-контроллер, каталог и конфигурация тоже восстанавливаются?

  15. Есть immutable или изолированные копии на случай ransomware?

  16. Команда знает, кто принимает решение о переключении и как идет коммуникация, если основной канал связи недоступен?

Хорошая DR-платформа снимает много рутины: репликацию, оркестрацию запуска, тестовый фейловер, шаблоны сетевой адаптации, автоматизацию фейлбэка, хранение точек восстановления, отчеты и мониторинг. Это действительно важно. Но автоматизация не отменяет консистентность базы, кворум, внешние интеграции, DNS, секреты и порядок переключения трафика и тд. Пока DR-план не проходил репетицию, он не доказан. А прод обычно падает именно в тот момент, когда недоказанные предположения становятся самыми дорогими.

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