请教 LACP 链路聚合技术

234 天前
 jdjingdian

各位大佬好,我了解到 Linux 下 bonding 主要有几种模式

有大佬知道这几种模式使用起来有什么区别吗?是否有什么优劣的区别

我目前家里有一台服务器,一台威联通的 NAS ,上面都有双口的万兆网卡,然后我有一个兮克 SKS8300-8X 的 8 光口可管理交换机。

我想实现的是,通过链路聚合,让服务器和威联通互相访问的时候能让带宽叠加,尽可能接近理想的 20Gbps 。请问这种想法能实现吗?如果要实现这个想法,应该用哪种模式呢?

昨晚我自己试过 balance-xor 和 802.3ad ,在服务器 NAS 和交换机上都分别配置了,两种设置的时候,服务器和 NAS 都显示聚合的接口是 20Gbps ,但是用 iperf3 测速的时候只有不到 10Gbps ,看起来只走了一个口的速度

iperf3 命令是这样的,我理解多线程理论可以享受到链路聚合的带宽叠加吧?

iperf3 -c 服务器 IP -P 4

Linux 服务器和威联通的 hash 模式都配置为 layer 2 + 3 ,然后交换机配置的模式是"基于源和目的 MAC + IP"

2061 次点击
所在节点    宽带症候群
12 条回复
lutasa43210
234 天前
lacp 也是基于原则来处理帧

“例如,DeviceA 的一条 TCP 报文流的源 IP 地址为 192.168.1.1 ( MAC 地址:a-a-a ,源端口号:50 ),目的 IP 地址为 172.16.1.1 ( MAC 地址:b-b-b ,目的端口号:2000 ),另一条 TCP 报文流的源 IP 地址为 192.168.1.1 ( MAC 地址:a-a-a ,源端口号:60 ),目的 IP 地址为 10.1.1.1 ( MAC 地址:c-c-c ,目的端口号:2000 )。如果在 DeviceA 上配置基于报文的源 MAC 地址进行负载分担,则报文出接口仅有 1 个;如果在 DeviceA 上配置基于报文的目的 IP 地址进行负载分担,则报文出接口有两个,去往不同目的 IP 的报文会从不同的出接口转发。

配置负载分担方式时,请注意:

负载分担方式只在流量的出接口上生效,如果发现各入接口的流量不均衡,请修改上行出接口的负载分担方式。
尽量将数据流通过负载分担在所有活动链路上传输,避免数据流仅在一条链路上传输,造成流量拥堵,影响业务正常运行。
例如,数据报文的目的 MAC 和 IP 地址只有一个,则应选择根据报文的源 MAC 和 IP 地址进行负载分担,如果选择根据报文的目的 MAC 和 IP 地址进行负载分担则会造成流量只在一条链路上传输,造成流量拥堵。”

给你个参考 https://cloud.tencent.com/developer/article/2213188
supty
234 天前
802.11ad 这种要多线程 IP 才能跑到 20Gbps , 一般是常用于交换机之间的主备链路+带宽聚合
balance-rr 模式如果两端设备确认支持的话是可以跑到 20Gbps 的,家用级的设备坑多配了也不一定能用.

另外就几个盘位的万兆 NAS 通常都难以突破 1000M/s 没啥折腾必要
jdjingdian
234 天前
@supty 确实我现在 nas 速度也还没超过 1000M

主要是刚好看交换机支持静态/动态聚合功能,就想试试,结果昨天弄了一晚上带宽都没搞上去
pinkbook
234 天前
交换机动态/静态 lacp 区别是 动态模式下当 bond/eth-trunk down 时,会将 eth-trunk 的 vlan 属性下发到物理接口。所以当链路聚合 up 时,动态静态没区别的。测试只有 10G 的话,要登录交换机实际查看 In/out 流量。然后看哪个方向负载不均
xqzr
234 天前
尝试 layer 3 + 4 ,交换机“基于源和目的 IP + 端口”
crusaderay123
233 天前
交换机如果能看量的话最好了,4 个端口一看就知道是发的不满还是只发了一个口,一般 balance-rr 这个我理解是 round robin 的意思吧,应该是常规负载
xiaooloong
233 天前
链路聚合分两种

第一种是静态绑定,也就是提前设置好聚合规则,设置好之后两个端口当作一个用,各种算法收帧没啥区别,任意一个端口收到对面的发来的帧处理就是了。算法区别在与发帧,rr 就是各个端口轮训发帧,xor 就是根据帧信息和端口做异或选择哪个端口发帧。

第二种是动态绑定,也就是 802.3ad ,也叫 LACP 。会在连接的端口上跑协议动态协商。

mode 0 mode 2 mode 4 这些是 linux 内核上对链路聚合的叫法。
交换机上一般叫做 LAG ,你去交换机文档里看看支持哪种聚合。
交换机上支持动态聚合,那服务器上就用 802.3ad 。交换机只支持静态聚合,服务器就用 balance-系列算法,具体算法对交换机无所谓,我只用过 rr 。
2067
233 天前
如果你是 layer2+3 ,实际上源目的 ip 和 mac 都相同的情况下,也就只会哈希到固定一个端口上面

所以要么加上端口号信息一起哈希,这样多个 socket 的时候“有可能”跑满
要么直接是简单复合轮询负荷分担,mode0 也许满足你的要求
FabricPath
232 天前
你要学习 RDMA 的话,买两个 25G 的 CX4 或者 CX5 对着插,便宜好用,跑 RoCEv2 稳得一批
jdjingdian
232 天前
@FabricPath 我目前家里有 CX4421A 、CX4121A 、CX3-PRO ,4421 4121 都可以运行在 25G ,但目前家里没有支持 RoCE 的交换机(准确来讲,我的交换机好像没有看到配置 PFC 流控的地方)

所以目前相当于只是在服务器内部的虚拟机之间使用,将网卡 sr-iov 拆分后直通 vf 给虚拟机内,然后两个虚拟机用 ib_write_bw --report_gbits 命令测试带宽,跑到 53Gbps
FabricPath
229 天前
@jdjingdian
单交换机、几个端口的场景,PFC 的作用忽略不计,不用管交换机;多交换机开 ECN 就行了。
另外你直接两个网卡对插就行了,不需要交换机,除非你有多台机器要互联;
vf-lag rdma 在 cx4 上应该是不支持的
jdjingdian
229 天前
@FabricPath 好的,多谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1027334

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX