Я занимаюсь подготовкой нескольких новых серверов виртуализации, и часть этого заключается в том, чтобы подключить к ним несколько каналов с более высокой пропускной способностью. Конечная цель - связать 4 порта GigE в одну магистраль, несущую тегированный трафик 802.1q. Я могу зайти так далеко, но столкнулся со странной проблемой. Но сначала диаграмма.
---------- ---------- 1GbE trunks
| | 10GbE | | ------------- --------
| SW1 |-------| SW2 | ------------- | VM1 |
| | | | ------------- --------
---------- ----------
| | 1GbE -----------
| 1GbE |--------| client2 |
| -----------
----------
| | 1GbE -----------
| SW3 |------| client1 |
| | -----------
----------
Все коммутаторы являются коммутаторами HP ProCurve 2910al и не объединены в стек. Client2 на приведенной выше диаграмме находится в той же VLAN, что и VM1. Client1 находится в другой VLAN. Для виртуальной машины (CentOS 6) отключены iptables и SELinux.
Моя проблема в том, что при использовании транкинга двусторонний сетевой трафик невозможен при разговоре с любой клиентской машиной. TCPDUMP показывает, что они получают эхо-запросы и отправляются пакеты ECHO REPLY, но хост виртуальной машины никогда их не видит. В то же время, если я попытаюсь пропинговать виртуальную машину с клиентской машины, это тоже не сработает. Тот факт, что я не могу проверить связь с клиентом 2, который находится в той же подсети, предполагает, что где-то на сетевом уровне что-то не так.
Как ни странно, с хоста виртуальной машины я могу пропинговать IP-адреса шлюза на любом из коммутаторов. Если я использую один интерфейс, все работает нормально как с тегами VLAN, так и без них. Если я просто привяжу один интерфейс и включу теги VLAN на этом интерфейсе, я смогу пойти куда угодно. Создайте ствол, и я ограничусь коммутационной фабрикой.
Тип ствола не имеет значения. Прямо сейчас они настроены на транки в режиме 0 (balance-rr), хотя использование LACP / 802.1qa ведет себя точно так же.
vlan 70
name "Virtualization Subnet"
untagged 35,36,38,40
tagged Trk1-Trk2,Trk5,Trk8
no ip address
jumbo
exit
Это конфигурация VLAN на SW2 наверху. В определении VLAN 70 SW1 указан "IP-адрес". Приведенный выше фрагмент находится в полностью незагруженном режиме. Когда я в транк:
trunk 35-36,38,40 Trk16 trunk
vlan 70
name "Virtualization Subnet"
tagged Trk1-Trk2,Trk5,Trk8,Trk16
no ip address
jumbo
exit
Версия 802.1qa / LACP меняет определение магистрали для trunk 35-36,38,40 Trk16 lacp
но, как я уже сказал, это не меняет представления проблемы.
Client2 фактически подключен к SW1, но размещение его на диаграмме усложнило бы форматирование. В любом случае единственное, что есть в разделе «Интерфейс», - это name
директива; он указан как untagged
порт в строфе vlan 70 для SW1.
Что мне не хватает?
После долгих дебатов в чате с участием MikeyB, Пауска, и ChrisS, проблема оказалась двоякой:
bonding
модуль как часть service network restart
, поэтому он не отслеживал мои изменения между режимом LACP (4) и roundrobin (0).Однажды я принудительно переключил связанный интерфейс в режим LACP / 802.1qa с помощью этой команды:
ifconfig bond0 down
echo "4" > /sys/class/net/bond0/bonding/mode
ifconfig bond0 up
И сервер, и коммутатор разговаривали. В этот момент, когда на коммутаторе был включен только один интерфейс, трафик начал работать нормально. При включении второго, третьего и, наконец, четвертого интерфейсов трафик продолжал работать.
В конечном счете, именно режим LACP заставил все работать. Подсказка заключалась в том, что циклический режим работал, когда в магистрали был только один активированный порт коммутатора. Сервер переживает перезагрузку и переходит в правильный режим. Однако service network restart
не вызывает MODE="4"
часть ifcfg-bond0
файл в /etc/sysconfig/network-scripts/
вступить в силу. Если этот режим изменится, он останется тем, что был установлен при загрузке (или, что более вероятно, время загрузки модуля bonding
модуль).
У вас в конфиге:
trunk 35-36,38,40 Trk16 trunk
vlan 70
name "Virtualization Subnet"
tagged Trk1-Trk2,Trk5,Trk8,Trk16
no ip address
jumbo
exit
Не должно быть:
untagged Trk16
tagged Trk1-Trk2,Trk5,Trk8