---------- ---------- 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,它也不起作用.事实上,我无法对同一子网上的client2进行ping操作,这表明某些地方的网络层存在问题.
奇怪的是,从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,40 Trk16 trunk vlan 70 name "Virtualization Subnet" tagged Trk1-Trk2,Trk8,Trk16 no ip address jumbo exit
802.1qa / LACP版本交换了主干35-36,40 Trk16 lacp的主干定义,但正如我所说,不会改变问题的表现形式.
Client2实际连接到SW1,但将其放在图表中会使格式化更复杂.在任何情况下,Interface节中唯一的东西是name指令;它被列为SW1的vlan 70节中的未标记端口.
我错过了什么?
解决方法
> CentOS 6中的一个可能的错误是没有更改绑定模块的模块选项作为服务网络重启的一部分,因此它没有跟踪我在LACP模式(4)和roundrobin(0)之间的更改.
> Round-Robin模式不喜欢使用ProCurve交换机.
一旦我通过此命令强制绑定接口进入LACP / 802.1qa模式:
ifconfig bond0 down echo "4" > /sys/class/net/bond0/bonding/mode ifconfig bond0 up
服务器和交换机都在说话.此时,从交换机上仅启用一个接口开始,流量开始正常工作.启用第二个,第三个,最后是第四个接口都可以保持流量正常工作.
最终,LACP模式是让事情发挥作用的原因.线索是当Trunk中只有一个启用的交换机端口时循环模式工作.服务器在重新启动后仍然存在,并以正确的模式启动.但是,服务网络重新启动不会导致/ etc / sysconfig / network-scripts /中ifcfg-bond0文件的MODE =“4”部分生效.如果该模式改变,它将保持在引导时设置的值(或更可能是绑定模块的模块加载时间).