инфра/гид

Отказоустойчивый сайт: два сервера, балансировщик и защита от DDoS

Обновлено09.11.2026 Цены проверены08.11.2026Источникdocs.selectel.ru, selectel.ruЧтение9 мин .md
Коротко

Минимальная отказоустойчивая схема — два облачных сервера за балансировщиком с резервированием и база данных из двух нод — стоит около 17 000 ₽ в месяц (наш расчёт ниже). Из них балансировщик — 2 607,89 ₽/мес, сервер 2 vCPU / 4 ГБ — от 2 539,74 ₽/мес. Защита от DDoS на уровнях L3–L4 уже включена бесплатно, но от атак на сам сайт (L7) она не спасает.

В этой статье
Наш выбор

Магазину или сервису, у которого час простоя стоит дороже десяти тысяч рублей, — два облачных сервера за балансировщиком с резервированием и управляемая база из двух нод. Если нужно пережить потерю целого дата-центра — та же схема в московском пуле ru-6 с тремя зонами.

Конфигурация
2 × Standard 2 vCPU · 4 ГБ + балансировщик «Базовый с резервированием» + PostgreSQL или MySQL, 2 ноды
Цена от
≈ 17 000 ₽/мес (наш расчёт), балансировщик — 2 607,89 ₽/мес
Бесплатно
защита от DDoS L3–L4, 3 ТБ внешнего трафика в месяц на аккаунт, 3 проверки доступности
Когда не подходит
визитка, блог, магазин с оборотом до 1–2 млн ₽ в месяц — хватит одного сервера, бэкапов и мониторинга
Облако Selectel

Реклама. АО «Селектел», ИНН 7810962785, selectel.ru. erid: 2VtzqwtXUsg

Что нужно понять за минуту

Сайт падает не потому, что «хостинг плохой», а потому, что у него есть единая точка отказа: один сервер, один диск, одна база. Отказоустойчивость — это копия у каждого звена и кто-то, кто переключает трафик на живую копию. Этот «кто-то» — балансировщик нагрузки: он принимает запросы, раздаёт их между серверами, регулярно проверяет, живы ли они, и перестаёт слать трафик на упавший.

Звеньев обычно четыре:

  • вход — балансировщик. Сам по себе он тоже может упасть, поэтому нужен тип с резервированием: два инстанса, второй подхватывает работу первого;
  • серверы приложения — минимум два одинаковых;
  • база данных — кластер из мастера и реплики: если мастер перестанет работать, его роль перейдёт реплике;
  • файлы — картинки и загрузки пользователей должны лежать не на диске одного сервера, а в общем хранилище, например в S3.

Чего отказоустойчивость не даёт: защиты от собственной ошибки. Кривой релиз или удалённая таблица мгновенно окажутся на всех копиях. Бэкапы нужны всё равно.

Сколько стоит

Цены провайдера на 8 ноября 2026, с НДС, за месяц.

Компонент Что важно знать Цена
Облачный сервер Standard 2 vCPU / 4 ГБ без диска, IP и трафика сверх 3 ТБ 2 539,74 ₽/мес
Сетевой диск SSD (универсальный v2) за 1 ГБ 10,48 ₽ за ГБ/мес
Публичный IP-адрес один IPv4 189,57 ₽/мес
Балансировщик «Базовый без резервирования» один инстанс, для тестов 1 398,30 ₽/мес
Балансировщик «Базовый с резервированием» два инстанса, около 19 500 HTTP-запросов в секунду 2 607,89 ₽/мес
Балансировщик «Продвинутый с резервированием» около 34 тысяч HTTP-запросов в секунду 4 339,05 ₽/мес
Управляемый PostgreSQL, Memory 2 vCPU / 4 ГБ / 32 ГБ за одну ноду кластера 4 125,22 ₽/мес
Управляемый MySQL semi-sync, та же конфигурация за одну ноду, подходит для CMS 4 125,22 ₽/мес
Проверка доступности сверх трёх бесплатных за одну проверку 52 ₽/мес

проверено 08.11.2026 · источник

Три ступени: наш расчёт

Схема Что переживёт ≈ ₽/мес
1. Один сервер, бэкапы, мониторинг ничего: при сбое — ручное восстановление, часы ≈ 3 150
2. Два сервера, балансировщик с резервированием, база из двух нод падение сервера, инстанса балансировщика, мастера базы ≈ 17 000
3. То же в пуле ru-6, по трём зонам потерю целого дата-центра от ≈ 17 000, итог — в калькуляторе для ru-6

Формулы. Ступень 1: 2 539,74 + 40 ГБ × 10,48 + 189,57 ≈ 3 150 ₽. Ступень 2: два сервера с дисками по 40 ГБ + балансировщик 2 607,89 + две ноды PostgreSQL по 4 125,22 + один публичный IP для балансировщика ≈ 16 970 ₽. Сервер посчитан по калькулятору (пул в Санкт-Петербурге), диск и IP — по прайсу московского пула; разница между пулами небольшая, но итог сверяйте в калькуляторе. Трафик сверх 3 ТБ и хранение бэкапов — сверху.

