各位大佬好,我了解到 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"
目前我的交换机有8个口,其中1和2口绑定active模式(2个口都连到服务器),3和4口也是active模式(连到NAS),
然后剩余的口不做配置,笔记本用雷电万兆网卡的一个口连到交换机8口上
服务器的bonding配置802.3ad 3+4。NAS是威联通,似乎只能配2+3
笔记本和NAS都连上服务端测速的话,都可以跑到10Gbps,总计20Gbps。 如果在交换机上把1口或2口关掉再测速,笔记本和NAS的总带宽就只有10Gbps了
笔记本和服务器都连上NAS测速的,都可以跑到10Gbps,总计20Gbps。
所以现在还是比较疑问,为什么威联通到服务器通过多线程iperf3只能跑到10Gbps
1
lutasa43210 239 天前 2
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 |
2
supty 239 天前
802.11ad 这种要多线程 IP 才能跑到 20Gbps , 一般是常用于交换机之间的主备链路+带宽聚合
balance-rr 模式如果两端设备确认支持的话是可以跑到 20Gbps 的,家用级的设备坑多配了也不一定能用. 另外就几个盘位的万兆 NAS 通常都难以突破 1000M/s 没啥折腾必要 |
3
jdjingdian OP |
4
pinkbook 239 天前 1
交换机动态/静态 lacp 区别是 动态模式下当 bond/eth-trunk down 时,会将 eth-trunk 的 vlan 属性下发到物理接口。所以当链路聚合 up 时,动态静态没区别的。测试只有 10G 的话,要登录交换机实际查看 In/out 流量。然后看哪个方向负载不均
|
5
xqzr 238 天前 1
尝试 layer 3 + 4 ,交换机“基于源和目的 IP + 端口”
|
6
crusaderay123 238 天前 via iPhone 1
交换机如果能看量的话最好了,4 个端口一看就知道是发的不满还是只发了一个口,一般 balance-rr 这个我理解是 round robin 的意思吧,应该是常规负载
|
7
xiaooloong 238 天前 1
链路聚合分两种
第一种是静态绑定,也就是提前设置好聚合规则,设置好之后两个端口当作一个用,各种算法收帧没啥区别,任意一个端口收到对面的发来的帧处理就是了。算法区别在与发帧,rr 就是各个端口轮训发帧,xor 就是根据帧信息和端口做异或选择哪个端口发帧。 第二种是动态绑定,也就是 802.3ad ,也叫 LACP 。会在连接的端口上跑协议动态协商。 mode 0 mode 2 mode 4 这些是 linux 内核上对链路聚合的叫法。 交换机上一般叫做 LAG ,你去交换机文档里看看支持哪种聚合。 交换机上支持动态聚合,那服务器上就用 802.3ad 。交换机只支持静态聚合,服务器就用 balance-系列算法,具体算法对交换机无所谓,我只用过 rr 。 |
8
2067 237 天前 1
如果你是 layer2+3 ,实际上源目的 ip 和 mac 都相同的情况下,也就只会哈希到固定一个端口上面
所以要么加上端口号信息一起哈希,这样多个 socket 的时候“有可能”跑满 要么直接是简单复合轮询负荷分担,mode0 也许满足你的要求 |
9
FabricPath 237 天前 1
你要学习 RDMA 的话,买两个 25G 的 CX4 或者 CX5 对着插,便宜好用,跑 RoCEv2 稳得一批
|
10
jdjingdian OP @FabricPath 我目前家里有 CX4421A 、CX4121A 、CX3-PRO ,4421 4121 都可以运行在 25G ,但目前家里没有支持 RoCE 的交换机(准确来讲,我的交换机好像没有看到配置 PFC 流控的地方)
所以目前相当于只是在服务器内部的虚拟机之间使用,将网卡 sr-iov 拆分后直通 vf 给虚拟机内,然后两个虚拟机用 ib_write_bw --report_gbits 命令测试带宽,跑到 53Gbps |
11
FabricPath 234 天前 1
@jdjingdian
单交换机、几个端口的场景,PFC 的作用忽略不计,不用管交换机;多交换机开 ECN 就行了。 另外你直接两个网卡对插就行了,不需要交换机,除非你有多台机器要互联; vf-lag rdma 在 cx4 上应该是不支持的 |
12
jdjingdian OP @FabricPath 好的,多谢!
|