我有 2 个运行 centos 6.5 的 Linux 机箱,每个机箱都有 2 个绑定在一起的接口,并连接到带有 lacp 配置端口的 Cisco 2960-S 交换机。
交换机上的配置
port-channel load-balance src-dst-mac
!
interface Port-channel1
switchport access vlan 100
switchport mode access
!
interface Port-channel2
switchport access vlan 100
switchport mode access
!
interface FastEthernet0
no ip address
!
interface GigabitEthernet0/1
switchport access vlan 100
switchport mode access
speed 1000
duplex full
spanning-tree portfast
channel-protocol lacp
channel-group 1 mode active
!
interface GigabitEthernet0/2
switchport access vlan 100
switchport mode access
speed 1000
duplex full
spanning-tree portfast
channel-protocol lacp
channel-group 1 mode active
!
interface GigabitEthernet0/3
switchport access vlan 100
switchport mode access
speed 1000
duplex full
spanning-tree portfast
channel-protocol lacp
channel-group 2 mode active
!
interface GigabitEthernet0/4
switchport access vlan 100
switchport mode access
speed 1000
duplex full
spanning-tree portfast
channel-protocol lacp
channel-group 2 mode active
!
在两个 Linux 系统上,我都加载了内核绑定模块,配置如下
alias bond0 bonding
options bond0 miimon=100 mode=4 lacp_rate=1
现在的问题是,我将许多文件从一台服务器传输到另一台服务器,监控流量图显示速度不超过绑定接口的 1Gb/s 速度bond0
。
配置有问题吗?速度不应该加倍到2Gb/s吗?
答案1
LACP 不会将数据包拆分到单个流/线程的多个接口上。例如,单个 TCP 流将始终在同一个 NIC 上发送/接收数据包。
请参阅以下帖子以供参考:
希望这可以帮助。
答案2
链路聚合的工作方式是使用散列算法来决定哪些数据包应该从哪个端口出去。
来自相同源 MAC 地址到相同目标 MAC 地址的数据包将始终从相同端口出去。
一些链路聚合实现支持使用第 3 层(IP 地址)甚至第 4 层(TCP/UDP 端口号)作为哈希的一部分,但这并不常见。
这就是为什么从一台服务器传输文件到另一台服务器时只能获得 1 gbit/秒的速度。
如果操作系统和交换机都支持第 3 层,则可以使用多个 IP 地址来提高速度。但是,由于哈希算法的工作方式,两个流最终流出同一链接的可能性为 50%。
答案3
我对网络绑定的理解是,您不能超过一个连接中成员接口的链接速度。建立连接后,它将固定在绑定中的一个接口上。
但是,现在连接被拆分到两个接口上。如果您有两个从服务器 A 到服务器 B 的连接,那么这些连接不应该在带宽方面互相阻碍,因为它们将通过不同的接口传输。使用多个连接的总带宽应为 2Gb/s,但每个连接的最大带宽将被限制为 1Gb/s。
答案4
Linux 使用的哈希算法也值得考虑。一些版本的 Bond 驱动程序使用非常简单的哈希算法,例如 Linux 3.6.5 上的 l2 哈希只是源 MAC 和目标 MAC 的最后一个字节的异或,这在很多情况下会导致流量不平衡。将哈希算法更改为 l2+l3 将大有帮助。