Назад | Перейти на главную страницу

Добавление видео в бридж под Xen внезапно перестает работать

У нас есть установка примерно с 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