rhel6.4 bond的两块物理网卡流量不均

时间:2022-04-14 11:14:46
rhel6.4使用的双网卡balance-xor模式,使用一段时间后,发现2个物理网卡em1和em2要么incoming要么outgoing的90%以上主要跑在一个网卡上,
请问这是正常现象么,如何让2块物理网卡的incoming和outgoing都比较均衡,谢谢!

[root@hadoop01:/]#cat /etc/sysconfig/network-scripts/ifcfg-bond0 
 DEVICE=bond0
 ONBOOT=yes
 BOOTPROTO=none
 USERCTL=no
 IPADDR=172.16.0.78
 NETMASK=255.255.255.0
 GATEWAY=172.16.0.254
 BONDING_OPTS="mode=balance-xor miimon=100"
 [root@hadoop01:/]#cat /etc/sysconfig/network-scripts/ifcfg-em1
 DEVICE=em1
 HWADDR=EC:F4:BB:C3:4C:E0
 TYPE=Ethernet
 UUID=790958a9-a5d7-44cd-ae60-44ff1d01f1a1
 ONBOOT=yes
 NM_CONTROLLED=yes
 BOOTPROTO=none
 MASTER=bond0
 SLAVE=yes
 USERCTL=no
 [root@hadoop01:/]#cat /etc/sysconfig/network-scripts/ifcfg-em2
 DEVICE=em2
 HWADDR=EC:F4:BB:C3:4C:E1
 TYPE=Ethernet
 UUID=ad299b6e-55a2-475e-aad7-f7fd39a7bfa0
 ONBOOT=yes
 NM_CONTROLLED=yes
 BOOTPROTO=none
 MASTER=bond0
 SLAVE=yes
 USERCTL=no 

2 个解决方案

#1


来支持呢,,。。

#2


问题解决,balance-xor 异或模式下传输路线会根据异或的结果来选择,默认是拿源MAC和目的MAC做异或操作来决定走哪块网卡导致了网卡流量不均衡,通过xmit_hash_policy参数可以修改策略。
下文是摘自网上对xmit_hash_policy的解释:
“xmit_hash_policy: 这个参数的重要性我认为仅次于mode参数,mode参数定义了分发模式 ,而这个参数定义了分发策略 ,文档上说这个参数用于mode2和mode4,我觉得还可以定义更为复杂的策略呢。
1.layer2: 使用二层帧头作为计算分发出口的参数,这导致通过同一个网关的数据流将完全从一个端口发送,为了更加细化分发策略,必须使用一些三层信息,然而却增加了计算开销,天啊,一切都要权衡! 
2.layer2+3: 在1的基础上增加了三层的ip报头信息,计算量增加了,然而负载却更加均衡了,一个个主机到主机的数据流形成并且同一个流被分发到同一个端口,根据这个思想,如果要使负载更加均衡,我们在继续增加代价的前提下可以拿到4层的信息。
3.layer3+4: 这个还用多说吗?可以形成一个个端口到端口的流,负载更加均衡。然而且慢! 事情还没有结束,虽然策略上我们不想将同一个tcp流的传输处理并行化以避免re-order或者re-transmit,因为tcp本身就是一个串行协议,比如Intel的8257X系列网卡芯片都在尽量减少将一个tcp流的包分发到不同的cpu,同样,端口聚合的环境下,同一个tcp流也应该使用本policy使用同一个端口发送,但是不要忘记,tcp要经过ip,而ip是可能要分段的,分了段的ip数据报中直到其被重组(到达对端或者到达一个使用nat的设备)都再也不能将之划为某个tcp流了。ip是一个完全无连接的协议,它只关心按照本地的mtu进行分段而不管别的,这就导致很多时候我们使用layer3+4策略不会得到完全满意的结果。可是事情又不是那么严重,因为ip只是依照本地的mtu进行分段,而tcp是端到端的,它可以使用诸如mss以及mtu发现之类的机制配合滑动窗口机制最大限度减少ip分段,因此layer3+4策略,很OK!”

#1


来支持呢,,。。

#2


问题解决,balance-xor 异或模式下传输路线会根据异或的结果来选择,默认是拿源MAC和目的MAC做异或操作来决定走哪块网卡导致了网卡流量不均衡,通过xmit_hash_policy参数可以修改策略。
下文是摘自网上对xmit_hash_policy的解释:
“xmit_hash_policy: 这个参数的重要性我认为仅次于mode参数,mode参数定义了分发模式 ,而这个参数定义了分发策略 ,文档上说这个参数用于mode2和mode4,我觉得还可以定义更为复杂的策略呢。
1.layer2: 使用二层帧头作为计算分发出口的参数,这导致通过同一个网关的数据流将完全从一个端口发送,为了更加细化分发策略,必须使用一些三层信息,然而却增加了计算开销,天啊,一切都要权衡! 
2.layer2+3: 在1的基础上增加了三层的ip报头信息,计算量增加了,然而负载却更加均衡了,一个个主机到主机的数据流形成并且同一个流被分发到同一个端口,根据这个思想,如果要使负载更加均衡,我们在继续增加代价的前提下可以拿到4层的信息。
3.layer3+4: 这个还用多说吗?可以形成一个个端口到端口的流,负载更加均衡。然而且慢! 事情还没有结束,虽然策略上我们不想将同一个tcp流的传输处理并行化以避免re-order或者re-transmit,因为tcp本身就是一个串行协议,比如Intel的8257X系列网卡芯片都在尽量减少将一个tcp流的包分发到不同的cpu,同样,端口聚合的环境下,同一个tcp流也应该使用本policy使用同一个端口发送,但是不要忘记,tcp要经过ip,而ip是可能要分段的,分了段的ip数据报中直到其被重组(到达对端或者到达一个使用nat的设备)都再也不能将之划为某个tcp流了。ip是一个完全无连接的协议,它只关心按照本地的mtu进行分段而不管别的,这就导致很多时候我们使用layer3+4策略不会得到完全满意的结果。可是事情又不是那么严重,因为ip只是依照本地的mtu进行分段,而tcp是端到端的,它可以使用诸如mss以及mtu发现之类的机制配合滑动窗口机制最大限度减少ip分段,因此layer3+4策略,很OK!”