Настраиваем Cisco Catalyst для работы с Microsoft Network Load Balancing

Автор cisco
15.02.2010 г.

Вступление
В данном документе рассказано, как настроить коммутатор Cisco Catalyst для работы с Microsoft Network Load Balancing (NLB).

Используемые компоненты
Информация, представленная в данном документе базируется на следующем оборудовании и ПО:
Cisco Catalyst 6500 исполняющий Cisco IOS
Cisco Catalyst 4500 исполняющий Cisco IOS
Cisco Catalyst 3550 исполняющий Cisco IOS
Cisco Catalyst 3560 исполняющий Cisco IOS
Cisco Catalyst 3750 исполняющий Cisco IOS
Сервер Microsoft Windows 2000/2003

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

Немного теории
Технология балансировки сетевой нагрузки (Network Load Balancing (NLB)) может быть использована для распределения запросов от клиентов к серверам. Для того чтобы всегда быть уверенным в том, что клиенты используют производительность на должном уровне можно применять технологию Windows NLB, которая предоставляет маштабируемость и производительность серверов, таких как к примеру IIS веб-серверы, добавляя со временем необходимое количество серверов по мере роста нагрузки от клиентов. В дополнении это также увеличивает доступность серверов, к примеру, при заражении вирусом одного из них. Конечные пользователи, при использовании технологии сетевой нагрузки не узнают, что сервер вышел из строя.

Технология балансировки сетевой нагрузки – это кластерная технология предоставляемая компанией Microsoft как часть серверной операционной системы (Windows 2000, Windows 2003 и Windows 2008 в редакциях Enterprise и Datacenter). NLB использует распределённый механизм для балансировки сетевого трафика при запросах к нескольким серверам.

NLB объединяет сервера в одну мультикаст группу и пытается использовать стандартный мультикаст IP и MAC адрес (грубо говоря рассылку). Клиентам предоставляется один виртуальный IP адрес, на который они отправляют свои запросы, а дальше технология (по пришествии запроса на виртуальный IP адрес) распределяет нагрузку между серверами.

Вы можете настроить NLB для работы по следующим механизмам:

Юникаст режим —  Мультикаст режим
Рассмотрим оба варианта:

Юникаст режим
По умолчанию NLB работает в юникаст режиме. В нём NLB подставляет вместо реального MAC адреса сервера, который участвует в кластере, кластерный MAC адрес. Когда все сервера в кластере имею один MAC адрес, то все запросы от клиентов отправляются на данный MAC адрес (что вполне естественно – вспоминаем модель OSI). Вся проблема заключается в том, что сервера в NLB кластере подключены к одному коммутатору и вы не имеете несколько портов коммутатора которые «знают» о данном MAC адресе. Другими словами коммутатор Cisco (железка) знает только об одном MAC адресе (опять же опираясь на модель OSI). Технология NLB решает данную проблему путём маскировки кластерного MAC адреса. Коммутатор анализирует исходный MAC адрес в заголовке Ethernet фрейма для того, чтобы определить какому MAC адресу принадлежит пакет. NLB в свою очередь создаёт фиктивный MAC адрес и ассоциирует данный MAC адрес со всеми серверами в кластере. NLB присваивает каждому серверу в кластере фиктивный MAC адрес основываясь на параметре host ID (идентификатор хоста) каждого из серверов. Данный адрес в последующем добавляется в заголовок Ethernet фрейма.

К примеру, MAC адрес NLB кластера это 00-bf-ac-10-00-01.

NLB в режиме юникаст берёт кластерный MAC адрес для каждого члена кластера и меняет второй октет в который закладывается идентификатор хоста каждого из серверов кластера. К примеру, server1 имеет фиктивный MAC адрес 00-01-ac-10-00-01, второй идентификатор хоста имеет фиктивный MAC адрес 00-02-ac-10-00-01. Если данные MAC адреса будут зарегистрированы на коммутаторе, то пакеты никогда не смогут попасть к свои адресатам, в отличие от тех пакетов, которые будут отправлены на порты с индивидуальными MAC адресами. Для того, чтобы фреймы были доставлены всем членам кластера коммутатор отправляет пакеты на тот порт, на котором зарегистрирован MAC адрес NLB кластера, который использует в свою очередь рассылку ARP. Когда маршрутизатор отправляет ARP запрос MAC адресу виртуального IP адреса, то он (маршрутизатор) получает ответ в заголовке которого содержится заголовок ARP с действующим MAC адресом, который отличается от фиктивного MAC адреса.

