VK Cloud logo

Балансировщик нагрузки

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

Также балансировщик используется для обеспечения работы других сервисов платформы:

  • Сервис контейнеров использует балансировщик для обеспечения доступа к Kubernetes API. Отдельный балансировщик будет создан и для Ingress-контроллера NGINX, если такой контроллер будет выбран при создании кластера.
  • Сервис баз данных использует балансировщик для обеспечения работы кластеров баз данных.

Балансировщик нагрузки платформы VK Cloud построен на базе OpenStack Octavia, который в своей основе имеет HAProxy. OpenStack Octavia дает балансировщику следующие возможности:

  • Проксирование и балансировка HTTP-, HTTPS-, UDP- и TCP-соединений (последние — в том числе с поддержкой proxy-протокола).

    Proxy-протокол при использовании протокола TCP позволяет передать серверу информацию о соединениях (например, IP-адрес клиента). Чтобы сервер мог обрабатывать такую информацию, он сам должен поддерживать этот протокол. Proxy-протокол поддерживают NGINX, Apache, Envoy и другие продукты.

  • Проксирование и балансировка HTTP/2-соединений в дополнение к HTTP/1.1.

  • Терминирование SSL-соединений на балансировщике.

  • Тонкая настройка таймаутов (timeouts).

  • Различные методы балансировки.

  • Настройка весов для бэкендов.

Для отказоустойчивости поддерживаются два экземпляра балансировщика, один из которых находится в режиме active, а другой — в режиме standby. Синхронизация состояний и переключение трафика между этими балансировщиками происходят с помощью протокола VRRP. С точки зрения пользователя такая отказоустойчивая конфигурация выглядит как один балансировщик.

Для обеспечения максимальной производительности балансировщика:

  • Обеспечьте подключение к бэкендам по протоколу HTTP/1.1 с поддержкой keep-alive.
  • Используйте стандартный Ethernet MTU 1500 байт для входящего на балансировщик трафика.

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