Окупится ли резерв

Ступень 2 дороже ступени 1 примерно на 13 800 ₽ в месяц. Сравните это с ценой часа простоя (наш расчёт, средний час = месячный оборот ÷ 730 часов):

  • оборот 1 млн ₽ в месяц — час простоя ≈ 1 370 ₽. Резерв окупается, только если без него сайт лежит больше 10 часов каждый месяц. Почти никогда: берите ступень 1;
  • оборот 10 млн ₽ в месяц — час ≈ 13 700 ₽. Резерв окупается уже примерно при часе простоя в месяц, а одно восстановление из бэкапа занимает несколько часов.

На деле час простоя дороже среднего: сайт падает под пиковой нагрузкой, а реклама в это время продолжает тратить бюджет. Если сомневаетесь — начните с одного сервера и посмотрите, какая конфигурация нужна магазину, а общую сумму по серверам прикиньте в калькуляторе стоимости сервера.

Как выбрать ступень

Ступень 1 — один сервер. Сайт-визитка, блог, лендинг, небольшой магазин. Обязательно: ежедневные бэкапы вне сервера и внешняя проверка доступности. У Selectel первые три проверки бесплатны, результаты приходят на почту, по HTTP или SMS (SMS — за отдельную плату) — так вы узнаете о падении раньше клиентов.

Ступень 2 — два сервера и балансировщик в одном пуле. Магазин или сервис, у которого простой стоит дорого. Балансировщик берите с резервированием: тип без резервирования сама Selectel советует для тестовых окружений и проектов, которым не нужна доступность 24/7. Базу — управляемым кластером из двух нод: за репликацию, переключение и бэкапы отвечает провайдер. Для кластера с репликами Selectel даёт SLA 99,95 % на запись и 99,99 % на чтение. В пулах из нескольких сегментов ноды базы разносятся по разным стойкам одного дата-центра.

Ступень 3 — пул ru-6. Московский пул с тремя зонами доступности, каждая — отдельный дата-центр. Здесь балансировщик с резервированием ставит два инстанса в разные зоны: если одна зона выйдет из строя, инстанс в другой продолжит раздавать трафик. Кластер базы с репликами раскладывает ноды по зонам ru-6a, ru-6b, ru-6c. Серверы приложения вы создаёте в разных зонах сами. Конкретных RTO и RPO провайдер не называет: по его словам, они зависят от сервиса и архитектуры. Если нужно пережить не только сбой ЦОД, но и потерю всей площадки, смотрите резервный ЦОД и DRaaS.

Как настроить: четыре вещи, о которых забывают

  1. Проверка доступности на балансировщике. Тип HTTP с отдельным адресом, например /healthz, который проверяет, что приложение отвечает. Порог неуспеха — 2–3 обращения подряд: так упавший сервер выпадет быстро, а случайная задержка его не выбросит.
  2. Сессии. Если корзина или вход хранятся в памяти одного сервера, при переключении пользователя выкинет. Лучше хранить сессии в базе или Redis. Временный выход — Sticky sessions в настройках целевой группы, но это не резерв, а костыль.
  3. Адрес клиента. Сервер видит адрес балансировщика, а не посетителя. В правиле HTTP или HTTPS отметьте заголовки, которые балансировщик передаёт серверам, — адрес клиента обычно приходит в X-Forwarded-For. Для TCP есть режим TCP → PROXY: адрес передаётся в отдельном заголовке соединения.
  4. Серверы без публичных адресов. Selectel рекомендует ставить балансировщик в приватную подсеть и подключать к нему публичный плавающий IP. Тогда снаружи виден только балансировщик, а до самих серверов из интернета напрямую не достучаться.

Пример nginx на каждом сервере за балансировщиком: настоящий адрес клиента, ограничение частоты запросов и адрес для проверки доступности.

# /etc/nginx/conf.d/site.conf
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;

server {
    listen 80;
    server_name _;

    # подсеть, в которой стоит балансировщик
    set_real_ip_from 10.0.0.0/24;
    real_ip_header X-Forwarded-For;

    location = /healthz {
        access_log off;
        return 200 "ok\n";
    }

    location / {
        limit_req zone=perip burst=20 nodelay;
        proxy_pass http://127.0.0.1:8080;
    }
}

Без set_real_ip_from лимит сработает на адрес балансировщика и заблокирует всех посетителей сразу. Здесь /healthz отвечает сам nginx — так балансировщик узнает, что жив сервер; чтобы проверять и приложение, проксируйте /healthz на его собственный адрес проверки. Лимит подбирайте под свой сайт: страница с десятками картинок и скриптов может упереться в burst, поэтому статику лучше отдавать отдельным location без лимита или из S3.

Защита от DDoS: что уже есть бесплатно

У облачных серверов, управляемых баз и Kubernetes в Selectel по умолчанию включена базовая защита на уровнях L3–L4. Она гасит атаки с отражением через UDP (DNS, NTP, memcache), SYN-флуд, UDP- и ICMP-флуд. Анализируется только входящий трафик, отдельно платить не нужно.

