华三二层链路聚合,华三链路聚合动态与静态区别
你最近遇到的奇怪情况,可能会让你对链路聚合有更深的理解,有所启发。
问题
需要从多个摄像头采集图像,传输到电脑,总流量超过千兆,但不能超过4千兆。考虑到千兆网卡和交换机(在千兆上行端口上)仍然很贵,我们决定使用链路聚合。
使用4gb将计算机连接到交换机,并使用4gb网卡将计算机聚合在一起。
图1:摄像头和交换机(右端四个端口聚合连接电脑))))))))))。
第一次测试
我的目标是将10个摄像头的数据同时发送到电脑,但第一步是用4个摄像头进行测试。四个摄像头支持四个网络端口,预期效果与分成四个子网相同。这意味着每个摄像头都可以运行在千兆左右。
为什么不用四个子网呢?3354的聚合方案结构简单,更加灵活,可以应用于N个摄像头,实现动态负载均衡。有一个4千兆的链路相当于一台电脑和一个交换机,几个摄像头就可以把这个带宽分割开来。
的缺点是它可能会增加CPU负载。但这取决于聚合的模式。由于计算机主要接收数据,交换机传输来自摄像机的数据,因此交换机也需要支持聚合。
的开关支持802.3ad,所以电脑端也需要设置为802.3ad模式。以下是Ubuntu下的配置文件:
auto enp 5s 0f 0 iface enp 5s 0f 0 inetmanualbond-主焊接0 auto enp 5s 0f 1 iface enp 5s 0f 1 inetmanualbond-主焊接0 auto enp 5s 0f 2 iface enp netmanual b bond-主焊接0 auto bond 0 iface bond 0 inetstaticaddress 10 . 8 . 5 . 1 net mask 255 . 255 . 255s 0f 1 enp 5s 0f 2e NP 5s 0f 3 bond-3 bond
经过实际测试,网卡绑定驱动的CPU份额并不高(可以在/proc/interrupts中找到)。
您可以在交换机管理界面中查看数据流量。
图2:4-4流量平衡
照片中可以看到,相机连接的四个网口和电脑连接的四个网口的流量是相等且均匀的。这个效果完全符合预期。
进一步测试
于是我开始增加摄像头(当然同时也降低了摄像头的流量,使总速度在4千兆以下),但是我发现四个网格的流量不均匀!
所以摄像头数量减少,放回四个摄像头的时候。3354—奇怪的事情发生了,四个摄像头都不正常!这意味着流量只通过三个网格。当然说明一个网格超过了流量,丢帧了。
由于不断减少摄像头的数量,三个摄像头也插在两个互联网端口上。图(我还换了开关,测试了一下。
图3:三比二的不平衡流量
经过反复实验,发现了一些规律。
比如A、B、C三个摄像头正常发送数据(拆分到三个端口);
加入摄像头D后异常,A和D接在交换机的同一个端口。
这时候即使只连接了A和D,两个人也会通过同一个端口,这样不好。
有什么问题?
遇到这样的问题,首先想到的是参数配置是否有误。
首先,从聚合模式来说,有几种流量均衡模式,如balance-rr、balance-xor、balance-tlb等。但是,这些都是在电脑端发送数据的情况。使用不同的算法来选择从哪个网络端口发送数据。我的情况是从交换机发送数据。选择交换机发送数据的端口。这些模式不用于控制开关。
当交换机上启用聚合时,将使用交换机支持的802.3ad模式。在这种情况下,电脑也需要相应地设置为802.3ad模式,所以模式的选择并不多。
802.3ad模式下还有哪些参数可以设置?
一个相关的参数是传输散列策略。
在802.3ad模式下,可以选择层2和层2 3。检查文档描述:
xmit _ hash _ policy selectsthetransmithaspolicytoos forslaveselectioninbalance-xor、802.3ad和lbmodes .可能的值为:layer 2 usesxoroffhardware MAC addressandpackettypeeronthesamslave .此算法是802.3 aris
这个文档来自LinuxTheNetBondingDriver Howto。因为它是标准的,所以可以认为交换机也使用相同的算法。
这种算法意味着ha是通过源地址、目的地址和数据包类型获得的。
Sh值,然后除以4(聚合端口/网络端口的数量)。根据余数,决定数据发送到哪个端口。
首先说明了来自同一个摄像头的数据(这里的应用协议是固定的,所以包类型ID是固定的)必须发送到同一个端口,而不是像Round-robin那样的策略,使用不同的端口依次发送。
第二点表明,根据散列丢弃,端口由端口总数的剩余部分选择。另一个策略,layer2 3,我没贴。只是哈希算法不一样。最后,也要看余数。
所以,这就是问题所在。
我有多幸运?
这是一个数学问题:随机生成4个0到3之间的整数。它们完全不同的概率有多大?
我有点忘记密码了。好像应该是3/4 * 2/4 * 1/4=3/32=9.375%。
这是四个摄像头随机连接到交换机上,它们的数据将以四端口聚合的方式从四个不同的端口转发的概率。
我收到的前四个相机中了9.375%的彩票。然后来回四个摄像头的时候,居然慌慌张张的换了个摄像头,然后怎么换摄像头,就有冲突了。因为碰撞的概率是90.625%,有冲突很正常。
模拟实验
为了了解哪些场景适合使用聚合,我们可以做一个模拟实验。
该交换机使用4个端口进行聚合。在模拟N台设备连接的情况下,每个端口会转发多少台设备。
模拟代码(Python)如下:
导入matplotlib.pyplot为pltimport random def simulate(device,round=100):PLT . fig size=(10,7))fof=[0 for x in range(device 1)]for I in range(round):freq=[0,0,0,0]for j in range(device):port=random . randint(0,3)freq[port]=1 for f in freq:fof]=1 PLT . plot(fof)PLT . title( N of device trafficformat(device,round)) plt.show()
在环路中,使用一个简单的随机数来模拟每个设备的流量将通过哪个端口转发;Freq统计每个端口转发的几个设备的流量;最后的结果fof就是统计频率的频率。
例如,举例来说,freq=[1,2,1,0]表示:
一个设备的流量通过端口0,两个通过端口1,一个通过端口2,没有流量通过端口3;
相应的fof统计数据有:
0流量加1次(端口3无流量),1流量加2次(端口0和2各加1次),2流量加1次(端口1)。
模拟结果:
图4: 4设备模拟结果
在此图中,您可以看到当只有4台设备时,通常会有没有流量的端口。在一万次试验中,有12500个端口没有流量,也就是说几乎每次都有一个端口没有流量。拥有一个没有流量的端口意味着一些端口将转发来自至少两个设备的流量,这就是前面提到的流量不均衡的情况。
图5: 40设备模拟结果
图6:400台设备的模拟结果
随着设备的增加,流量会越来越均匀。例如,当有400台设备时,一个端口在大多数情况下会转发大约100 (80~120)台设备的流量。
标签
链路聚合适用于终端数量较多,每个终端流量不太高的情况。这样很容易达到统计平衡,使得某个汇聚端口的流量不会超过带宽。其实这也是服务器上常见的场景。比如一台服务器要接受上千次访问,每次访问的流量不高,但一般会超过单个网口的带宽,所以适合使用多个网口进行链路聚合。
以我的情况来说,终端数量少,每个终端的流量高(接近单个网口的带宽),终端以发送数据为主,所以交换机上的聚合方式有限,很容易出现单个聚合口因流量不均衡而超出带宽的情况。
通过这个例子,我们也理解了为什么会有这么多的聚合模式和哈希策略。比如服务器上的应用可能无法完全使用Mac地址作为hash,于是就有了第三层和第四层hash,这样就可以对互联网上的终端进行识别和区分,达到流量平衡。
另一个感觉是,从技术上来说,最怪异的事情总有合理的解释。