Балансировка нагрузки между несколькими Forms серверами

Материал из START-IP
Перейти к навигации Перейти к поиску


Балансировка нагрузки с использованием Microsoft NLB (Network Load Balancing)

Обзор балансировки

Настройка балансировочного кластера

Запускаем NLB менеджер: набрав в командной строке nlbmgr.exe либо в разделе Пуск/Администрирование

NLB manager run.png

Перед вами откроется окно

NLB manager.png

Откройте меню Cluster (Кластер) и выберите пункт New (Создать)

NLB create cluster.png

В разделе Cluster Parameters(Параметры кластера) необходимо указать:

NLB cluster parameters.png

IP address (Основной IP-адрес) – общий для всех узлов. Является виртуальным, непривязанным к определенному MAC адресу.

ВНИМАНИЕ! адреса узлов и кластерного адреса должны быть в одной подсети


Subnet mask (Маску подсети) – соответствующее указанному выше IP.
Full Internet name (Полное интернет-имя кластера) – соответствующее указанному выше IP.
По указанному IP-адресу генерируется Network address (MAC адрес кластера). Для каждого режима генерируется свой, уникальный MAC адрес. Здесь же необходимо определиться с Cluster operation mode (Режим работы кластера). Сразу объясню, в чем здесь разница:
Компонент «Балансировка нагрузки сети» может работать в двух режимах: Unicast (одноадресной) рассылки и Multicast (многоадресной) рассылки.

Режим рассылки Unicast (одноадресной)

MAC-адрес кластера назначается сетевому адаптеру компьютера, а встроенный MAC-адрес сетевого адаптера не используется.
Основные характеристики данного режима:

• Собственный уникальный MAC-адрес адаптера отключен.
• MAC-адрес кластера (автоматически генерируемый балансировкой нагрузки сети) используется вместо этого адреса.
• Адаптер становится по сути кластерным адаптером.
• И выделенный IP-адрес, и IP-адрес кластера разрешаются в кластерный MAC-адрес.
• Поскольку все узлы кластера разделяют один MAC-адрес, а оригинальный MAC-адрес не используется, обычная сетевая связь между этим узлом и другими узлами кластера невозможна. Однако этот компьютер по-прежнему может обрабатывать трафик, приходящий из-за пределов подсети, в которой расположен кластер, а также из подсети, если датаграмма IP не содержит MAC-адреса, используемого кластерным адаптером. Эту проблему можно обойти используя несколько сетевых адаптеров: один для кластерного трафика, второй для взаимодействия узлов между собой.

Также используя NLB Manager для настройки кластера в этом режиме, необходимо этот менеджер запускать на не принадлежащем кластеру сервере.

Режим рассылки Multicast (многоадресной)

MAC-адрес кластера назначается сетевому адаптеру компьютера, но встроенный адрес сетевого адаптера сохраняется и используются оба адреса: первый — для трафика клиент-кластер, а второй — для сетевого трафика, специфичного для компьютера.

Основные характеристики данного режима:

• Балансировка нагрузки сети автоматически генерирует MAC-адрес кластера для сетевого адаптера.
• Собственный уникальный MAC-адрес адаптера сохраняется.
• IP-адрес кластера разрешается в MAC-адрес кластера.
• Выделенный IP-адрес разрешается в оригинальный MAC-адрес.

При использовании данного режима возможны затруднения в переводе основного IP-адреса в групповой аппаратный адрес (MAC) с использованием протокола ARP.

Решение проблем с сетевым оборудованием Cisco

  В случае проблем с сетевым оборудованием Cisco или др. необходимо прописать 
  для адреса X.X.X.X статический MAC адрес в ARP таблицу маршрутизатора

В панели Port Rules вносим правила для порта 8080

NLB 8080 port rules.png

По умолчанию стоит общее для всех правило, по которому обрабатываются все порты (0-65535) как для TCP, так и для UDP, равномерно распределяя нагрузку между всеми узлами NLB-кластера и указывая вариант Single (Один) для родственности (affinity), чтобы все пакеты, поступившие с одного и того же IP-адреса, обрабатывались одним узлом NLB-кластера.

NLB add edit port rule.png

Cluster IP Address (IP адрес кластера). В этой секции задается, к какому адресу будет применено данное правило. Если отметить all(все), то данное правило будет действовать для всех IP адресов.

Port Range (Диапазон портов). В этой секции задается диапазон портов, который будет охватываться данным правилом для портов. Можно указывать любые номера в диапазоне от 0 до 65535 (и это также диапазон по умолчанию). Чтобы задать один порт, введите одинаковые значения для начального и конечного номеров.