Клиенты же используют MAC адрес в ARP заголовке, а не в Ethernet заголовке. Коммутатор поступает с точностью до наоборот, он использует MAC адрес в Ethernet заголовке а не в ARP заголовке. Когда клиент посылает пакет NLB кластеру с конечным MAC адресом к примеру кластерному MAC адресу 00-bf-ac-10-00-01, коммутатор проверяет CAM таблицу на наличия в ней MAC адреса 00-bf-ac-10-00-01. В случае если не на одном порту не было зарегистрировано кластерного MAC адреса 00-bf-ac-10-00-01, фрейм будет разослан всем портам коммутатора (так кстати работают хабы (hubs). Они рассылают по всем своим портам пакеты, адресованные MAC адресу – это одно из отличий хабов от коммутаторов). Коммутатор расценивает данную рассылку как флуд. Это происходит из-за того, что слишком большое количество трафика проходит через коммутатор и остальные серверы так же подключены к данному коммутатору (они так же участвуют в обмене трафиком). Одним из вариантов решения данной проблемы может быть установка дополнительного хаба перед NLB кластером и подключения данного хаба к коммутатору. Как вы понимаете это не совсем «красивое» решение. Данное решение будет работать, потому что запрос от клиентов на определённый MAC адрес придёт на один порт коммутатора, а тот в свою очередь отправит запрос хабу, хаб же сделает рассылку по всем портам.

Режим мультикаст (Multicast)
Есть другое решение, отличное от юникаста – это мультикаст режим, который так же поддерживается в NLB кластере от Microsoft. Для включения данного режима администратору сервера нужно выбрать IGMP опцию в настройках NLB кластера Microsoft. В данном режиме члены кластера отвечают на ARP запросы отправленные на их виртуальные адреса при помощи мультикаст MAC адреса, к примеру 0300.5e11.1111 и отсылают IGMP пакеты (IGMP Membership Report). Если включен режим IGMP snooping на коммутаторе, то соответственно snoop IGMP пакеты проходят через него. В данном случае, если клиент отправляет ARP запросы для виртуального кластерного IP адреса, то кластер отвечает с мультикаст MAC адресом, 0300.5e11.1111 к примеру. Когда клиент посылает пакет для адреса 0300.5e11.1111, то коммутатор пересылает пакет тем портам, к которым подключены члены кластера. Из-за того, что трафик «размазывается» только по нужным портам мы избавляемся от ARP флуда всем хостам, которые подключены к коммутатору. Проблема состоит в том, что в мультикаст режиме виртуальный IP адрес становится не доступным для внешних клиентов (которые подключены к другому коммутатору к примеру), потому что оборудование Cisco не принимает ARP ответы для unicast IP адресов, которые содержат мультикаст MAC адреса. В связи с этим MAC таблица (портиция) с ARP не будет отображаться на коммутаторе – это можно проверить, выполнив команду arp на коммутаторе. Если в таблице MAC адресов не будут присутствовать MAC адреса, то и ARP запросы не будут обрабатываться (для кластерного адреса в нашем случае). Для решения данной проблемы мы должны вручную прописать (статикой) ARP запись для ARP таблицы. В теории это позволит оборудованию Cisco «видеть» необходимый нам MAC адрес в таблице адресов. К примеру, виртуальный IP адрес кластера будет 172.16.63.241 с MAC адресом 0300.5e11.1111. Тогда мы можем использовать следующую команду, для занесения адреса в таблицу коммутатора:

arp 172.16.63.241 0300.5e11.1111

Несмотря на статическую запись в таблице ARP входящие пакеты, которые будут иметь unicast IP адрес назначения и мультикаст MAC адрес назначения, оборудование Cisco будет продолжать игнорировать нашу статическую запись в таблице MAC адресов. Для решения данной проблемы нужно создать статическую запись MAC адреса, которая позволит маршрутизировать пакеты до кластера. Делается это следующей командой:

mac-address-table static 0300.5e11.1111 vlan 200 interface fa2/3 fa2/4

Примечание:

Для коммутаторов Cisco Catalyst серии 6000/6500 series switches вы должны использовать параметр disable-snopping.
К примеру:
mac-address-table static 0300.5e11.1111 vlan 200 interface fa2/3 fa2/4 disable-snooping
Параметр disable-snooping применим только для коммутаторов Cisco Catalyst серии 6000/6500. Без данного параметра мультикаст для кластера Microsoft у вас работать не будет.

Настройка
В данном разделе мы рассмотрим, как настраивать коммутаторы Cisco Catalyst для работы с кластером.

Информация, представленная в данном документе, опирается на следующую схему:

Настраиваем Cisco Catalyst для работы с Microsoft Network Load Balancing
Настраиваем Cisco Catalyst для работы с Microsoft Network Load Balancing

В данном документе мы используем конфигурацию, которая тестировалась на коммутаторе Catalyst 6509.

Faq-cisco.ru#show running-config

Building configuration…

! version 12.1
service timestamps debug uptime
service timestamps log uptime
no service password-encryption
!
hostname faq-cisco.ru
!
boot buffersize 126968
boot system flash slot0:c6sup11-jsv-mz.121-8a.E.bin
!
redundancy main-cpu
auto-sync standard
ip subnet-zero
!
! interface GigabitEthernet1/1
no ip address
shutdown
!
interface GigabitEthernet1/2
no ip address
shutdown
!
interface FastEthernet2/1
description «Uplink к шлюзу по умолчанию»
no ip address
switchport
switchport access vlan 100
!
interface FastEthernet2/2
no ip address
shutdown
!
interface FastEthernet2/3
description «Интерфейс для соединения с кластером Microsoft»
no ip address
switchport
switchport access vlan 200
!
interface FastEthernet2/4
description » Интерфейс для соединения с кластером Microsoft »
no ip address
switchport
switchport access vlan 200
!
interface FastEthernet2/5
no ip address shutdown
!
interface FastEthernet2/48
no ip address
shutdown
!
interface Vlan1
no ip address
shutdown
!
mac-address-table static 0300.5e11.1111 vlan 200
interface fa2/3 fa2/4 disable-snooping

! — Создаём статическую запись на коммутаторе Cisco Catalyst для виртуального мультикаст MAC адерса.

! — Порты fa2/3 и fa2/4 подключены к серверу.

!— Команда disable-snooping актуальна только на коммутаторах Cisco Catalyst серии 6000/6500.

arp 172.16.63.241 0300.5e11.1111
! — 172.16.63.241 is the Virtual IP of 2 servers
interface Vlan100
ip address 172.17.63.240 255.255.255.192
!— Vlan для коиентов
! interface Vlan200
ip address 10.1.1.250 255.255.255.0
!— Vlan для серверов
!— Важно: У серверов участников кластера Microsoft шлюзом по умолчанию должен быть коммутатор.
!— of the Microsoft Server to this address.
!
ip classless
ip route 0.0.0.0 0.0.0.0 172.16.63.193
no ip http server
!
line con 0
line vty 0 4
login
!
end

Примечание: Убедитесь в том, что ваш NLB кластер Microsoft использует мультикаст режим. Компания Cisco рекомендует не использовать MAC адрес, который будет начинаться с 01 потому что это известная проблема, которая может вызвать трудности при настройке IGMP.

Проверка
Используйте данную секцию документа для проверки работоспособности своей конфигурации

show mac-address-table— отображает таблицу MAC адресов или статические записи MAC адресов и динамические записи специфичного интерфейса или VLAN.

Faq-cisco.ru#show mac-address-table 0300.5e11.1111
Mac Address Table ——————————————-
Vlan Mac Address Type Ports —- ———— ——— ——
200 0300.5e11.1111 STATIC Fa2/3 Fa2/4
show ip arp— отображает ARP кэш.
Faq-cisco.ru#show ip arpProtocol Address Age (min) Hardware Addr Type Interface
Internet 172.16.1.1 — 0300.5e11.1111 ARPA Vlan200

Более подробную информацию о настройке коммутаторов Cisco Catalys для работы с NLB кластером Microsoft смотрите на сайте производителя по ссылке http://www.cisco.com/en/US/products/hw/switches/ps708/products_configuration_example09186a0080a07203.shtml