Налаштування автоматичного Failover при збої основного сервера

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування автоматичного Failover при збої основного сервера
Складна
~3-5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування автоматичного Failover при відмові основного серверу

Автоматичний failover — це переключення трафіку на резервний сервер без людської участі. Мета: скоротити RTO (Recovery Time Objective) з «поки хтось не прокинеться» до 30-120 секунд. Для e-commerce або SaaS це різниця між втратою 5 хвилин та втратою години доходу.

Рівні failover і де кожен застосовується

DNS-рівень (Route 53 Health Checks, Cloudflare Failover). Найпростіший варіант. Health check перевіряє primary кожні 10-30 секунд. При падінні — змінює DNS-запис на IP резервного серверу. Затримка: TTL + час виявлення = 60-300 секунд. Підходить для більшості веб-додатків.

Load Balancer (AWS ALB/NLB, nginx upstream). Health check на рівні балансувальника, переключення за 5-30 секунд. Вимагає обидва сервери в одній хмарі або регіоні.

VRRP / Keepalived (bare metal / VPS). Віртуальна IP переміщується між серверами при падінні master. Переключення за 2-5 секунд. Класика для on-premise та dedicated.

Database failover. Окремі завдання — додаток повинен знати про новий primary DB. Patroni (PostgreSQL), MHA (MySQL), AWS RDS Multi-AZ розв'язують це автоматично.

Реалізація на AWS Route 53

Route 53 Failover Policy:
  Primary record → 1.2.3.4 (основний сервер)
    Health check: HTTP GET /health, port 443
    Failure threshold: 3 consecutive failures
    Request interval: 10 seconds
  Secondary record → 5.6.7.8 (резервний сервер)
    Evaluate target health: Yes

Ендпоінт /health у додатку повинен перевіряти реальний стан: БД доступна, кеш працює, дискове місце не вичерпане. Повертати 200 тільки при повній працездатності.

Keepalived для bare metal / VPS

# /etc/keepalived/keepalived.conf на PRIMARY
vrrp_script check_app {
    script "/usr/local/bin/check_app.sh"
    interval 5
    weight -20
    fall 2
    rise 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    virtual_ipaddress {
        192.168.1.100/24
    }
    track_script {
        check_app
    }
}

Скрипт check_app.sh перевіряє доступність додатку локально. При двох невдалих перевірках поспіль — BACKUP-сервер з пріоритетом 90 захоплює віртуальну IP.

Синхронізація даних між серверами

Failover безглуздий без актуальних даних на резервному сервері:

  • БД: реплікація master-slave (PostgreSQL streaming replication, MySQL GTID-реплікація). Лаг реплікації моніторится,Alert при перевищенні 30 секунд
  • Файли: lsyncd (realtime rsync) або S3-сумісне сховище як спільна точка
  • Сесії: Redis з репліцією або sticky sessions через балансувальник
  • Конфігурація: Ansible pull з спільного git-репозиторію

Тестування failover

Регулярні навчання — обов'язкові. Failover, який не тестувався — це failover, який не працюватиме у потрібний момент.

Протокол перевірки:

  1. Переконатися, що моніторинг фіксує вихідний стан
  2. Симулювати відмову: systemctl stop nginx або iptables -I INPUT -p tcp --dport 80 -j DROP на primary
  3. Зафіксувати час до переключення
  4. Перевірити працездатність через резервний сервер
  5. Відновити primary, перевірити зворотне переключення

Цільові метрики: detection time < 30s, switch time < 60s, total RTO < 120s.

Стан «split-brain» і як його уникнути

Проблема: обидва сервери вважають себе primary. У Keepalived розв'язується через fencing (STONITH) — при конфлікті слабший вузол примусово вимикається. У PostgreSQL/Patroni — через DCS (etcd, Consul, ZooKeeper) як арбітр.

Терміни налаштування

  • DNS failover (Route 53 / Cloudflare) — 1-2 дні
  • Keepalived + синхронізація даних — 3-5 днів
  • Повна схема з DB failover (Patroni) — 5-10 днів
  • Тестування та документація — 1-2 дні

Моніторинг failover-подій

Кожне переключення — це інцидент, який потрібно розслідувати. Alertmanager або PagerDuty фіксують подію. Автоматично створюється тікет у Jira/Linear. Постфактум — root cause analysis: чому впав primary.