Protocols (Протоколы). Выберите конкретный протокол TCP/IP, который будет охватываться данным правилом для портов (вариант TCP, UDP или Both [Оба]). Это правило будет влиять на сетевой трафик только указанного здесь протокола. Весь остальной трафик будет обрабатываться с использованием режима фильтрации по умолчанию.

Filtering Mode (Режим фильтрации):

Multiple Hosts (Несколько узлов), сетевой трафик для этого правила будет обрабатываться несколькими узлами данного кластера. Распределяя нагрузку между несколькими узлами, вы получаете свойства отказоустойчивости и масштабирования производительности. Режим фильтрации позволяет также выбрать равномерную нагрузку между узлами или задать определенный процент нагрузки для конкретного узла.

Single Host (Один узел), сетевой трафик для данного правила должен обрабатываться каким-либо одним узлом в кластере согласно заданному для него приоритету обработки (поле Handling priority). Этот приоритет используется вместо приоритета (идентификатора узла) для трафика через данный порт.

Disabled (Отключен), сетевой трафик для этого правила должен быть блокирован. Это удобный способ создания брандмауэра, препятствующего сетевому доступу к заданному диапазону портов.

Affinity (Родственность). Вариант "родственности" с клиентами определяет, каким образом NLB будет назначать входящий трафик узлам кластера. Основное назначение этого параметра - поддержка приложений, для которых требуется, чтобы все запросы с одного и того же клиентского компьютера обрабатывались одним сервером NLB (то есть приложений, которые поддерживают определенный вид информации о состоянии клиента на этом сервере). Для алгоритма распределения используются части исходного IP-адреса в пакете, чтобы определить, какой сервер в кластере будет обрабатывать этот пакет.

Варианты родственности Single (Один) или Class C (Класса C) может вызвать неравномерное распределение запросов по узлам кластера:

None (Нет), служба NLB не обязательно должна направлять несколько запросов с одного клиентского компьютера на один узел кластера. В результате алгоритм хеширования NLB будет использовать все 4 байта IP-адреса отправителя в сочетании с исходным портом TCP или UDP при выборе узла NLB для обработки пакета. TCP/UDP изменяет исходный порт почти с каждым запросом, поэтому выбор варианта None дает всем узлам кластера возможность обработки пакетов от любого заданного клиентского компьютера.

Single (вариант по умолчанию), запросы с одного исходного IP-адреса должны направляться на один узел кластера. При выборе варианта родственности Single алгоритм хеширования NLB игнорирует исходный порт TCP или UDP. Родственность оказывает негативное влияние на производительность, но в определенных обстоятельствах это перевешивается эффективностью для клиента, направляющего несколько запросов. Например, если каждый запрос от клиента связывается с cookie-файлом, то более эффективно подсоединять этого клиента к одному узлу (на самом деле это необходимо). Для защищенных приложений HTTP (HTTPS через TCP Port 443) требуется вариант родственности Single.
(Для нашего случая мы выбираем Single)

Class C используется для группы, а не для одного клиентского IP-адреса, несколько запросов из одного диапазона адресов класса C TCP/IP направляются на один узел. При этой конфигурации клиенты, использующие несколько прокси-серверов, интерпретируются аналогично отдельным клиентским IP-адресам в варианте родственности Single. Если клиент, выполняющий доступ к кластеру через несколько прокси-серверов, направляет несколько запросов, эти запрос поступают как будто с различных компьютеров. Если все эти прокси-серверы находятся в одном диапазоне адресов класса C (обычно это разумное предположение), то выбор варианта Class C означает, что сеансы этого клиента будут обрабатываться аналогично варианту родственности Single.

NLB manager port rule filter.png Нижеследующие параметры настраиваются в свойствах каждого узла
Load Weight (Процент нагрузки). В режиме фильтрации Multiple Hosts вы можете использовать параметр Load Weight, чтобы задать процент трафика, который должен обрабатываться узлом по соответствующему правилу для портов. Чтобы на данный узел не поступал сетевой трафик, задайте значение 0. Чтобы задать какой-либо процент, используйте значение от 1 до 100.

При конфигурировании каждого узла сумма отдельных значений параметра Load Weight не обязательно должна составлять 100 процентов. Реальная часть трафика рассчитывается динамически как частное от деления процента, заданного для узла, на суммарный процент для всего кластера. Требование суммы в 100 процентов не имеет смысла, поскольку узлы время от времени включаются в кластер или выбывают из него.

Equal (Равномерное распределение нагрузки). Используйте вариант Equal, чтобы задать, что узел участвует в равномерно сбалансированном трафике в режиме фильтрации с несколькими узлами (Multiple hosts) по соответствующему правилу для портов.
Handling Priority (Приоритет обработки) используется в режиме фильтрации Single, и оно указывает уровень приоритета узла для трафика по данному правилу. Узел с наиболее высоким приоритетом обработки для определенного правила будет обрабатывать весь трафик для этого правила. Введите значение от 1 до X, где X - это количество узлов. Каждый узел должен иметь уникальное значение этого параметра. Значение 1 соответствует наиболее высокому приоритету.

