
Балансировщик нагрузки — это точка входа, которая направляет обращения к подходящим серверам приложения. Посетитель открывает один адрес сайта, а за ним могут работать два, три или больше экземпляров. Балансировщик выбирает получателя по правилам и результатам проверок.
Его ставят, чтобы распределять обращения, выводить узлы на обслуживание и уменьшать влияние отдельных отказов. Но он не делает любую программу кластерной: сессии, база данных, файлы и сам вход в систему требуют отдельного решения. Начнём с наглядного примера, затем разберём настройки и порядок проверки. Материал проверен по документации производителей 13 ноября 2026 года.
Один адрес сайта — несколько серверов за ним
Один привычный адрес сайта
Выбирает подходящего получателя
Копия приложения готова к работе.
Другая копия приложения готова.
Это упрощённая схема выбора, не удвоение каждого запроса. Пользователь не обязан знать адреса отдельных узлов.
Представим корпоративный портал. Сотрудник вводит адрес, а балансировщик передаёт запрос одному из двух веб-узлов. Следующий запрос может получить другой узел, если это допускают настройки и архитектура приложения. Ответ возвращается сотруднику по предусмотренному сетевому пути; в распространённой прокси-схеме — через балансировщик.
Что получает бизнес
- Обслуживание без общего выключения: можно вывести одну копию из ротации, обновить и проверить её.
- Запас по нагрузке: дополнительные экземпляры принимают часть обращений, если приложение умеет работать в такой схеме.
- Реакцию на отказ: новые обращения можно перестать отправлять неготовому узлу после его обнаружения.
Это возможности правильно построенной системы, а не обещание нулевого простоя. Незавершённый запрос на отказавшем узле может оборваться, а оставшимся серверам понадобится достаточная производительность.
Четыре понятия: вход, пул, узел и проверка
Где и по каким правилам принимают обращение.
Адрес + порт приложения.
Адрес + порт приложения.
Вложенные рамки обозначают логические роли. Они могут выполняться программой, устройством или облачной услугой.
- Listener / frontend: адрес, порт и правила приёма обращений. Например, HTTPS на порту 443.
- Pool / backend: группа серверов, которым можно передать нужный трафик. Название backend может обозначать и всю группу, и серверную часть — смотрите терминологию продукта.
- Участник пула: конкретный адрес и порт приложения. Два процесса на одной ВМ — два получателя, но одна общая зависимость от этой ВМ.
- Health check: проверка, которая помогает решить, готов ли получатель принимать обращения.
Балансировщик бывает программой на Linux или ВМ, аппаратным устройством либо управляемой облачной услугой. Отдельная дорогая коробка для самого принципа не обязательна. Реалистичные изображения в статье показывают условное оборудование, а не стенд с измеренной производительностью.
L4 и L7: соединение или содержимое запроса
Условно: адрес и порт → выбранный сервер.
Условно: сайт и путь → подходящий пул.
Возможности зависят от режима и продукта. Зашифрованный HTTP нельзя читать без соответствующей расшифровки.
Решения принимаются по сетевым параметрам и соединениям. При TCP-балансировке одно установленное соединение обычно остаётся привязано к выбранному получателю; каждый его пакет не отправляют случайному серверу.
HTTP-балансировщик может учитывать имя сайта, путь и другие доступные поля запроса. Например, обращения к API и изображениям направляются в разные группы.
Это не рейтинг «L7 всегда лучше». Нужны подходящие протоколы, пропускная способность и функции. Для анализа HTTP внутри HTTPS трафик должен быть расшифрован в соответствующей точке. Поддержку UDP, HTTP/2, HTTP/3, gRPC и WebSocket уточняют для конкретного продукта и режима.
Выбор влияет на диагностику: при L4 смотрят соединения и сетевые ошибки; при L7 дополнительно видны HTTP-коды, маршруты и прикладные времена. Понятия listener и pool встречаются, например, в документации облачного балансировщика Selectel.
Как выбирается сервер: по очереди, по весу или по соединениям
- Round robin: обращения распределяются по очереди между доступными участниками с учётом реализации и настроек. Это удобная исходная модель для похожих узлов.
- Веса: более производительному узлу задают большую долю. Отношение 2:1 описывает целевое распределение выбранных обращений, а не гарантию одинаковой загрузки процессоров.
- Least connections: учитывается число активных соединений. Полезно при неодинаковой длительности работы, но число соединений не равно загрузке CPU или сложности запросов.
- Хеширование: получатель выбирается по определённому ключу, например адресу клиента. Добавление и удаление узлов может менять соответствия; детали зависят от алгоритма.
Алгоритмы и ограничения описаны у NGINX и в руководстве HAProxy по backend. Из названия least connections нельзя делать вывод, что продукт автоматически измеряет свободную память, быстродействие дисков и очередь СУБД.
Простой пример
Два одинаковых веб-узла выполняют короткие запросы — начинаем с равных весов. На одном дополнительно работает тяжёлая задача — сначала устраняем конкуренцию ресурсов либо обоснованно меняем вес. Балансировщик не исправит плохой SQL-запрос, который перегружает общую базу у всех копий.
Health checks: открытый порт ещё не означает работающее приложение
TCP-соединение возможно.
HTTP-проверка ожидаемого ресурса.
Проверка, согласованная с приложением.
Более глубокая проверка требует правильного смысла и стоимости. Это уровни проверки, не автоматическая последовательность любого продукта.
TCP-проверка показывает возможность установить соединение с портом. HTTP-проверка может проверять заданный URL и ожидаемый ответ. Если сервер принимает соединения, но возвращает ошибку приложения, одной TCP-проверки недостаточно.
Активные проверки выполняются отдельно с заданным интервалом; пассивные используют наблюдаемые ошибки рабочего трафика. Доступность функций зависит от продукта и редакции. Так, в руководстве NGINX разграничиваются пассивные проверки и встроенные активные HTTP-проверки NGINX Plus.
- Определите смысл готовности: процесс жив, готов принимать запросы или способен выполнить нужную функцию.
- Согласуйте URL, метод, Host и ожидаемый статус; редирект на страницу входа не должен случайно считаться успешной проверкой нужной функции.
- Задайте интервалы, таймауты и пороги отключения/возврата; слишком чувствительная проверка создаёт постоянные переключения.
- Не выполняйте в каждой частой пробе тяжёлый отчёт и не публикуйте в ответе пароли, строки подключения или внутренние подробности.
В документации HAProxy показаны проверки разных уровней. Собственная страница readiness должна соответствовать вашему приложению: универсального URL /health для всех программ нет.
Узел отказал: что переключится, а что может оборваться
Обнаружил неготовность узла A
Исключён из обычного выбора после обнаружения.
Принимает новые подходящие обращения.
Оборванный запрос и локальная сессия не переселяются сами. Оставшийся узел должен выдержать необходимую нагрузку.
После обнаружения отказа балансировщик исключает получателя из обычного выбора. Новые подходящие обращения идут оставшимся. Между фактическим отказом и его обнаружением проходит время; часть пользователей может успеть получить ошибку.
Уже открытые соединения и работающая на отказавшем узле операция не «переезжают» автоматически. Повторная отправка зависит от протокола, клиента, приложения и настроек. Особенно опасно бездумно повторять изменение данных: неизвестно, успел ли сервер провести платёж или документ до обрыва ответа.
Проверяем остаточную мощность
Если два узла в обычном режиме уже работают почти на пределе, после потери одного второй может не справиться. Для устойчивости считают требуемую нагрузку при отказе, а не только красивое распределение 50/50. Реальную ёмкость подтверждают испытанием с вашим профилем запросов.
Изображение ниже — иллюстрация узлов, а не подтверждение переключения. Результат проверяют по запросам, журналам, состоянию пула и бизнес-операциям.

