在数据中心内,当服务器流量太大或业务很重要,通常会采取多网卡绑定提高带宽和增强冗余性,而交换机上也需要做相应配置,保证服务器多线路接入能正常通信,常用的就是链路聚合技术。但是网络工程师经常会遇到配置好了交换机的链路聚合,而服务器还是不能正常通信的情况。服务器工程师往往不会关注网络问题,也不能给你有用的排错信息,这时候就需要网络工程师根据服务器网卡绑定模式来决定交换机的链路聚合该如何配置。虽然网工不必懂Linux,但谁让网络总是最后的背锅侠呢,so,只能让我们的锅底更厚一点。
bonding是linux内核自带的模块,它能将Linux系统的多个网卡绑定为一个逻辑端口,同时对外提供一个统一的IP地址,目前bonding模块的工作模式共有七种mode(0~6)。
linux七种bond模式说明:
mode=0 ,(balance-rr) 轮询均衡模式
特点:传输数据包顺序是多个网卡轮询传输,可能会出现乱序数据包需要重传。服务器对外只有一个MAC地址,其物理网卡是没有MAC地址的,因此需要交换机做链路聚合,否则不知道要将数据包发送给哪个网卡。
mode=1, (active-backup)主备模式
特点:只有主网卡处于活动状态,当主网卡down备份网卡才会转为活动网卡。服务器对外只有一个活动网卡,从交换机上看来,只能看到其活动的网卡一个MAC地址,因此不需要交换机特别配置,配置access端口就可以了。
mode=2,(balance-xor)(根据hash的均衡模式)
特点:基于指定的传输HASH策略传输数据包。默认hash算法是: [(source MAC address XOR'd with destination MAC address) modulo slave count]。(XOR:异或),算法可以更改。
mode=3,broadcast(广播策略)
特点:在每个网卡上传输每个数据包,广播包太多,一般不使用此模式。
mode=4,(802.3ad)IEEE 802.3ad Dynamic link aggregation(IEEE802.3ad 动态链接聚合)
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个网卡工作在同一个激活的聚合体下。基于传输hash策略实现负载均衡,默认XOR hash算法。并且支持802.1Q trunk模式,同时传输多个VLAN。
tips:
- 服务器网卡支持同样的双工和速率;
- 交换机网卡需要配置802.3ad,也就是LACP协议;
- 交换机不一定支持XOR hash算法,在实际使用时存在兼容性问题;
mode=5,(balance-tlb)Adaptive transmit load balancing(适配器发送负载均衡)
特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个网卡上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的网卡出故障了,另一个网卡接管失败的网卡的MAC地址。交换机上可见多个网卡的MAC,因此不需要交换机做链路聚合配置。
mode=6,(balance-alb)Adaptive load balancing(适配器适应性负载均衡)
特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receiveload balance, rlb),而且不需要任何switch(交换机)的支持。交换机上也是可见多个网卡的MAC,不需要做链路聚合配置。
以下部分是mode=6实现原理,了解一下:
- bond接收负载均衡是通过ARP协议实现的。bonding驱动截获本机发送的ARP应答,并把源MAC地址改写为bond中某个网卡的MAC地址,从而使得交换机上学习到的ARP是服务器想要分配流量的MAC地址,向服务器发送的流量则会发送到相对应的MAC地址。
- bond发送负载均衡也是通过ARP协议实现的。当服务器发起ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达时,bonding驱动把它的MAC地址提取出来,并伪造一个ARP应答给bond中的某个网卡,以此实现从指定的网卡发出数据包。
- 当有网卡出现故障或ARP过期时,bond都会重新计算,将流量重新分配到各个网卡;
LACP的模式分为静态和动态,动态又分为主动和被动。
LACP链路聚合模式:
1,静态:
mode on,手动强制模式:
不发送也不接收LACP协商报文,交换机物理端口被强制捆绑到etherchannel,数据包根据聚合口负载均衡模式在多个物理口上传输。一般默认的为基于包的负载均衡,即在多个网口之间轮询发送数据包。使用这种聚合模式时,对端也必须是mode on,强制形成etherchannel。
2,动态:
active,主动协商模式:
交换机聚合口主动发出LACPDU报文,与对端符合802.3ad规范的动态聚合口主动协商。
一般推荐使用主动模式。
passive,被动协商模式:
交换机聚合口只接收LACPDU报文,被动与对端符合802.3ad规范的动态聚合口进行协商。
一张表总结:
tips:
- 服务器常用的为mode0,1,6三种bond模式;
- 在某些情况下需要动态协商,可以使用mode4,使用LACP协商。
- 如果服务器和交换机配置都没有问题,建议检查一下两端的网口双工和速率是否一致,如果不能自动协商成功,则改成强制全双工。