Чего она не делает: не защищает от атак на уровне приложения (L7) — валидными HTTP- и HTTPS-запросами, валидными TCP-соединениями, по узким местам самого сайта. Против небольших L7-атак помогают ограничение частоты запросов в nginx, как в примере выше, кэширование тяжёлых страниц и запас мощности за балансировщиком. Если сайт атакуют всерьёз и этого не хватает, у провайдера есть партнёрские тарифы L7 от 24 400 ₽/мес. Это отдельная большая статья расходов, брать её «на всякий случай» нет смысла.

Что не подойдёт и ограничения

  • Балансировщик работает в пределах одного пула. Связать им серверы в Москве и Санкт-Петербурге нельзя. Для защиты от потери ЦОД — пул ru-6 с зонами.
  • Балансировщик без резервирования — сам точка отказа. Экономия на нём обнуляет смысл двух серверов.
  • Пересоздание инстанса балансировщика после смены сетевых настроек занимает до пяти секунд, в это время трафик не принимается. Делайте это в тихие часы.
  • База на линейках HighFreq и Dedicated в однозональных пулах размещается в одном сегменте даже с репликами. Если важна раскладка по стойкам, берите другие линейки.
  • Базовая защита при долгой атаке может включить blackhole: входящий трафик на адрес блокируют, Selectel создаёт тикет, снять блокировку можно ответом в тикете, автоматически она снимается через восемь часов.
  • Файлы на локальном диске сервера. Второй сервер их не увидит — выносите загрузки в объектное хранилище.
  • Готовые CMS не всегда умеют работать на двух серверах из коробки: проверьте, где они хранят сессии, кэш и загрузки. Про требования Битрикса — отдельный гайд сервер для Битрикса.

Как мы сделали

Единая точка отказа и запасной вход

Часть наших сервисов работает на одном домашнем мини-ПК, и он однажды показал цену единой точки отказа: 10,5 часа без питания, потому что ИБП отключил выход из-за перегрева. ИБП на 3 кВА держит около получаса — этого мало. Поэтому всё клиентское у нас либо с резервом в облаке, либо честно называется «домашним». А когда переводили точку входа сайтов на облачный сервер в Москве (2 vCPU / 4 ГБ, Caddy и туннель WireGuard к основному серверу), старый туннель оставили запасным. После любых правок входа проверяем минимум три несвязанных домена.

Частые вопросы

Как защитить сайт от DDoS-атак?

Сначала проверьте, что уже есть: у облачных серверов Selectel защита от атак на сетевом и транспортном уровне (L3–L4) включена бесплатно. Затем закройте сам сайт: ограничение частоты запросов в nginx, кэш, серверы без публичных адресов за балансировщиком. Платная защита уровня L7 нужна, когда атакуют именно запросами к страницам и ваш сайт этого не выдерживает.

Нужна ли платная защита от DDoS для сайта?

Большинству небольших сайтов — нет: от массовых сетевых атак спасает бесплатная базовая защита. Платная защита L7 у партнёров провайдера стоит десятки тысяч рублей в месяц, её берут сайты, которые реально атакуют запросами: магазины в сезон распродаж, сервисы с конкурентами, медиа.

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

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

Сколько стоит отказоустойчивый сайт?

По нашему расчёту на ценах Selectel 8 ноября 2026 — около 17 000 ₽ в месяц за два сервера 2 vCPU / 4 ГБ, балансировщик с резервированием и базу из двух нод. Один сервер без резерва — около 3 150 ₽. Решает не цена, а сколько вы теряете за час простоя.

Что будет, если выйдет из строя целый дата-центр?

В обычном пуле все копии стоят в одном дата-центре, и такую аварию схема не переживёт. В московском пуле ru-6 три зоны доступности в отдельных дата-центрах: балансировщик с резервированием и реплики базы данных раскладываются по разным зонам, а серверы вы размещаете по зонам сами.

Источники

  1. Балансировщик нагрузки для облака — selectel.ruпроверено 08.11.2026
  2. Балансировщик нагрузки: типы, проверки доступности — документация Selectelпроверено 09.11.2026
  3. Создать балансировщик нагрузки — документация Selectelпроверено 09.11.2026
  4. Пересоздать инстанс балансировщика — документация Selectelпроверено 09.11.2026
  5. Отказоустойчивое облако ru-6 — selectel.ruпроверено 09.11.2026
  6. Отказоустойчивость кластера PostgreSQL — документация Selectelпроверено 09.11.2026
  7. Облачная база данных PostgreSQL — selectel.ruпроверено 08.11.2026
  8. Калькулятор облачных серверов — selectel.ruпроверено 08.11.2026
  9. Цены на ресурсы облака — selectel.ruпроверено 08.11.2026
  10. Защита от DDoS-атак — selectel.ruпроверено 08.11.2026
  11. Защита Selectel от DDoS — документация Selectelпроверено 09.11.2026
  12. Проверка доступности сервисов — selectel.ruпроверено 08.11.2026

Связанные гайды