Почему после переключения пропадает вход или корзина
Состояние на потерянном узле не восстановится от выбора адреса.
Нужна поддержка приложения и собственная доступность хранения.
Схема объясняет различие подходов. Она не утверждает, что любая программа поддерживает любой из них.
Если данные пользовательского сеанса лежат только в памяти первого веб-узла, второй может их не знать. Тогда пользователь снова увидит форму входа или потеряет незавершённую работу. Сначала выясняют, где приложение хранит состояние, а затем выбирают схему.
Старается направлять клиента на прежний узел. При отказе этого узла локальное состояние не появляется на соседнем. Привязка помогает совместимости, но не является копией данных.
Сессии могут храниться в согласованной внешней системе, если это поддерживает приложение. У хранилища появляются свои требования к доступности, безопасности и задержкам.
HAProxy описывает привязку по cookie и IP. Общий внешний адрес офиса способен «собрать» множество сотрудников на одном узле при IP-привязке. Поэтому выбор ключа влияет и на равномерность, и на поведение при изменении адреса.
Две копии сайта — это ещё не две копии базы
Обрабатывает свои обращения.
Обрабатывает другие обращения.
Хранение и согласованность проектируют отдельно
Добавление копии веб-программы не создаёт автоматически резерв базы или независимость от общего хранилища.
- База данных: кластеризация, репликация и выбор пишущего узла проектируются средствами СУБД и приложения.
- Загруженные файлы: нужны согласованные доступы и модель хранения. Файл на локальном диске первого веб-узла не возникает на втором.
- Фоновые задания: две одинаковые копии могут дважды отправить уведомление или выполнить регламентную работу. Нужны предусмотренные механизмы координации.
- Кэш и сессии: уточняют, что допускает локальное хранение, что должно быть общим и как переживается потеря узла.
Для 1С, корпоративной почты или портала схема зависит от поддерживаемой архитектуры конкретного продукта. Нельзя поставить два произвольных сервера за TCP-прокси и объявить их кластером. Особенно нельзя распределять запись в независимые базы без предусмотренной модели согласованности.
Репликация и балансировка также не заменяют резервные копии. Ошибочное изменение, удаление или шифрование могут затронуть доступную систему целиком; восстановление данных — отдельная процедура.
HTTPS: где заканчивается шифрование
Шифрованное соединение передаётся к получателю. Содержимое HTTP остаётся скрытым для балансировщика в этом режиме; сертификат обслуживает соответствующий узел.
HTTPS завершается на входе. Дальше можно организовать отдельное защищённое соединение к серверу; его проверку настраивают самостоятельно.
Шифрование браузер → балансировщик не доказывает шифрование балансировщик → приложение. Для второго участка проверяют сертификат, доверие, имя сервера и правила обновления. Руководство HAProxy разделяет эти подключения.
После завершения TLS приложение должно правильно понимать исходную схему HTTPS и адрес клиента. Прокси-заголовкам доверяют только от назначенных посредников: внешний клиент способен прислать поддельный заголовок. Настройка касается журналов, ограничений по IP и формирования ссылок. PROXY protocol требует поддержки обеих сторон и не взаимозаменяем с HTTP-заголовком.
А если сломается сам балансировщик?
Предусмотрен механизм доступного входа
Основной или участвующий в выбранной схеме.
Резерв или второй участник по проекту.
Его проверки и состояние — другой слой
Условная схема ролей, не готовая настройка плавающего IP. Общие хосты, сети и питание способны нарушить независимость.
Один балансировщик перед двумя серверами остаётся общей точкой отказа. Для входного уровня тоже нужна предусмотренная архитектура: резерв экземпляров, переключение адреса либо управляемая услуга с подходящими условиями.
- Проверьте общие зависимости: физический хост, коммутатор, канал, питание и зону размещения.
- Согласуйте механизм выбора активного входа и защиту от конфликтующих состояний. Плавающий IP нельзя произвольно переносить между любыми сетями.
- Учитывайте синхронизацию конфигурации, сертификатов и необходимого состояния. Перенос адреса сам по себе не переносит активные TCP-соединения.
- Проверяйте отказ входа отдельно от отказа backend и отказа базы данных.
В облаке надо изучить именно выбранный вариант услуги: одиночный экземпляр и отказоустойчивая конфигурация могут иметь разные свойства. Вторая ВМ в том же общем домене отказа не обязательно даёт нужный результат.
Как обновить узел без грубого обрыва пользователей
Применить предусмотренный режим вывода.
Проверить оставшиеся соединения и сессии.
После проверки совместимости и готовности.
Drain не всегда равен полному запрету всех новых обращений. Точные правила определяет продукт и привязка клиентов.
- Убедитесь, что другие узлы готовы принять нагрузку и совместимы с текущей версией приложения.
- Ограничьте поступление новых обращений на обслуживаемый узел предусмотренным способом.
- Проверьте активные соединения и сессии. Для долгих подключений задайте согласованный срок ожидания и порядок завершения.
- Выполните обновление, локальную проверку и контроль готовности.
- Верните узел в пул с наблюдением за ошибками, задержками и прикладными операциями.
Режим drain имеет конкретную семантику в продукте. Например, сохранённая привязка клиента может влиять на направление обращений даже после ограничения обычной балансировки. Не считайте нажатие одной кнопки гарантией отсутствия новых сессий: изучите состояния ready, drain и maintenance в HAProxy.
Обновления должны учитывать совместимость схемы базы и состояния. Две версии программы не всегда могут безопасно работать одновременно; порядок возврата определяют до начала работ.
Балансировщик, обратный прокси, DNS и защита — где разница
- Обратный прокси принимает обращения к серверной части и пересылает их дальше. Он может иметь одного получателя; балансировка добавляет выбор между участниками. Роли могут совмещаться в одной программе.
- DNS round robin возвращает адреса в DNS. Дальше влияют кэширование и поведение клиента; это не тот же контроль каждого обращения, что у HTTP-прокси.
- WAF анализирует прикладные атаки по своим правилам. Наличие балансировки не означает наличие WAF.
- Защита от DDoS требует подходящей ёмкости и фильтрации. Если входной канал уже забит, добавление backend не освободит его.
Маршрутизация по URL, фильтрация, кэширование и балансировка — разные функции. Уточняйте их состав и редакцию продукта. Базовая роль посредника описана в руководстве NGINX Reverse Proxy.
Какие решения бывают и как выбирать
HAProxy и NGINX — примеры программ, из которых строят входной слой. Команда отвечает за ОС, обновления, конфигурацию, сертификаты, мониторинг и резервирование.
Облачный балансировщик, например Selectel. Провайдер обслуживает согласованную часть инфраструктуры; готовность приложения, проверки и данные всё равно требуют настройки.
Встречаются и специализированные аппаратные/виртуальные ADC, например семейства F5 BIG-IP. Само имя продукта не гарантирует нужную функцию в любой лицензии. Перед выбором собирают требования: протоколы, TLS, тип проверок, привязка, журналирование, автоматизация, лимиты, схема отказа и поддержка.
Сравнивайте полный эксплуатационный состав: ресурсы и труд сопровождения для собственного решения; лимиты, трафик, поддержку и модель отказоустойчивости для услуги. Бесплатная лицензия не делает обслуживание бесплатным, а платная услуга не заменяет проектирование приложения.
Как оценить нужную производительность
Начните с профиля: сколько одновременных пользователей, обращений в секунду, долгих соединений, загрузок файлов и TLS-подключений. Для одного сервиса критичны новые соединения, для другого — полоса сети, для третьего — тяжёлые ответы базы. Цифра «до миллиона запросов» без условий не позволяет выбрать конфигурацию.
Значения здесь вымышлены. Проверяют не только сумму: после отказа возрастает нагрузка на сеть, CPU и отдельные соединения с базой. Установленные лимиты и очередь способны изменить результат. Сравнивайте p95/p99 и долю ошибок при одинаковых запросах, данных и времени теста, затем повторите сценарий с выведенным узлом.
Резервируют и балансировщик: он обслуживает соединения, TLS, журналы и проверки. Его ресурсы, ограничения облачной услуги и доступность внешнего канала могут стать общим пределом даже при свободных backend.
Три ситуации из практики проектирования
Портал компании нужно обновлять днём
Подготавливают два совместимых веб-узла, согласуют общие файлы и сессии, затем поочерёдно выводят их на обслуживание. До запуска проверяют вход пользователя, загрузку документа и фоновое задание. Если приложение не поддерживает параллельные версии, требуется другой порядок обновления.
API работает быстро, но иногда запрос длится минуту
Один средний показатель скрывает хвост задержек. Смотрят распределение длительности, очередь, активные соединения и ошибки по узлам. Подбирают таймауты и алгоритм под характер работы; увеличение числа узлов не исправляет блокировку общей базы.
После добавления второго узла пользователей выбрасывает из системы
Проверяют cookie, локальное хранение сеансов, общие ключи приложения и доверие к прокси-заголовкам. Временная привязка может уменьшить симптом, но требуется поддерживаемая схема состояния и проверка поведения при потере текущего узла.
Что мониторить и сохранять для расследования
- Трафик и очереди: обращения, активные соединения, отказы при приёме, ожидание свободного получателя.
- Задержки: отдельно подключение к backend и ответ приложения, если продукт это измеряет; p95/p99 вместе со средним.
- Ошибки: источник 4xx/5xx, таймауты, сбросы, изменения состояния участников.
- Ресурсы: CPU, память, сеть и лимиты соединений балансировщика и серверов.
- История: время изменения конфигурации, версии, сертификаты, действия оператора и события проверок.
Для расследования связывают события по времени и идентификатору запроса: когда начались жалобы, какой узел отвечал, что меняли и были ли ошибки у СУБД. Время на узлах должно быть согласовано. Не записывайте в журналы секреты, полные токены и чувствительные тела запросов без необходимости.
Один зелёный индикатор пула не заменяет проверку реальной операции пользователя. Важен путь снаружи через штатный адрес, а не только локальный ответ каждого сервера.
Как проверить результат: от HTTP до бизнес-операции
Сначала согласуйте тестовый контур, домен, ожидаемый ответ и безопасный сценарий. Ниже команды для Linux с установленным curl. portal.example.test и 192.0.2.20 — документальные подстановки; замените их адресами своего согласованного контура. Наличие /health заранее не предполагается.
1. Посмотреть заголовки ответа
curl --connect-timeout 3 --max-time 10 --silent --show-error --dump-header - --output /dev/null https://portal.example.test/--connect-timeout ограничивает этап соединения, --max-time — всю операцию. --dump-header - выводит заголовки, --output /dev/null убирает тело. Смотрите код и ожидаемый редирект. Команда не доказывает распределение между узлами и не обходит проверку сертификата.
2. Проверить новый вход до изменения DNS
curl --resolve portal.example.test:443:192.0.2.20 --connect-timeout 3 --max-time 10 --silent --show-error --dump-header - --output /dev/null https://portal.example.test/--resolve подставляет адрес для этой пары имени и порта, сохраняя имя в URL для HTTPS. Это позволяет проверить выбранный вход до общего переключения DNS. Нужен подходящий сертификат и доверие к нему; добавлять -k вместо исправления доверия не следует.
3. Зафиксировать время и HTTP-код одного обращения
curl --connect-timeout 3 --max-time 10 --silent --show-error --output /dev/null --write-out 'code=%{http_code} connect=%{time_connect} first_byte=%{time_starttransfer} total=%{time_total}\n' https://portal.example.test/Получите код и времена в секундах. time_starttransfer включает предшествующие этапы обращения, а не только работу СУБД. Это одиночное измерение, не нагрузочный тест и не Apdex. Параметры описаны в руководстве curl.
- Проверьте каждый узел и общий вход, затем подтвердите распределение по защищённым журналам или тестовым идентификаторам.
- В тестовом контуре выведите один участник из работы согласованным способом и измерьте обнаружение отказа, ошибки и поведение оставшихся.
- Проверьте вход пользователя, состояние сеанса, чтение/запись и долгую операцию; не повторяйте неидемпотентные операции без контроля.
- Отдельно испытайте отказ входа, восстановление узла и возврат после обслуживания.
При подготовке статьи реального переключения приложения не выполнялось; команды показывают метод проверки, а не готовый протокол испытания вашей системы.
Две карточки для проекта и приёмки
Поможем распределить нагрузку и организовать сопровождение
ИТ-аутсорсинг
- Обследование зависимостей приложения.
- Настройка проверок и мониторинга.
- Регламент обновления и разбор ошибок.
Согласуем задачи, доступы и критерии приёмки.
Обсудить сопровождениеОблачные ресурсы
- Ресурсы для нескольких экземпляров.
- Выбор размещения и сетевого входа.
- Тестовый контур и проверка нагрузки.
Подберём схему под реальное приложение.
Подобрать ресурсыВопросы и ответы
Балансировщик — это отдельное устройство?
Не обязательно. Это может быть программа, виртуальная машина, аппаратное решение или облачная услуга.
Два сервера работают вдвое быстрее одного?
Не обязательно. Результат зависит от параллелизма, общей базы, состояния, сети и самого приложения. Требуется измерение.
Балансировщик сохранит текущую операцию при отказе сервера?
Автоматического переноса выполняемой операции обычно нет. Соединение может оборваться, а повтор требует учёта результата и идемпотентности.
Достаточно ping для проверки готовности?
Нет. Доступность узла по сети и способность приложения выполнить запрос — разные проверки.
Sticky session заменяет общее хранилище сеансов?
Нет. Привязка выбирает прежний узел, но не переносит его потерянное локальное состояние.
Можно балансировать любую базу данных?
Только в поддерживаемой схеме СУБД и приложения. Выбор пишущего узла, согласованность и репликация требуют отдельных механизмов.
Балансировщик защищает от DDoS?
Сам по себе не гарантирует такую защиту. Фильтрацию, ёмкость канала, функции и ограничения проверяют отдельно.
Нужны копии при двух работающих узлах?
Да. Распределение нагрузки не заменяет историю данных и проверку восстановления.
