9.3. Обзор распределения нагрузки в LVS

Одним из преимуществ LVS кластера является его возможность выполнять гибкое, на уровне IP, распределение нагрузки в наборе реальных серверов. Эта гибкость достигается благодаря использованию различных алгоритмов планировщика при настройке кластера. Распределение нагрузки в LVS превосходит менее гибкие методы, такие как Циклическое распределение DNS (Round-Robin DNS), в котором иерархическая природа DNS и кэширование на клиентских машинах может привести к нарушению баланса. Фильтрация пакетов на низком уровне, реализованная в маршрутизаторе LVS, также выигрывает по сравнению с перенаправлением запросов на уровне приложений, так как требует меньших вычислительных мощностей и допускает большую масштабируемость.

Выполняя распределение, активный маршрутизатор принимает во внимание активность реальных серверов и, возможно, расставленные администратором коэффициенты, при обслуживании запросов к службе. Назначение коэффициентов даёт отдельным компьютерам определённый приоритет. Используя такой способ распределения, можно создать группу реальных серверов, используя самое разное аппаратное и программное обеспечение, при этом активный маршрутизатор будет нагружать каждый из серверов равномерно.

Механизм распределения ресурсов в LVS кластере реализуется в наборе изменений ядра, модулях: IP Virtual Server или IPVS. Эти модули включают переключение на транспортном уровне L4 (уровень 4), разработанное для работы нескольких серверов с одним IP-адресом.

Чтобы эффективно отслеживать и направлять пакеты реальным серверам, модуль IPVS строит в ядре системы IPVS-таблицу. Эта таблица используется активным LVS-маршрутизатором для перенаправления запросов с адресов виртуального сервера реальным серверам набора и обратно. Таблица IPVS постоянно обновляется утилитой ipvsadm, которая добавляет и удаляет узлы кластера в зависимости от их доступности.

9.3.1. Алгоритмы распределения

Структура таблицы IPVS зависит от выбранного администратором алгоритма распределения для данного виртуального сервера. Для получения максимальной гибкости в выборе типов служб, работающих в кластере, и распределения запросов к этим службам, Red Hat Enterprise Linux предлагает вам следующие алгоритмы распределения: О том, как назначать алгоритмы распределения, вы узнаете в разделе 12.6.1 Подраздел VIRTUAL SERVER.

Циклическое распределение (Round-Robin Scheduling)

Распределяет каждый запрос между реальными серверами последовательно. В этом алгоритме все реальные сервера считаются одинаковыми, их мощность и нагрузка не учитывается. Этот алгоритм похож на "циклическое распределение DNS" ("round-robin DNS") но является более эффективным, так как основан на сетевом соединении, а не на имени узла. При циклическом распределении LVS также не возникает нарушение баланса, происходящее при кэшировании DNS запросов.

Циклическое распределение с весовыми коэффициентами (Weighted Round-Robin Scheduling)

Распределяет каждый запрос последовательно среди серверов в наборе, при этом больше нагружаются мощные сервера. Мощность обозначается весовым коэффициентом, который назначается администратором и может быть впоследствии изменён. Узнать о коэффициентах реальных серверов больше вы сможете в разделе 9.3.2 Весовой коэффициент сервера и распределение.

Циклическое распределение с коэффициентами является лучшим выбором, если мощность серверов в наборе значительно различается. Однако, если нагрузка изменяется значительно, более мощный сервер будет способен обслужить больше запросов, чем ему отведено.

Минимум соединений (Least-Connection)

Реальные сервера с меньшим количеством активных соединений получают больше запросов. Так как в этом алгоритме текущие соединения с реальными серверами учитываются в таблице IPVS, он представляет собой алгоритм с динамическим распределением, что делает его лучшим выбором в ситуации с резким изменением нагрузки на кластер. Он работает эффективнее, если все сервера в наборе имеют примерно одинаковую мощность. Если набор состоит из серверов с разной мощностью, лучшим оказывается алгоритм "минимум соединений с весовыми коэффициентами".

