我正在准备一些新的虚拟化服务器,其中一部分是将一些更高带宽的管道接入其中。最终目标是将 4 个 GigE 端口绑定到承载 802.1q 标记流量的单个中继中。我可以做到这一点,但是我遇到了一个奇怪的问题。但首先,请看一张图。
---------- ---------- 1GbE trunks
| | 10GbE | | ------------- --------
| SW1 |-------| SW2 | ------------- | VM1 |
| | | | ------------- --------
---------- ----------
| | 1GbE -----------
| 1GbE |--------| client2 |
| -----------
----------
| | 1GbE -----------
| SW3 |------| client1 |
| | -----------
----------
所有交换机均为 HP ProCurve 2910al 交换机,且未堆叠。上图中的 Client2 与 VM1 位于同一 VLAN 中。Client1 位于不同的 VLAN 中。对于 VM 计算机 (CentOS 6),iptables 和 SELinux 均已禁用。
我的问题是,当涉及中继时,与任一客户端计算机通信时都不可能进行双向网络通信。 TCPDUMP 显示它们接收到了 ping 并发送了 ECHO REPLY 数据包,但 VM 主机从未看到它们。同时,如果我尝试从客户端计算机 ping VM,它也不起作用。我无法 ping 位于同一子网上的客户端 2,这表明网络层某处出了问题。
奇怪的是,从 VM 主机我可以 ping 任何交换机上的网关 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
上面是 SW2 上的 VLAN 配置。SW1 的 VLAN 70 定义中定义了“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
SW1 的 vlan 70 节中的一个端口。
我错过了什么?
答案1
在聊天中进行了长时间的辩论之后迈克,保斯卡, 和克里斯,问题最终变成了双重的:
- CentOS 6 中的一个可能的错误是没有将模块的模块选项
bonding
作为一部分进行更改service network restart
,因此它没有跟踪我在 LACP 模式 (4) 和 roundrobin (0) 之间的更改。 - 循环模式不适合与 ProCurve 交换机一起使用。
一旦我通过以下命令强制绑定接口进入 LACP/802.1qa 模式:
ifconfig bond0 down
echo "4" > /sys/class/net/bond0/bonding/mode
ifconfig bond0 up
服务器和交换机都在通信。此时,从交换机上仅启用一个接口开始,流量开始正常工作。启用第二个、第三个,最后是第四个接口,流量都保持正常工作。
最终,LACP 模式使一切正常运转。线索是,当 Trunk 中只有一个启用的交换机端口时,循环模式可以工作。服务器在重新启动后仍能以正确的模式启动。但是,不会service network restart
导致文件中MODE="4"
的部分生效。如果该模式发生变化,它将保持启动时设置的状态(或者更可能是模块的模块加载时间)。ifcfg-bond0
/etc/sysconfig/network-scripts/
bonding
答案2
您的配置中有:
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