Балансировщики нагрузки DigitalOcean — полное руководство
Быстрые ссылки
- Ограничения балансировщиков DigitalOcean
- Создание балансировщика нагрузки
- Проверка состояния бэкендов
- Практические рекомендации и чек-листы
- Заключение
Как показал опыт многих системных администраторов, обеспечение высокой доступности — ключ к стабильной работе в продакшене. Управление балансировщиком нагрузки может быть сложной задачей. DigitalOcean предлагает сервис балансировщика нагрузки за $10/месяц, который упрощает эту задачу и покрывает типичные сценарии распределения трафика.
Что умеет балансировщик DigitalOcean? Ниже — список основных возможностей, которые влияют на поведение и производительность сервиса:
- Резервирование и автоматическое переключение при отказе
- Добавление ресурсов по имени или тегу
- Поддерживаемые протоколы: HTTP(S), HTTP/2, TCP
- Сертификаты Let’s Encrypt (при использовании DNS DigitalOcean)
- Поддержка PROXY Protocol
- «Sticky» сессии через cookie
- Конфигурируемые проверки здоровья бэкендов
- Алгоритмы: Round Robin или Least Connections
- Перенаправление HTTP → HTTPS
- Backend keepalive для производительности
Ограничения балансировщиков DigitalOcean
При работе с балансировщиками важно понимать их ограничения, чтобы корректно спроектировать архитектуру:
- Входящие TLS-соединения поддерживают только TLS 1.2, при этом соединения от балансировщика к Droplet могут использовать TLS 1.1 и TLS 1.2.
- Нет поддержки IPv6.
- SSL passthrough не пропускает HTTP заголовки, такие как:
X-Forwarded-Protoи
X-Forwarded-For— такие заголовки доступны только при использовании HTTP/HTTPS с терминейшн сертификатом.
- Sticky сессии видимы только на границе балансировщика — куки создаются и удаляются на уровне балансировщика и не передаются дальше.
- При включенном keep-alive существует предел в 60 секунд на удержание соединения.
- Балансировщики поддерживают 10 000 одновременных подключений, распределённых между всеми ресурсами (например, 5000 к двум разным Droplet).
- Пробы состояния отсылаются как HTTP/1.0.
- К балансировщикам нельзя прикрепить плавающий IP (Floating IP).
- Порты
50053до50055зарезервированы для внутреннего использования балансировщика. - Let’s Encrypt поддерживается только при использовании DNS DigitalOcean.
- Let’s Encrypt на балансировщиках не поддерживает wildcard-сертификаты.
Ключевой вывод: сервис рассчитан на простые и средние нагрузки. Для сложных требований (IPv6, продвинутая маршрутизация, миллионы подключений) стоит рассмотреть дополнительные решения.
Создание балансировщика нагрузки
При создании нового балансировщика необходимо выбрать регион, в котором он будет создан и находиться рядом с Droplet, которые будут балансироваться. Балансировка не работает между разными регионами, поэтому все Droplet должны быть в одном регионе.

Далее нужно определить ресурсы, которые будут добавлены в пул. Рекомендуется использовать теги: любой новый Droplet с этим тегом автоматически попадёт в пул. Ограничение: можно добавить не более 10 Droplet вручную, поэтому теги позволяют обойти это ограничение и масштабировать пул.

После добавления ресурсов создайте правила пересылки трафика (forwarding rules). В простом случае для веб-сервера достаточно правила, которое перенаправляет HTTP на порт 80.

Существуют расширенные параметры, которые можно настроить сразу или позже: алгоритм распределения, sticky-сессии, проверки здоровья, перенаправление на HTTPS, поддержка PROXY Protocol, активация backend keepalive.

Наконец, выберите имя балансировщика и нажмите Create Load Balancer.

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

Чтобы увидеть работу балансировщика, откройте IP каждого Droplet. В примере на Droplet установлен Nginx, и в файле
index.htmlв директории
/var/www/htmlразмещён текст, идентифицирующий сервер.


Каждый сервер показывает ожидаемый текст. Теперь откройте IP адрес самого балансировщика. После нескольких перезагрузок вы увидите страницы с разными идентификаторами на одном IP — трафик маршрутизируется между связанными Droplet.


Проверка состояния бэкендов
Проверки состояния выполняются регулярно в соответствии с настроенным интервалом. Как только Droplet определяется как недоступный, балансировщик перестаёт направлять на него трафик.
В примере ниже после выключения lc-test-02 балансировщик перестал направлять на него запросы. При обновлении страницы отображается только содержимое тестового сервера 1.

