Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #68, ИЮЛЬ 2006 г.

Королевская рать

 

Спецвыпуск: Хакер, номер #068, стр. 068-014-4


Распределение нагрузки происходит на основе количества запросов в единицу времени. Используя адрес отправителя и номер порта в качестве идентификатора, узлы кластера определяют узел, который будет обрабатывать тот или иной запрос. В принципе, разные запросы одного клиента могут обрабатываться разными узлами кластера, что может привести к нежелательным последствиям. Чтобы избежать этой ситуации, есть возможность сконфигурировать правила обработки запросов от клиентов, так называемые Affinity. Если значение этого параметра равно Single Affinity, то все запросы с одного IP-адреса будут обрабатываться одним и тем же узлом кластера. Это позволяет избежать проблем с протоколами, устанавливающими несколько соединений, например, PPTP, который передает управляющую информацию по TCP, а непосредственно данные - с использованием GRE. Еще один вариант распределения нагрузки - Class C Affinity, когда одним узлом кластера обслуживаются запросы группы узлов, чьи адреса принадлежат одной сети с маской 255.255.255.0.

Рассмотрим подробнее, каким образом работает механизм балансировки нагрузки. Как уже говорилось ранее, все узлы NLB-кластера используют один и тот же виртуальный IP-адрес, по которому происходят обращения клиентов. Логично предположить, что все эти машины должны быть расположены в одном сегменте. Соответственно, когда приходит первый пакет от клиента на виртуальный адрес кластера, маршрутизатор просматривает свою таблицу ARP, и, не обнаружив в ней соответствующего MAC-адреса, посылает широковещательный ARP-запрос. На всех узлах кластера используется не только виртуальный IP-адрес, но и виртуальный MAC-адрес, который они возвращают в ARP-ответе маршрутизатору. Однако в заголовках Ethernet ARP-ответа указывается совсем другой MAC-адрес отправителя, уникальный для каждого узла кластера.

Маршрутизатор заносит MAC-адрес в таблицу ARP и передает пакет коммутатору. Коммутатор пересылает пакет на все порты, поскольку в его таблице коммутации нет соответствия между номером порта и виртуальным MAC-адресом кластера. Все узлы NLB получают пакет, и тот из них, который должен обрабатывать пакет, формирует ответ, опять-таки указывая в поле «адрес отправителя» Ethernet- заголовка свой индивидуальный MAC-адрес (не только Cain умеет делать ARP-Spoofing). Таким образом, мы держим коммутатор в неведении относительно виртуального MAC-адреса кластера, заставляя передавать входящие пакеты на все порты. Так работает Unicast режим кластера NLB.

Кластер может работать в режиме Multicast, когда адаптерам узлов присваивается адрес многоадресной рассылки Ethernet, соответствующий виртуальному IP-адресу. Использование Multicast-режима предпочтительнее, поскольку он позволяет узлам взаимодействовать друг с другом без добавления дополнительного сетевого интерфейса. Правда, иногда возникают проблемы с маршрутизаторами, которые не добавляют в ARP-таблицу соответствие между Multicast-адресом Ethernet и обычным IP-адресом. В этом случае запись надо добавлять вручную.

Назад на стр. 068-014-3  Содержание  Вперед на стр. 068-014-5