我们在这里设置了大约 30 个 Dom0,它们运行 Xen 4.0.3,Dom0 内核为 2.6.32.57 x86_64。(我们之前在 Xen 4.0.1 和内核 2.6.32.2X 中也看到过同样的行为)
有时,xen 会突然停止为新的(或迁移的)DomU 添加 vif。接口在那里,添加到正确的网桥,但网桥端口从未收到任何流量。此时所有已连接的接口都可以正常工作。这种情况同时发生在 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
r624-eth0
之后 ist的 IP无法 ping 通。tcpdump -i br-vlan2801
显示 ping 主机的 ARP 请求,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
,而是内核中更深层次的东西。由于这种情况是随机发生的,而且每隔一个月才会发生一次,所以我无法使用较新的内核对其进行交叉检查。
主要问题(据我理解)是:为什么网桥没有在刚添加/设置的端口上进入转发状态?
答案1
如果端口在学习中挂起,对我们有用的方法:
#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