Открыть сервис

Linux Virtual Server

Linux Virtual Server (LVS) — это программное решение для балансировки нагрузки и построения высокопроизводительных, отказоустойчивых кластеров серверов, работающее на операционной системе Linux. LVS реализует технологию распределения входящих сетевых запросов между несколькими серверами (реальными серверами, или Real Servers), обеспечивая единую точку входа для клиентов и прозрачное масштабирование сервисов.

История

Разработка LVS была начата в 1998 году китайским учёным Чжаном Вэньсуном (Wensong Zhang) в рамках проекта по созданию отказоустойчивого веб-сервера. Первая версия была выпущена в 1999 году. С тех пор LVS стал частью ядра Linux (начиная с версии 2.4) и активно развивается сообществом. Проект получил широкое распространение в крупных интернет-компаниях, таких как Google, Amazon, Alibaba, а также в российских сервисах (например, Яндекс, ВКонтакте). В 2000-х годах LVS был стандартным решением для построения кластеров веб-серверов, пока не появились более современные технологии, такие как NGINX, HAProxy и облачные балансировщики.

Архитектура и принцип работы

LVS состоит из трёх основных компонентов:

  • Балансировщик нагрузки (Director) — главный узел, который принимает входящие запросы от клиентов и распределяет их между реальными серверами. Director работает на уровне ядра Linux, что обеспечивает высокую производительность.
  • Реальные серверы (Real Servers) — серверы, которые непосредственно обрабатывают запросы (например, веб-серверы Apache, Nginx, базы данных MySQL). Они могут быть как физическими, так и виртуальными машинами.
  • Виртуальный IP-адрес (VIP) — публичный IP-адрес, который клиенты используют для доступа к кластеру. Director принимает запросы на VIP и перенаправляет их на реальные серверы.

Режимы работы (Forwarding Methods)

LVS поддерживает три основных режима перенаправления трафика:

  1. VS/NAT (Virtual Server via Network Address Translation) — Director изменяет MAC-адрес и IP-адрес назначения в пакете, подменяя VIP на IP реального сервера. Ответ от сервера проходит через Director, который обратно подменяет адрес. Режим прост в настройке, но создаёт узкое место на Director при большом объёме трафика.
  2. VS/DR (Direct Routing) — Director не изменяет IP-адрес пакета, а только перенаправляет его на реальный сервер, изменяя MAC-адрес. Реальные серверы должны быть настроены на приём пакетов с VIP, но не отвечать на ARP-запросы (используется loopback-интерфейс). Ответы отправляются напрямую клиенту, минуя Director. Этот режим наиболее производителен, но требует настройки сети.
  3. VS/TUN (IP Tunneling) — Director инкапсулирует пакет в IP-туннель (IPIP) и отправляет его на реальный сервер. Сервер деинкапсулирует пакет и обрабатывает запрос, отправляя ответ напрямую клиенту. Режим подходит для географически распределённых серверов.

Алгоритмы балансировки

LVS поддерживает несколько алгоритмов распределения нагрузки:

  • Round Robin — запросы распределяются циклически по всем серверам.
  • Weighted Round Robin — серверам назначаются веса, пропорционально которым распределяется нагрузка.
  • Least Connections — запрос направляется на сервер с наименьшим числом активных соединений.
  • Weighted Least Connections — учитываются веса серверов.
  • Source Hashing — запросы от одного клиента всегда направляются на один и тот же сервер (используется для сессий).
  • Destination Hashing — запросы к одному ресурсу направляются на один сервер.
  • Shortest Expected Delay — запрос направляется на сервер с наименьшим ожидаемым временем обработки.
  • Never Queue — запрос направляется на сервер без очереди, если он свободен.

Классификация

LVS можно классифицировать по нескольким признакам:

  • По типу балансировки: сетевая балансировка (L4) — работает на транспортном уровне (TCP/UDP), не анализирует содержимое пакетов.
  • По масштабу: одноузловые (один Director) и многоузловые (кластеры Director с резервированием).
  • По режиму работы: NAT, DR, TUN.

Применение

LVS используется в следующих сценариях:

  • Веб-серверыраспределение HTTP/HTTPS-запросов между несколькими серверами (например, Apache, Nginx).
  • Базы данных — балансировка запросов к репликам баз данных (MySQL, PostgreSQL).
  • Почтовые серверы — распределение SMTP/IMAP-трафика.
  • Прокси-серверы — балансировка запросов к кэширующим прокси (Squid, Varnish).
  • Кластеры приложений — распределение нагрузки между серверами приложений (Java, Python, PHP).

Отказоустойчивость

Для обеспечения высокой доступности LVS часто используется в паре с утилитой Keepalived, которая реализует протокол VRRP (Virtual Router Redundancy Protocol). Keepalived позволяет создать резервный Director, который автоматически перехватывает VIP при отказе основного. Также Keepalived может выполнять мониторинг реальных серверов и исключать их из пула при недоступности.

Примеры конфигурации

Простейшая конфигурация VS/NAT

```

ipvsadm -A -t 192.168.1.100:80 -s rr

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.10:80 -m

ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.11:80 -m

```

Где:

Конфигурация с Keepalived

``` vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1234 } virtual_ipaddress { 192.168.1.100 } }

virtual_server 192.168.1.100 80 { delay_loop 6 lb_algo rr lb_kind NAT protocol TCP real_server 192.168.1.10 80 { weight 1 TCP_CHECK { connect_timeout 3 } } real_server 192.168.1.11 80 { weight 1 TCP_CHECK { connect_timeout 3 } } } ```

Инструменты управления

Основным инструментом управления LVS является утилита ipvsadm, которая позволяет добавлять, удалять и просматривать виртуальные серверы и реальные серверы. Также существуют графические интерфейсы, такие как Piranha (часть Red Hat Cluster Suite) и веб-интерфейсы сторонних разработчиков.

Критика и ограничения

  • Сложность настройки — особенно для режима DR, требующего специальной конфигурации сети.
  • Ограниченная масштабируемость — при использовании NAT Director может стать узким местом при большом объёме трафика.
  • Отсутствие анализа L7 — LVS работает только на транспортном уровне, не может анализировать содержимое запросов (например, HTTP-заголовки, cookies). Для L7-балансировки используются NGINX, HAProxy или Envoy.
  • Устаревание — с появлением облачных технологий и контейнеризации (Kubernetes, Docker) LVS всё чаще заменяется более современными решениями, хотя остаётся востребованным в legacy-инфраструктурах.

Интересные факты

  • LVS является одним из первых проектов с открытым исходным кодом, реализовавших балансировку нагрузки на уровне ядра.
  • Чжан Вэньсун, создатель LVS, получил премию «Лучший проект с открытым исходным кодом» на конференции LinuxWorld в 2000 году.
  • LVS используется в составе многих дистрибутивов Linux, включая Red Hat Enterprise Linux, CentOS, Ubuntu, Debian.

Источники

  • Wensong Zhang. «Linux Virtual Server: A Scalable and Highly Available Web Server». Proceedings of the 1999 USENIX Annual Technical Conference.
  • Официальная документация проекта LVS (www.linuxvirtualserver.org).
  • Документация ipvsadm (man-страницы).
  • «High Availability and Load Balancing with Linux Virtual Server» — статья на сайте IBM DeveloperWorks.
  • Документация Keepalived (www.keepalived.org).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →