NIC Teaming в Windows Server 2012R2
С выходом Windows Server 2012 технология NIC Teaming стала штатным средством серверной операционной системы. Долгое время решения по объединению (группировке) сетевых адаптеров для платформы Windows предоставлялись только сторонними производителями, прежде всего, поставщиками оборудования. Теперь Windows Server 2012 содержит инструменты, которые позволяют группировать сетевые адаптеры, в том числе, адаптеры разных производителей.
Что дает NIC Teaming?
Технология NIC Teaming, именуемая также как Load Balancing/Failover (LBFO), доступна во всех редакциях Windows Server 2012 и во всех режимах работы сервера (Core, MinShell, Full GUI). Объединение (тиминг) нескольких физических сетевых адаптеров в группу приводит к появлению виртуального сетевого интерфейса tNIC, который представляет группу для вышележащих уровней операционной системы.
Объединение адаптеров в группу дает два основных преимущества:
Отказоустойчивость на уровне сетевого адаптера и, соответственно, сетевого трафика. Выход из строя сетевого адаптера группы не приводит к потери сетевого соединения, сервер переключает сетевой трафик на работоспособные адаптеры группы.
Агрегирование полосы пропускания адаптеров, входящих в группу. При выполнении сетевых операций, например, копирования файлов из общих папок, система потенциально может задействовать все адаптеры группы, повышая производительность сетевого взаимодействия.
Особенности NIC Teaming в Windows Server 2012
Windows Server 2012 позволяет объединять в группу до 32 сетевых адаптеров Ethernet. Тиминг не Ethernet адаптеров (Bluetooth, Infiniband и пр.) не поддерживается. В принципе, группа может содержать только один адаптер, например, для разделения трафика по VLAN, но, очевидно, отказоустойчивость в этом случае не обеспечивается.
Драйвер сетевого адаптера, включаемого в группу, должен иметь цифровую подпись Windows Hardware Qualification and Logo (WHQL). В этом случае можно объединять в группу адаптеры разных производителей, и это будет поддерживаемая Microsoft конфигурация.
В одну группу можно включать только адаптеры с одинаковой скоростью подключения (speed connections).
Не рекомендуется использовать на одном сервере встроенный тиминг и тиминг третьих фирм. Не поддерживаются конфигурации, когда адаптер, входящий в тиминг стороннего производителя, добавляется в группу, создаваемую штатными средствами ОС, и наоборот.
Параметры NIC Teaming
При создании тиминговой группы необходимо указать несколько параметров (рассмотрены ниже), два из которых имеют принципиальное значение: режим тиминга (teaming mode) и режим балансировки трафика (load balancing mode).
Режим тиминга
Тиминговая группа может работать в двух режимах: зависимый от коммутатора (switch dependent) и не зависимый от коммутатора (switch independent).
Как следует из названия, в первом варианте (switch dependent) потребуется настройка коммутатора, к которому подключаются все адаптеры группы. Возможны две опции – статическая настройка свича (IEEE 802.3ad draft v1), либо использование протокола Link Aggregation Control Protocol (LACP, IEEE 802.1ax).
В режиме switch independent адаптеры группы могут быть подключены к разным коммутаторам. Подчеркиваю, могут быть, но это необязательно. Просто если это так, отказоустойчивость может быть обеспечена не только на уровне сетевого адаптера, но и на уровне коммутатора.
Режим балансировки
Кроме указания режима работы тиминга, необходимо еще указать режим распределения или балансировки трафика. Таких режимов по сути два: Hyper-V Port и Address Hash.
Hyper-V Port. На хосте с поднятой ролью Hyper-V и n-ым количеством виртуальных машин (ВМ) данный режим может оказаться весьма эффективным. В этом режиме порт Hyper-V Extensible Switch, к которому подключена некоторая ВМ, ставится в соответствие какому-либо сетевому адаптеру тиминговой группы. Весь исходящий трафик данной ВМ всегда передается через этот сетевой адаптер.
Address Hash. В этом режиме для сетевого пакета вычисляется хэш на основе адресов отправителя и получателя. Полученный хэш ассоциируется с каким-либо адаптером группы. Все последующие пакеты с таким же значением хэша пересылаются через этот адаптер.
Хэш может вычисляться на основе следующих значений:
MAC-адрес отправителя и получателя;
IP-адрес отправителя и получателя (2-tuple hash);
TCP-порт отправителя и получателя и IP-адрес отправителя и получателя (4-tuple hash).
Вычисление хэша на основе портов позволяет распределять трафик более равномерно. Однако для трафика отличного от TCP или UDP применяется хэш на основе IP-адреса, для не IP-трафика – хэш на основе MAC-адресов.
Таблица ниже описывает логику распределения входящего/исходящего трафика в зависимости от режима работы группы и выбранного алгоритма распределения трафика. Отталкиваясь от этой таблицы, вы сможете выбрать наиболее подходящий для вашей конфигурации вариант.
Address Hash Hyper-V Port
Switch Independent Исходящий трафик распределяется между всеми активными адаптерами группы
Входящий трафик поступает только на один интерфейс (основной адаптер группы). В случае сбоя в работе основного адаптера группы, его функции передаются другому сетевому адаптеру, и весь входящий трафик направляется к нему К исходящим пакетам присоединяется тег со ссылкой на порт коммутатора Hyper-V, через который эти пакеты были переданы. Все пакеты с одного порта направляются одному и тому же адаптеру группы
Входящий трафик, предназначенный для конкретного порта Hyper-V, поступает тому же адаптеру группы, который используется для отправки пакетов
с этого порта
Static, LACP Исходящий трафик распределяется между всеми активными адаптерами группы
Входящий трафик будет перенаправляться
в соответствии с алгоритмом распределения нагрузки, который реализован в коммутаторе К исходящим пакетам присоединяется тег со ссылкой на порт коммутатора Hyper-V, через который эти пакеты были переданы. Все пакеты с одного порта направляются одному и тому же адаптеру группы. Если группа была переведена в режим распределения портов коммутатора Hyper-V, но не была подключена к коммутатору Hyper-V, весь исходящий трафик будет отправлен одному адаптеру группы
Входящий трафик будет перенаправляться в соответствии с алгоритмом распределения нагрузки, который реализован в коммутаторе
Необходимо отметить еще один параметр. По умолчанию все адаптеры группы являются активными и задействуются для передачи трафика. Однако вы можете один из адаптеров указать в качестве Standby. Это адаптер будет использоваться только в качестве «горячей» замены, если один из активных адаптеров выходит из строя.
NIC Teaming в гостевой ОС
По разным причинам вы можете не захотеть включать тиминг на хостовой машине. Или же установленные адаптеры не могут быть объединены в тиминг штатными средствами ОС. Последнее справедливо для адаптеров с поддержкой SR-IOV, RDMA или TCP Chimney. Тем не менее, если на хосте более одного даже такого физического сетевого адаптера, можно использовать NIC Teaming внутри гостевой ОС. Представим, что на хосте две сетевые карточки. Если в некоторой ВМ два виртуальных сетевых адаптера, эти адаптеры через два виртуальных свича типа external подключены к, соответственно, двум физическим карточкам, и внутри ВМ установлена ОС Windows Server 2012, то вы можете сконфигурировать NIC Teaming внутри гостевой ОС. И такая ВМ сможет воспользоваться всеми преимуществами тиминга, и отказоустойчивостью, и повышенной пропускной способностью. Но для того, чтобы Hyper-V понимал, что при выходе из строя одного физического адаптера, трафик для этой ВМ нужно перебросить на другой физический адаптер, нужно установить чекбокс в свойствах каждого виртуального NIC, входящего в тиминг.
В PowerShell аналогичная настройка задается следующим образом:
Set-VMNetworkAdapter -VMName srv4 -AllowTeaming On
Добавлю, что в гостевой ОС можно объединить в группу только два адаптера, и для группы возможен только switch independent + address hash режим.
Настройка NIC Teaming
Настройка тиминга возможна в графическом интерфейсе Server Manager, либо в PowerShell. Начнем с Server Manager, в котором необходимо выбрать Local Server и NIC Teaming.
В разделе TEAMS в меню TASKS выбираем New Team.
Задаем имя создаваемой группы, помечаем включаемые в группу адаптеры и выбираем режим тиминга (Static, Switch Independent или LACP).
Выбираем режим балансировки трафика.
Если необходимо, указываем Standby-адаптер.
В результате в списке адаптеров появляется новый сетевой интерфейс, для которого необходимо задать требуемые сетевые настройки.
При этом в свойствах реальных адаптеров можно увидеть включенный фильтр мультиплексирования.
В PowerShell манипуляции с тимингом реализуются набором команд с суффиксом Lbfo. Например, создание группы может выглядеть так
New-NetLbfoTeam
-Name teamSRV1
-TeamMembers LAN1,LAN2
-TeamingMode SwitchIndependent
-LoadBalancingAlgorithm TransportPorts
Здесь TransportPorts означает балансировку с использованием 4-tuple hash.
Замечу, что вновь созданный сетевой интерфейс по умолчанию использует динамическую IP-адресацию. Если в скрипте нужно задать фиксированные настройки IP и DNS, то сделать это можно, например, так:
New-NetIPAddress
-InterfaceAlias teamSRV1
-IPAddress 192.168.1.163
-PrefixLength 24 -DefaultGateway 192.168.1.1
Set-DnsClientServerAddress
-InterfaceAlias teamSRV1
-ServerAddresses 192.168.1.200
Таким образом, встроенными средствами Windows Server 2012 вы можете теперь группировать сетевые адаптеры хостовой или виртуальной машины, обеспечивая отказоустойчивость сетевого трафика и агрегирование пропускной полосы адаптеров.
Увидеть технологию в действии, а также получить дополнительную информацию по этой и другим сетевым возможностям Windows Server 2012 вы можете, просмотрев бесплатные курсы на портале Microsoft Virtual Academy: