
Linux Virtual Server (LVS) — широко распространённое средство управления кластерных систем для Linux систем. Этот свободный проект начал Wensong Zhang в мае 1998. Цель проекта — построение высоконадёжного и высокоскоростного сервера с использованием кластерной технологии, которая обеспечивает хорошую масштабируемость, надёжность и работоспособность.
Linux Virtual Server используется серверами Википедии.
Обзор
править
В настоящее время основная работа в рамках проекта LVS заключается в разработке передового программного обеспечения для IP-балансировки нагрузки (IPVS), программного обеспечения для балансировки нагрузки на уровне приложения (KTCPVS) и компонентов управления кластером.
- IPVS: передовое программное обеспечение для балансировки нагрузки IP, реализованное внутри ядра Linux. Код IP Virtual Server включён в основную ветку ядра Linux версий 2.4.x и новее.[1]
- KTCPVS: реализует балансировку нагрузки на уровне приложения внутри ядра Linux; Всё ещё находится в стадии разработки.[2]
LVS может использоваться для создания масштабируемых и высокодоступных сетевых сервисов, таких как веб-службы, электронная почта, медиа и сервисы VoIP, а также для интеграции масштабируемых сетевых сервисов в крупные надёжные приложения электронной коммерции или электронного правительства. Решения на базе LVS уже развернуты во многих реальных системах по всему миру, включая Википедию.
Компоненты LVS зависят от фреймворка Linux Netfilter, и их исходный код доступен в подкаталоге net/netfilter/ipvs внутри исходного кода ядра Linux. LVS способен обрабатывать протоколы 4-го уровня (UDP, TCP), а также пассивные FTP-соединения путём проверки пакетов 7-го уровня. Проект предоставляет иерархию счётчиков в каталоге /proc.
Утилита пользовательского пространства (userland), используемая для настройки LVS, называется IP_Virtual_Server; для её запуска требуются привилегии суперпользователя.
Планировщики
правитьLVS реализует несколько планировщиков балансировки, перечисленных ниже с указанием соответствующих исходных файлов:[3]
- Циклический (Round-robin) (
ip_vs_rr.c) - Взвешенный циклический (Weighted round-robin) (
ip_vs_wrr.c) - Наименьшее количество соединений (Least-connection) (
ip_vs_lc.c) - Взвешенное наименьшее количество соединений (Weighted least-connection) (
ip_vs_wlc.c) - Наименьшее количество соединений на основе локальности (Locality-based least-connection) (
ip_vs_lblc.c) - Наименьшее количество соединений на основе локальности с репликацией (Locality-based least-connection with replication) (
ip_vs_lblcr.c) - Хеширование назначения (Destination hashing) (
ip_vs_dh.c) - Хеширование источника (Source hashing) (
ip_vs_sh.c) - Кратчайшая ожидаемая задержка (Shortest expected delay) (
ip_vs_sed.c) - Без очередей (Never queue) (
ip_vs_nq.c) - Хеширование Maglev (Maglev hashing) (
ip_vs_mh.c)
Глоссарий
правитьК часто используемым терминам относятся следующие:[4]
- LVS-директор (LVS director): балансировщик нагрузки, который принимает все входящие клиентские запросы к службам и направляет их на определённый «реальный сервер» для обработки.
- Реальные серверы (Real servers): узлы, составляющие кластер LVS, которые используются для предоставления услуг от имени кластера.
- Клиентские компьютеры (Client computers): компьютеры, запрашивающие услуги у виртуального сервера.
- VIP (Virtual IP address) — Виртуальный IP-адрес: IP-адрес, используемый директором для предоставления услуг клиентским компьютерам.
- RIP (Real IP address) — Реальный IP-адрес: IP-адрес, используемый для подключения к узлам кластера.
- DIP (Directors IP address) — IP-адрес директора: IP-адрес, используемый директором для подключения к сети реальных IP-адресов.
- CIP (Client IP address) — IP-адрес клиента: IP-адрес, назначенный клиентскому компьютеру, который тот использует в качестве исходного IP-адреса для запросов, отправляемых в кластер.
Примеры
правитьНастройка виртуального HTTP-сервера с двумя реальными серверами:
ipvsadm -A -t 192.168.0.1:80 -s rr
ipvsadm -a -t 192.168.0.1:80 -r 172.16.0.1:80 -m
ipvsadm -a -t 192.168.0.1:80 -r 172.16.0.2:80 -m
Первая команда назначает порт 80 протокола TCP на IP-адресе 192.168.0.1 виртуальному серверу. Выбранный алгоритм планирования для балансировки нагрузки — циклический (round-robin) (-s rr). Вторая и третья команды добавляют IP-адреса реальных серверов в конфигурацию LVS. Пересылаемые сетевые пакеты будут маскироваться (-m).[5]
Запрос статуса настроенной выше конфигурации LVS:
# ipvsadm -L -n
IP Virtual Server version 1.0.8 (size=65536)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.0.1:80 rr
-> 172.16.0.2:80 Masq 1 3 1
-> 172.16.0.1:80 Masq 1 4 0
Недостатки
правитьСудя по описанию, необходим сервер (балансировщик нагрузки) для распределения нагрузки между компьютерами кластера. Однако в случае выхода его из строя будет недоступен сам кластер. Для борьбы с этим негативным явлением требуется использование нескольких балансировщиков нагрузки.
См. также
правитьПримечания
править- ↑ IPVS Software - Advanced Layer-4 Switching. linuxvirtualserver.org (8 февраля 2011). Дата обращения: 12 января 2014.
- ↑ Wensong Zhang. KTCPVS Software - Application-Level Load Balancing. Linuxvirtualserver.org (8 февраля 2011). Дата обращения: 25 марта 2014.
- ↑ Job Scheduling Algorithms in Linux Virtual Server. linuxvirtualserver.org (8 февраля 2011). Дата обращения: 24 ноября 2013.
- ↑ Linux Virtual Server: Load Balance Your Networked Services. bobcares.com (2008). Дата обращения: 24 ноября 2013.
- ↑ Peter, Jeff. Understanding Virtual Server. Дата обращения: 18 июня 2023.
Ссылки
править- The Linux Virtual Server project
- Linux Virtual Server Configuration Wiki
- IBM eServer BladeCenter, Linux, and Open Source: Blueprint for e-business on demand Архивировано 11 августа 2022 года. (includes LVS as a component)