Минимум соединений с весовыми коэффициентами (Weighted Least-Connections) (алгоритм по умолчанию)

Реальные сервера с меньшим количеством активных соединений и большей мощностью получают больше запросов. Мощность обозначается весовым коэффициентом, который назначается администратором и может быть впоследствии изменен. Добавление коэффициентов делает этот алгоритм идеальным выбором в ситуации, когда набор состоит из реальных серверов различной мощности. Узнать о коэффициентах реальных серверов больше вы сможете в разделе 9.3.2 Весовой коэффициент сервера и распределение.

Распределение, основанное на размещении и минимуме соединений (Locality-Based Least-Connection Scheduling)

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

Распределение, основанное на размещении и минимуме соединений с репликацией (Locality-Based Least-Connection Scheduling with Replication Scheduling)

Больше запросов будут получать сервера с меньшим количеством активных подключений с учётом IP-адресов получателей. Этот алгоритм также используется в кластерах с кэширующим прокси-сервером. Он отличается от алгоритма распределения, основанном на размещении и минимуме соединений, перенаправлением запросов не одному, а подмножеству реальных серверов. Запросы перенаправляются на сервер в этом подмножестве с минимальным числом соединений. Если все узлы, обслуживающие этот IP, перегружены, алгоритм настраивает новый сервер на использование этого IP адреса, добавляя реальный сервер с минимумом соединений из всего набора реальных серверов в подмножество серверов, обслуживающих этот IP. Самый загруженный узел затем исключается из этого подмножества для предотвращения повторной репликации.

Распределение по получателю (Destination Hash Scheduling)

В этом распределении сервер, обрабатывающий запрос, выбирается из статической таблицы по IP-адресу получателя пакета. Этот алгоритм используется в кластерах с кэширующим прокси-сервером.

Распределение по источнику (Source Hash Scheduling)

В этом распределении сервер, обрабатывающий запрос, выбирается из статической таблицы по IP-адресу отправителя пакета. Этот алгоритм разработан для LVS маршрутизаторов с несколькими межсетевыми экранами.

9.3.2. Весовой коэффициент сервера и распределение

Администратор LVS кластера может назначить весовой коэффициент каждому узлу в наборе реальных серверов. Вес сервера - это целое число, которое задается для работы всех алгоритмов с весовыми коэффициентами (например, для алгоритма "минимум соединений с весовыми коэффициентами") и помогает LVS маршрутизаторам распределять нагрузку более равномерно.

Весовые коэффициенты используются для расчёта отношений между ними. Например, если один реальный сервер имеет вес, равный 1, и другой сервер имеет вес 5, то сервер с весом 5 получит 5 соединений, в то время как другой получит только 1. По умолчанию вес сервера равен 1.

Хотя задание веса для различных аппаратных конфигураций в наборе реальных серверов может привести к более эффективному распределению нагрузки, это может на время нарушить баланс системы при добавлении нового реального сервера в набор, если используется распределение нагрузки виртуального сервера с весовыми коэффициентами. Например, предположим, что в наборе реальных серверов находятся три сервера. Сервера A и B имеют весовой коэффициент 1 и третий, сервер C, имеет вес 2. Если сервер C по какой-то причине отключается, сервера A и B распределяют оставленную нагрузку поровну. Однако когда сервер C вернётся к нормальной работе, LVS-маршрутизатор определит, что с ним не установлено никаких соединений, и будет загружать этот сервер всеми входящими подключениями, пока его нагрузка не уравняется с нагрузкой серверов A и B.

Для предотвращения этого феномена администраторы могут сделать виртуальный сервер спокойным (quiesce) сервером — каждый раз, при включении в работу нового реального сервера, таблица соединений будет очищаться, таким образом, LVS маршрутизатор будет перенаправлять запросы, как если бы в кластер были добавлены сразу все реальные сервера.