Red Hat Cluster Suite: Настройка и управление кластером | ||
---|---|---|
Назад | Глава 9. Обзор Linux Virtual Server | Вперёд |
Одним из преимуществ LVS кластера является его возможность выполнять гибкое, на уровне IP, распределение нагрузки в наборе реальных серверов. Эта гибкость достигается благодаря использованию различных алгоритмов планировщика при настройке кластера. Распределение нагрузки в LVS превосходит менее гибкие методы, такие как Циклическое распределение DNS (Round-Robin DNS), в котором иерархическая природа DNS и кэширование на клиентских машинах может привести к нарушению баланса. Фильтрация пакетов на низком уровне, реализованная в маршрутизаторе LVS, также выигрывает по сравнению с перенаправлением запросов на уровне приложений, так как требует меньших вычислительных мощностей и допускает большую масштабируемость.
Выполняя распределение, активный маршрутизатор принимает во внимание активность реальных серверов и, возможно, расставленные администратором коэффициенты, при обслуживании запросов к службе. Назначение коэффициентов даёт отдельным компьютерам определённый приоритет. Используя такой способ распределения, можно создать группу реальных серверов, используя самое разное аппаратное и программное обеспечение, при этом активный маршрутизатор будет нагружать каждый из серверов равномерно.
Механизм распределения ресурсов в LVS кластере реализуется в наборе изменений ядра, модулях: IP Virtual Server или IPVS. Эти модули включают переключение на транспортном уровне L4 (уровень 4), разработанное для работы нескольких серверов с одним IP-адресом.
Чтобы эффективно отслеживать и направлять пакеты реальным серверам, модуль IPVS строит в ядре системы IPVS-таблицу. Эта таблица используется активным LVS-маршрутизатором для перенаправления запросов с адресов виртуального сервера реальным серверам набора и обратно. Таблица IPVS постоянно обновляется утилитой ipvsadm, которая добавляет и удаляет узлы кластера в зависимости от их доступности.
Структура таблицы IPVS зависит от выбранного администратором алгоритма распределения для данного виртуального сервера. Для получения максимальной гибкости в выборе типов служб, работающих в кластере, и распределения запросов к этим службам, Red Hat Enterprise Linux предлагает вам следующие алгоритмы распределения: О том, как назначать алгоритмы распределения, вы узнаете в разделе 12.6.1 Подраздел VIRTUAL SERVER.
Распределяет каждый запрос между реальными серверами последовательно. В этом алгоритме все реальные сервера считаются одинаковыми, их мощность и нагрузка не учитывается. Этот алгоритм похож на "циклическое распределение DNS" ("round-robin DNS") но является более эффективным, так как основан на сетевом соединении, а не на имени узла. При циклическом распределении LVS также не возникает нарушение баланса, происходящее при кэшировании DNS запросов.
Распределяет каждый запрос последовательно среди серверов в наборе, при этом больше нагружаются мощные сервера. Мощность обозначается весовым коэффициентом, который назначается администратором и может быть впоследствии изменён. Узнать о коэффициентах реальных серверов больше вы сможете в разделе 9.3.2 Весовой коэффициент сервера и распределение.
Циклическое распределение с коэффициентами является лучшим выбором, если мощность серверов в наборе значительно различается. Однако, если нагрузка изменяется значительно, более мощный сервер будет способен обслужить больше запросов, чем ему отведено.
Реальные сервера с меньшим количеством активных соединений получают больше запросов. Так как в этом алгоритме текущие соединения с реальными серверами учитываются в таблице IPVS, он представляет собой алгоритм с динамическим распределением, что делает его лучшим выбором в ситуации с резким изменением нагрузки на кластер. Он работает эффективнее, если все сервера в наборе имеют примерно одинаковую мощность. Если набор состоит из серверов с разной мощностью, лучшим оказывается алгоритм "минимум соединений с весовыми коэффициентами".
Реальные сервера с меньшим количеством активных соединений и большей мощностью получают больше запросов. Мощность обозначается весовым коэффициентом, который назначается администратором и может быть впоследствии изменен. Добавление коэффициентов делает этот алгоритм идеальным выбором в ситуации, когда набор состоит из реальных серверов различной мощности. Узнать о коэффициентах реальных серверов больше вы сможете в разделе 9.3.2 Весовой коэффициент сервера и распределение.
Больше запросов будут получать сервера с меньшим количеством активных подключений с учётом IP-адресов получателей. Этот алгоритм используется в кластерах с кэширующим прокси-сервером. Он маршрутизирует пакет, направленный по определённому IP-адресу, серверу, обслуживающему этот адрес, однако если тот перегружен, и существует другой сервер, загруженный наполовину, этот IP-адрес будет закреплён за менее загруженным сервером.
Больше запросов будут получать сервера с меньшим количеством активных подключений с учётом IP-адресов получателей. Этот алгоритм также используется в кластерах с кэширующим прокси-сервером. Он отличается от алгоритма распределения, основанном на размещении и минимуме соединений, перенаправлением запросов не одному, а подмножеству реальных серверов. Запросы перенаправляются на сервер в этом подмножестве с минимальным числом соединений. Если все узлы, обслуживающие этот IP, перегружены, алгоритм настраивает новый сервер на использование этого IP адреса, добавляя реальный сервер с минимумом соединений из всего набора реальных серверов в подмножество серверов, обслуживающих этот IP. Самый загруженный узел затем исключается из этого подмножества для предотвращения повторной репликации.
В этом распределении сервер, обрабатывающий запрос, выбирается из статической таблицы по IP-адресу получателя пакета. Этот алгоритм используется в кластерах с кэширующим прокси-сервером.
В этом распределении сервер, обрабатывающий запрос, выбирается из статической таблицы по IP-адресу отправителя пакета. Этот алгоритм разработан для LVS маршрутизаторов с несколькими межсетевыми экранами.
Администратор LVS кластера может назначить весовой коэффициент каждому узлу в наборе реальных серверов. Вес сервера - это целое число, которое задается для работы всех алгоритмов с весовыми коэффициентами (например, для алгоритма "минимум соединений с весовыми коэффициентами") и помогает LVS маршрутизаторам распределять нагрузку более равномерно.
Весовые коэффициенты используются для расчёта отношений между ними. Например, если один реальный сервер имеет вес, равный 1, и другой сервер имеет вес 5, то сервер с весом 5 получит 5 соединений, в то время как другой получит только 1. По умолчанию вес сервера равен 1.
Хотя задание веса для различных аппаратных конфигураций в наборе реальных серверов может привести к более эффективному распределению нагрузки, это может на время нарушить баланс системы при добавлении нового реального сервера в набор, если используется распределение нагрузки виртуального сервера с весовыми коэффициентами. Например, предположим, что в наборе реальных серверов находятся три сервера. Сервера A и B имеют весовой коэффициент 1 и третий, сервер C, имеет вес 2. Если сервер C по какой-то причине отключается, сервера A и B распределяют оставленную нагрузку поровну. Однако когда сервер C вернётся к нормальной работе, LVS-маршрутизатор определит, что с ним не установлено никаких соединений, и будет загружать этот сервер всеми входящими подключениями, пока его нагрузка не уравняется с нагрузкой серверов A и B.
Для предотвращения этого феномена администраторы могут сделать виртуальный сервер спокойным (quiesce) сервером — каждый раз, при включении в работу нового реального сервера, таблица соединений будет очищаться, таким образом, LVS маршрутизатор будет перенаправлять запросы, как если бы в кластер были добавлены сразу все реальные сервера.