Результат

NLB 8080 port rules.png


Присоединение первого узла к кластеру

Connect служит для поиска элементов (узлов) кластера. Необходимо указать IP адрес сервера и выбрать сетевой адаптер

NLB connect host.png

В панели Host Parameters необходимо указать параметры узла – приоритет и состояние инициализации

NLB host paramerers.png

Priority [Unique Host Identifier] (Приоритет [Уникальный идентификатор узла]). Это приоритет узла для обработки сетевого трафика по умолчанию для портов TCP и UDP, которые не заданы конкретно во вкладке Port Rules. Приоритет - это уникальное значение, которое используется для слияния в кластере. Это значение может изменяться в диапазоне от 1 до 32. Наиболее высокому приоритету соответствует значение 1. Каждый узел в кластере должен иметь уникальный приоритет (идентификатор). При отказе какого-либо узла в кластере процесс слияния должен получать информацию, какие из оставшихся узлов могут обрабатывать трафик отключившегося узла. Выбирается узел с наиболее высоким приоритетом, и если происходит отказ этого узла, то выбирается узел с наиболее высоким приоритетом среди оставшихся узлов. Такая система обеспечивает определенную отказоустойчивость для NLB-кластера.

Dedicated IP Address (Выделенный IP-адрес). Выделенный IP-адрес это уникальный IP-адрес узла, который используется для сетевого кластера, не связанного с самим кластером.

Initial Host State (Начальное состояние узла). Параметр Default State (Состояние по умолчанию) определяет, следует ли запускать NLB, когда происходит загрузка операционной системы на данном узле (вариант Started). Иначе узлы могут присоединяться к кластеру и выходить из него с помощью команд управления NLB, запускаемых из командной строки. Это полезно использовать, если имеются другие службы, которые требуется загружать на данном узле (обычно вручную), прежде чем присоединять узел к кластеру.

Retain Suspended State after Computer Starts (Оставаться в состоянии паузы после загрузки компьютера). В состоянии паузы узел или кластер не выполняет никакой обработки приложений и отвечает только на команды Resume (Возобновить) и Query (Запрос). Если установить этот флаг, то кластер останется в состоянии паузы после перезагрузки сервера.

В данном окне все поля заполнятся автоматически, и в нашем случае ничего собственно менять не нужно.

После нажатия Finish диалог закроется и мастера балансировка нагрузки сети приступит к настройке узла. В этот момент он начнет вносить изменений в сетевое соединение, поэтому примерно на минуту связь с сервером оборвется.

После этого появится основное окно мастера где будет виден добавленный узел и его состояние:

NLB first node.png

Добавление еще одного узла к кластеру

Добавим еще один узел. Кликyем правой кнопкой мышки по кластеру, и выберем Add Hjst To Cluster (Добавить узел в кластер)

NLB add new host.png

После этого выполнить настройки для второго узла аналогично первому, указав IP адрес сервера (192.168.1.10) и выбрав сетевой адаптер этого сервера. В поле Идентификатор необходимо указать 2 (он таким будет по умолчанию).

После того, как мастер балансировки нагрузки сети настроит второй узел, можно будет видеть следующее

NLB adding node.png

Информация о втором узле обновляется.

NLB two nodes.png

Все узлы находятся в рабочем состоянии.

В случае внесения изменения либо ввода нового узла или аварийной остановки одного из узлов, кластер будет недоступен в течении 10 секунд. Это время требуется для перенастройки кластера и перераспределения нагрузки.

Управление кластером

Кроме оперативной сборки кластера NLB Manager позволяет также управлять кластером и отдельными узлами. Щелкнув правой кнопкой мыши на имени кластера или на отдельном хосте кластера, вы можете выбрать вариант Control Host (Управление хостом) или Control Ports (Управление портами).

NLB manage cluster.png

В меню Control Hosts можно выбрать для хоста или для всех хостов кластера команду Start, Stop, Drainstop, Suspend или Resume.

Команда Stop остановит узел\кластер. В случае узла, произойдет перераспределение нагрузки между узлами без участия остановленного узла. Клиенты будут переброшены на другой узел.
Команда Start возобновит работу узла\кластера.
Команда Drainstop не прерывает активные подключения. В таком состоянии узел продолжать обслуживание активных подключений, но любой новый трафик на себя более не берёт.
Suspend и Resume приостановит обработку трафика и возобновит соответственно.

В диалоговом окне Control Ports вы можете выбрать команду Enable, Disable или Drain для отдельного правила в рамках одного хоста или всех хостов кластера.