Практические рекомендации
- Используйте теги для автоматического включения новых Droplet в пул. Это упрощает автошкалирование.
- Настройте health checks таким образом, чтобы они проверяли реальную работу приложения (например, простой HTTP GET на /health с кодом 200), а не только открытый порт.
- Для SSL: если нужен доступ к HTTP заголовкам, используйте SSL termination на балансировщике; если требуется end-to-end шифрование и заголовки не важны, можно применять SSL passthrough.
- Sticky-сессии через куки удобны для сессий, которые нельзя хранить в общем сторе, но помните, что куки удаляются балансировщиком и не видны бэкендам.
- Проверьте соответствие брандмауэра: балансировщик должен иметь возможность обращаться к портам, указанным в health check.
- Для высокого числа соединений распределяйте трафик на большее количество Droplet, чтобы не исчерпать глобальный лимит 10 000 подключений.
- Понимайте ограничение keep-alive в 60 секунд — для долгоживущих соединений (например, WebSocket) потребуются альтернативные решения.
Когда балансировщик DigitalOcean не подходит
- Нужна поддержка IPv6 — DigitalOcean LB не поддерживает IPv6.
- Требуется wildcard Let’s Encrypt на LB — не поддерживается.
- Нужна глубокая обработка L7 (сложные правила маршрутизации, WAF, модификация заголовков) — стоит рассмотреть Nginx/HAProxy на своих виртуальных машинах или коммерческие облачные LB с расширенными возможностями.
- Очень высокая пропускная способность и миллионы параллельных соединений — может потребоваться специализированное решение или CDN.
Альтернативные подходы
- Самостоятельный балансировщик на базе HAProxy или Nginx: даёт полный контроль, поддержку IPv6 и расширенную конфигурацию, но требует сопровождения и резервирования.
- Облачные балансировщики других провайдеров: часто имеют расширенные функции (WAF, IPv6, глобальная балансировка), но дороже.
- Комбинация CDN + LB: CDN отдает статику, LB — динамику, снижая нагрузку на Droplet.
Чек-листы ролей
DevOps:
- Настроить теги и авто-добавление Droplet
- Настроить проверки здоровья с проверкой бизнес-логики
- Протестировать поведение при отказе Droplet
Системный администратор:
- Проверить правила брандмауэра для health checks
- Обеспечить мониторинг входящих соединений и метрик нагрузки
- Настроить логирование и оповещения
Разработчик:
- Обеспечить endpoint для health check (например, /health с кодом 200)
- Сделать приложение корректным при повторных запросах (idempotent)
- Поддерживать сессии в общей базе, если не хотите использовать sticky-сессии
Инженер безопасности:
- Настроить SSL termination и контролировать сертификаты
- Включить PROXY Protocol, если нужно передать адрес клиента в безопасном виде
- Проверить соответствие требованиям конфиденциальности
Критерии приёмки
- Балансировщик отвечает на запросы и возвращает правильный контент при нескольких обновлениях страницы.
- Health check правильно выводит недоступные Droplet из пула.
- SSL работает корректно при выбранной конфигурации (терминейшн или passthrough).
- При отключении одного Droplet трафик перераспределяется, а общая доступность сохраняется.
- Логи и мониторинг фиксируют метрики соединений и ошибок.
Мини-методология развертывания
- Определите требования: протоколы, SSL, масштаб, регион.
- Создайте Droplet в одном регионе и пометьте тегом.
- Создайте Load Balancer в том же регионе и добавьте тег.
- Настройте правила пересылки и health checks.
- Протестируйте: откатите Droplet, проверьте sticky-сессии, SSL.
- Настройте мониторинг и оповещения.
Матрица сравнения (упрощённая)
| Критерий | DigitalOcean LB | Самостоятельный HAProxy | Облачный провайдер — премиум |
|---|---|---|---|
| Простота настройки | Высокая | Средняя | Средняя—Высокая |
| Стоимость | Низкая | Переменная | Высокая |
| Поддержка IPv6 | Нет | Да | Да |
| Let’s Encrypt | Да (без wildcard) | Зависит от реализации | Да |
| Гибкость правил | Ограниченная | Полная | Часто полная |
Безопасность и конфиденциальность
- Храните приватные ключи и доступ к аккаунту DigitalOcean в защищённом хранилище секретов.
- Используйте HTTPS и отключайте старые версии TLS на уровне приложения, если это возможно.
- Если вы собираете персональные данные, проверьте соответствие требованиям местного законодательства по защите данных.
Ключевые числа
- Стоимость: $10/месяц за балансировщик.
- Ограничение одновременных подключений: 10 000.
- Keep-alive для backend: максимум 60 секунд.
- Резервируемые порты: 50053–50055.
Сценарии тестирования
- Отключение одного Droplet — проверка, что трафик не идёт на него.
- Массовые подключения — убедиться, что не превышен лимит 10 000.
- Провал health check — убедиться, что LB выводит узел из пула.
- SSL: проверка режима termination vs passthrough и доступности заголовков.
Заключение
Балансировщики нагрузки DigitalOcean — недорогое и удобное решение для большинства типичных веб-приложений. Они обеспечивают базовую отказоустойчивость, поддержку HTTP/2, SSL termination и автоматическое добавление ресурсов по тегам. Однако важно учитывать ограничения: отсутствие IPv6, лимит одновременных подключений и особенности работы с SSL. Для сложных или очень нагруженных систем стоит рассмотреть гибридные подходы: CDN, собственные балансировщики или премиальные облачные сервисы.
Важно: перед переходом в продакшен выполните тесты отказоустойчивости и убедитесь, что health checks отражают реальное состояние приложений.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента