У нас есть установка примерно с 30 Dom0, работающими под Xen 4.0.3 с ядром Dom0 2.6.32.57 x86_64. (Мы видели такое же поведение с Xen 4.0.1 и ядром 2.6.32.2X ранее)
Иногда внезапно xen перестает правильно добавлять vif для новых (или перенесенных) DomU. Интерфейсы есть, добавлены к правильному мосту, но порт моста никогда не получает никакого трафика. Все в это время уже подключенные интерфейсы работают без проблем. Это происходит со всеми мостами на dom0 одновременно (у нас есть 11 мостов для 11 vlan и 4 физических интерфейса на хост, stp на мостах отключен).
Если это произойдет, я вижу это в журнале при добавлении интерфейса через xen, в котором, похоже, отсутствует мост, входящий в состояние пересылки для только что добавленных интерфейсов:
[809766.761058] device r624-eth0 entered promiscuous mode
[809766.773664] br-vlan2801: port 1(r624-eth0) entering learning state
[809766.857665] device r624-eth1 entered promiscuous mode
[809766.872226] br-vlan2802: port 2(r624-eth1) entering learning state
[809768.377613] blkback: ring-ref 8, event-channel 8, protocol 2 (x86_32-abi)
[809776.810481] r624-eth0: no IPv6 routers present
[809777.870549] r624-eth1: no IPv6 routers present
IP r624-eth0
после этого не будет пинговаться. tcpdump -i br-vlan2801
показывает запросы ARP хоста pinging, tcpdump -i r624-eth0
ничего не показывает. Таким образом, пакеты достигают моста, но не пересылаются в vif (насколько я понимаю). Снос моста через ifconfig br-vlan2801 down
не помогает, но удаление и воссоздание моста решает проблему. Это приводит меня к выводу, что Xen здесь не является частью проблемы.
Если я просто перезапущу интерфейс моста через ifconfig br-vlan2801 down / up
Я вижу это:
Jul 5 16:43:52 kernel: [811367.029655] br-vlan2159: port 4(b434-eth1) entering disabled state
Jul 5 16:43:52 kernel: [811367.029893] br-vlan2159: port 3(d434-eth1) entering disabled state
Jul 5 16:43:52 kernel: [811367.030121] br-vlan2159: port 2(w434-eth1) entering disabled state
Jul 5 16:43:52 kernel: [811367.030350] br-vlan2159: port 1(eth0.2159) entering disabled state
Jul 5 16:44:15 kernel: [811389.818841] br-vlan2159: port 4(b434-eth1) entering learning state
Jul 5 16:44:15 kernel: [811389.819076] br-vlan2159: port 3(d434-eth1) entering learning state
Jul 5 16:44:15 kernel: [811389.819307] br-vlan2159: port 2(w434-eth1) entering learning state
Jul 5 16:44:15 kernel: [811389.819536] br-vlan2159: port 1(eth0.2159) entering learning state
Jul 5 16:44:25 kernel: [811399.959567] br-vlan2159: no IPv6 routers present
Если я удалю мост и заново настрою его, я увижу это, когда мост снова появится:
Jul 5 16:47:23 kernel: [811578.178683] br-vlan2159: port 4(w434-eth1) entering learning state
Jul 5 16:47:23 kernel: [811578.178917] br-vlan2159: port 3(eth0.2159) entering learning state
Jul 5 16:47:23 kernel: [811578.179146] br-vlan2159: port 2(d434-eth1) entering learning state
Jul 5 16:47:23 kernel: [811578.179374] br-vlan2159: port 1(b434-eth1) entering learning state
Jul 5 16:47:34 kernel: [811588.789566] br-vlan2159: no IPv6 routers present
Jul 5 16:47:38 kernel: [811593.178568] br-vlan2159: port 4(w434-eth1) entering forwarding state
Jul 5 16:47:38 kernel: [811593.178801] br-vlan2159: port 3(eth0.2159) entering forwarding state
Jul 5 16:47:38 kernel: [811593.179029] br-vlan2159: port 2(d434-eth1) entering forwarding state
Jul 5 16:47:38 kernel: [811593.179255] br-vlan2159: port 1(b434-eth1) entering forwarding state
После этого мост и все подключенные к нему интерфейсы работают должным образом.
Поскольку это случается со всеми мостами одновременно, я бы не стал винить brctl
инструменты для этого, но кое-что более глубоко внутри ядра. Поскольку это происходит случайно и только раз в два месяца, у меня нет возможности проверить это с более новым ядром.
Главный вопрос (насколько я понимаю): почему мост не переходит в прямое состояние на только что добавленных / настроенных портах?
Что у нас работает, если порты зависают при обучении:
#brctl showstp
if1.ext (5)
port id 8005 state learning
designated root 8000.d8d3855f7f58 path cost 100
designated bridge 8000.d8d3855f7f58 message age timer 0.00
designated port 8005 forward delay timer 17075646.29
designated cost 0 hold timer 0.00
flags
Удалите и добавьте интерфейс от моста с 0 задержкой пересылки:
#brctl delif xenbr1 if1.ext
#brctl setfd 0
#brctl addif xenbr1 if1.ext