План аварійного відновлення (DRP) — це документ, який допомагає швидко відновити сайт після збою. Уявіть: ваш сайт не завантажується, команда в паніці, дані під загрозою. Без заздалегідь підготовленого плану аварійного відновлення кожна година простою може коштувати сотень тисяч гривень втрати виручки та репутації. Типова ситуація — відмова primary PostgreSQL у годину пік. Ручне відновлення займає 30–60 хвилин, автоматичне — 2–3 хвилини. Різниця в 10–20 разів — критично для інтернет-магазину або SaaS. План аварійного відновлення (Disaster Recovery Plan, DRP) — це документований набір процедур, що дозволяє відновити інфраструктуру за лічені хвилини. У статті розберемо, з чого складається готовий DRP, які сценарії він покриває, і як ми його створюємо.
Які сценарії відмов покриває DRP?
Будь-який план аварійного відновлення починається з класифікації можливих збоїв. Для кожного сценарію визначаємо цільовий час відновлення (RTO) та точку відновлення (RPO). Ось типова матриця для середньостатистичного веб-проекту:
| Сценарій | RTO | RPO | Ймовірність |
|---|---|---|---|
| Падіння сервера додатків | 15 хв | 0 | Висока |
| Відмова primary БД | 30 хв | 5 хв | Середня |
| Втрата дата-центру (регіон) | 4 год | 1 год | Низька |
| Атака ransomware / видалення даних | 8 год | 24 год | Низька |
| Помилка деплою (критична регресія) | 30 хв | 0 | Висока |
Як автоматизація скорочує час відновлення?
Порівняємо ручний процес та автоматичний failover на Patroni. Автоматизований DRP у 15 разів швидше за ручний процес — різниця драматична. Завдяки автоматизації failover вдається скоротити час простою в 10-20 разів у порівнянні з ручними діями.
| Параметр | Ручне відновлення | Автоматичне (Patroni) |
|---|---|---|
| Час виявлення відмови | 5–10 хв | 30 сек |
| Час промоуту репліки | 2–5 хв | 10 сек |
| Перемикання трафіку | 5–15 хв | 1 хв |
| Загальний час (RTO) | 30–60 хв | 2–3 хв |
За даними Gartner, компанії з автоматизованим DRP скорочують простій на 60% та економлять у середньому $250 000 на інцидент. Вартість стандартного DRP починається від 15 000 грн. Для реалізації синхронної реплікації та запобігання split-brain використовуються технології WAL-архівування та etcd для кворуму (Paxos-консенсус). Це забезпечує автоматичний failover без втрати даних. Моніторинг на базі Prometheus та Grafana, сповіщення через Slack та PagerDuty.
Етапи розробки плану аварійного відновлення
Процес створення плану аварійного відновлення складається з п'яти етапів:
- Аналіз інфраструктури. Виявляємо критично важливі компоненти: бази даних (PostgreSQL, MySQL), сервери додатків, Redis, об'єктні сховища (S3). Визначаємо RTO та RPO для кожного.
- Проектування сценаріїв. Описуємо можливі відмови та призначаємо відповідальних. Контакти та ролі фіксуються у YAML-файлі.
- Створення runbook. Пишемо покрокові інструкції для кожного сценарію. Інструкція містить ознаки відмови, команди для діагностики та відновлення, а також пост-інцидентні дії.
- Автоматизація. Розробляємо bash-скрипти для автоматичного failover. Використовуємо Patroni для управління кластером PostgreSQL, Ansible для розгортання, AWS Route53 для DNS-перемикання.
- Тестування та доопрацювання. Проводимо симуляцію відмови (DR Drill) та коригуємо процедури.
Приклад інвентаризації критичних компонентів
Кожен DRP включає список усіх критичних систем із зазначенням резервних копій, реплікації та посилань на інструкції. Ось фрагмент такого опису:
Приклад інвентаризації критичних компонентів
# drp/inventory.yml
critical_systems:
- name: "PostgreSQL Primary"
host: "db-primary.internal"
backup_location: "s3://backups/postgres/"
backup_frequency: "hourly"
replication: "streaming to db-replica-1, db-replica-2"
runbook: "runbooks/db-failover.md"
- name: "Application Servers"
hosts: ["app-1", "app-2", "app-3"]
ami_id: "ami-0abc123def456"
auto_scaling_group: "app-asg-prod"
runbook: "runbooks/app-restore.md"
- name: "Redis"
host: "redis-primary.internal"
persistence: "RDB + AOF"
backup_location: "s3://backups/redis/"
runbook: "runbooks/redis-restore.md"
- name: "S3 Media Bucket"
bucket: "myapp-media-prod"
replication: "Cross-region to eu-west-1"
runbook: "runbooks/s3-restore.md"
Покрокова інструкція при відмові primary БД
Розглянемо конкретний сценарій — втрату primary PostgreSQL. Ось короткий алгоритм з інструкції:
- Підтвердити відмову. Перевірте доступність хоста:
ssh db-primary.internalта виконайтеpsql -h db-primary.internal -U postgres -c "SELECT 1;". Якщо немає відповіді — primary недоступний. - Вибрати найкращу репліку. На кожній репліці перевірте відставання:
pg_last_wal_receive_lsn() - pg_last_wal_replay_lsn(). Вибирайте ту, де lag найменший. - Промоут репліки. Якщо використовується Patroni:
patronictl failover cluster-name --master db-replica-1. Вручну:pg_ctl promote. - Перенаправити трафік. Оновіть DNS або HAProxy:
aws route53 change-resource-record-sets ...з TTL 60 секунд. - Перезапустити додаток. Наприклад,
kubectl rollout restart deployment/api -n production. - Верифікувати. Виконайте health-check та тестовий запит до БД.
- Пост-інцидент. Створіть нову репліку, розслідуйте причину відмови, оновіть моніторинг.
Для синхронної реплікації використовується параметр synchronous_commit, а Patroni забезпечує кворум через etcd, що запобігає split-brain.
Що входить у готовий план відновлення?
Після завершення роботи ви отримуєте готовий план аварійного відновлення під ключ:
- Документ з класифікацією сценаріїв, контактами та відповідальними.
- 5–10 інструкцій у форматі Markdown для кожного критичного сценарію.
- Автоматизовані скрипти для failover (bash, Ansible) з інтеграцією у Slack та PagerDuty.
- Повну інвентаризацію критичних компонентів.
- Рекомендації з моніторингу (метрики, алерти, дашборди).
- Одну сесію навчання команди.
- Доступ до Git-репозиторію з документацією та скриптами.
Чому важливо регулярно тестувати DRP?
План, який не тестували, — це фікція. Ми рекомендуємо проводити навчання щоквартально:
- Кожен квартал: симуляція відмови primary БД (failover drill). Критерії успіху: відновлення менш ніж за 30 хвилин, нульова втрата даних, автоматичне відновлення додатку.
- Раз на рік: повна відмова регіону (region failover). Мета — відновлення менш ніж за 4 години з втратою даних не більше 1 години.
Тестування виявляє слабкі місця, застарілі контакти та помилки у скриптах. Тільки так можна бути впевненим, що DRP спрацює в реальній ситуації.
Терміни та вартість розробки
Стандартний план для типового веб-проекту розробляється за 3–5 робочих днів. Вартість розраховується індивідуально залежно від складності інфраструктури та кількості сценаріїв. Наприклад, для середнього інтернет-магазину вартість простою становить 150 000 грн/год, а DRP зменшує цей ризик. Ми працюємо з сайтами на будь-якій CMS та стеку — від WordPress до високонавантажених проектів на React/Node.js.
Наш досвід: понад п'ять років на ринку, понад 20 проектів з аварійного відновлення, сертифікація AWS. Ми гарантуємо, що кожна інструкція проходить тестування. Простій сайту може коштувати від 100 000 до 500 000 гривень на годину для інтернет-магазину, а розробка DRP окупається при першому ж серйозному збої.
Отримайте готовий DRP під ключ за 3–5 днів. Напишіть нам для оцінки вашого проекту — ми оцінимо його безкоштовно та запропонуємо оптимальний план. Зв'яжіться з нами для консультації та замовте розробку DRP вже сьогодні.







