Chiphell - 分享与交流用户体验

标题: 请教用OP的链路聚合突破千兆带宽的问题 [打印本页]

作者: flow    时间: 2022-8-29 13:24
标题: 请教用OP的链路聚合突破千兆带宽的问题
原来的讨论贴被归档了, 外站机器人抓的页面 https://machbbs.com/chiphell/472280

上海电信, 没有在局端开桥接, 自己买了华为的8546Q, 刷回原版固件并补全了shell, 改成epon模式, 按照帖子的说法, 这个光猫默认支持balance rr模式的, 所以不需要做啥特别的处理

再按照https://post.s m z d m.com/p/ag47kmnw/的介绍, 在OP里面把两个wan口做了bonding, 但是结果就很诡异, 如果用bonding wan绑定pppoe拨号, 我能看到光猫上面两个口都在闪灯, 应该是有数据流, 但是测速就只有500M+的速度, 如果不用bonding wan, 只用单独的一个wan口绑定pppoe拨号, 测速就是900左右, 那么到底问题可能出在哪里, 该怎么排查比较好呢?
作者: chen10247    时间: 2022-8-29 13:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: flow    时间: 2022-8-29 13:35
chen10247 发表于 2022-8-29 13:33
还有这种骚操作....  我来学习一下......

这不骚啊 不是突破千兆的常规套路么, 尤其是上海电信这个坑爹的isp下面
作者: jiangyang123    时间: 2022-8-29 13:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: chen10247    时间: 2022-8-29 13:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: dcl2009    时间: 2022-8-29 14:12
貌似OP聚合在某些网卡下兼容性不是很好,ROS倒是挺稳的,搞个虚拟机排除下?
作者: flow    时间: 2022-8-29 14:30
dcl2009 发表于 2022-8-29 14:12
貌似OP聚合在某些网卡下兼容性不是很好,ROS倒是挺稳的,搞个虚拟机排除下? ...

ROS对我又是新东西...学习成本好高, 不过你提到的OP兼容性的问题有没有办法排查出来?
作者: cipsauer    时间: 2022-8-30 10:56
你光猫网络设置里把两个网口都绑定到一起了吗?我之前就用的8546Q,测速可以跑到1250M,稳定用了半年,现在刚换了2.5G光猫,中兴F7607P,可以跑到1300M了
作者: flow    时间: 2022-8-30 14:00
cipsauer 发表于 2022-8-30 10:56
你光猫网络设置里把两个网口都绑定到一起了吗?我之前就用的8546Q,测速可以跑到1250M,稳定用了半年,现在 ...

光猫里面没有设置啊, 需要单独做么? 我以为它支持balance rr就不需要做什么, 在拨号段绑定就好了
作者: cipsauer    时间: 2022-8-31 01:10
flow 发表于 2022-8-30 14:00
光猫里面没有设置啊, 需要单独做么? 我以为它支持balance rr就不需要做什么, 在拨号段绑定就好了 ...

设置桥接和vlan id那里,把两个端口都勾选上
作者: flow    时间: 2022-8-31 13:51
cipsauer 发表于 2022-8-31 01:10
设置桥接和vlan id那里,把两个端口都勾选上

刚刚去检查了一下光猫,我是勾选了的,然后光猫里面显示用来聚合的两个lan口都有数据量不小的传输,不过一个lan口大概是另外一个的3倍这样

(, 下载次数: 93)
作者: Narsil    时间: 2022-8-31 13:56
浙江电信,千兆宽带双拨完变600了
作者: 翰墨留香    时间: 2022-8-31 14:01
光猫设置好绑定的接口就行,不用其他设置……

问题很有可能出在OP这一边
作者: flow    时间: 2022-8-31 15:23
翰墨留香 发表于 2022-8-31 14:01
光猫设置好绑定的接口就行,不用其他设置……

问题很有可能出在OP这一边 ...

我猜也是,关键是怎么排查,luci上看不出什么特别的地方

根据这个帖子的说法https://s.v2ex.com/t/822174

我查了一下ip addr 以及ifconfig,两个wan口状态看着都挺正常的
作者: 翰墨留香    时间: 2022-8-31 15:54
flow 发表于 2022-8-31 15:23
我猜也是,关键是怎么排查,luci上看不出什么特别的地方

根据这个帖子的说法https://s.v2ex.com/t/82217 ...

你创建Bond网卡之后两个WAN口应该就没有单独的IP了,然后Bond虚拟网卡本身会获取一个IP,PPPoE连接是基于Bond虚拟网卡的,获取到外网的IP。之后你可以查看到,两个物理网卡的流量是基本一致的。
作者: flow    时间: 2022-8-31 16:09
翰墨留香 发表于 2022-8-31 15:54
你创建Bond网卡之后两个WAN口应该就没有单独的IP了,然后Bond虚拟网卡本身会获取一个IP,PPPoE连接是基于 ...

实际的场景就有点奇怪,我的两个wan口是eth1 和 eth2,bondwan绑了eth1和eth2以后,用在WAN口上做pppoe拨号
(, 下载次数: 74)

ip addr的结果类似于这样

10: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 37:28:CA:89:75:c6 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::62be:b4ff:fe00:84c6/64 scope link
       valid_lft forever preferred_lft forever
11: eth2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1460 qdisc mq master bondwan state UP group default qlen 1000
    link/ether 37:28:CA:89:75:c7 brd ff:ff:ff:ff:ff:ff
20: bondwan: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1460 qdisc noqueue state UP group default qlen 1000
    link/ether 37:28:CA:89:75:c7 brd ff:ff:ff:ff:ff:ff


这个看起来也对, 因为bond以后对外只会显示某一个接口的mac address

对应看ifconfig流量是这样的, 这里就比较奇怪了,bondwan的流量和eth2完全一致,但是呢eth1也有不小的流量,然后pppoe-wan也就是绑定了bondwan的流量更加多了不少,也不知道多出来的是去哪里了

bondwan   Link encap:Ethernet  HWaddr 37:28:CA:89:75:C7  
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1460  Metric:1
          RX packets:84395773 errors:0 dropped:243240 overruns:8349 frame:0
          TX packets:41733358 errors:0 dropped:195 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:90656384951 (84.4 GiB)  TX bytes:7545836859 (7.0 GiB)

eth1      Link encap:Ethernet  HWaddr 37:28:CA:89:75:C6  
          inet6 addr: fe80::62be:b4ff:fe00:84c6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5348820 errors:0 dropped:4916 overruns:495 frame:0
          TX packets:2940141 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:6738111498 (6.2 GiB)  TX bytes:991048986 (945.1 MiB)
          Memory:fe900000-fe9fffff

eth2      Link encap:Ethernet  HWaddr 37:28:CA:89:75:C7  
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1460  Metric:1
          RX packets:84395773 errors:0 dropped:8349 overruns:8349 frame:0
          TX packets:41733358 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:90656384951 (84.4 GiB)  TX bytes:7545836859 (7.0 GiB)
          Memory:fea00000-feafffff



pppoe-wan Link encap:Point-to-Point Protocol  
          inet addr:116.237.20.87  P-t-P:116.237.20.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1452  Metric:1
          RX packets:49393189 errors:0 dropped:0 overruns:0 frame:0
          TX packets:22651571 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:54000049386 (50.2 GiB)  TX bytes:2318367089 (2.1 GiB)


作者: 翰墨留香    时间: 2022-8-31 17:05
flow 发表于 2022-8-31 16:09
实际的场景就有点奇怪,我的两个wan口是eth1 和 eth2,bondwan绑了eth1和eth2以后,用在WAN口上做pppoe拨 ...

理论上bondwan和pppoewan的流量应该一致或者没多少差别才对,但是你这个bondwan多了70%以上,显然是有问题的,而且eth1和eth2加起来的流量应该和bondwan一样。


建议检查线缆,两个WAN口的网线用一样长度的成品六类以上线看看。还有,你的eth1和eth2的参数有区别,需要改成一样的MTU。
作者: 翰墨留香    时间: 2022-8-31 17:06
还有,你的eth1竟然有一个单独的IPv6地址,是不是哪里设置错了?

怎么感觉你在openwrt里面对两条线路的聚合有问题呢……
作者: 翰墨留香    时间: 2022-8-31 17:09
我看你1L给的张大妈的链接是用命令做的bond,实际上完全可以在luci网页里面设置的,更直观简单
作者: flow    时间: 2022-8-31 22:01
翰墨留香 发表于 2022-8-31 17:06
还有,你的eth1竟然有一个单独的IPv6地址,是不是哪里设置错了?

怎么感觉你在openwrt里 ...

是有问题,结果就是我重启了一下op,bond居然失效了... 我也百思不得其解,明天继续查资料看看怎么解决,你提到的这些问题我都注意到了,但是没找到哪里可以修改,我winscp连接上去全局查找ifcfg*的文件,愣是没找到每个单独网口的设置文件,也真是见鬼了
作者: okango    时间: 2022-9-1 06:47
flow 发表于 2022-8-31 22:01
是有问题,结果就是我重启了一下op,bond居然失效了... 我也百思不得其解,明天继续查资料看看怎么解决, ...

之前试群晖的bond,端口汇聚,bug很多,汇聚实际使用也没有想象中舒爽,老实搞万兆wan口
作者: 翰墨留香    时间: 2022-9-1 08:47
flow 发表于 2022-8-31 22:01
是有问题,结果就是我重启了一下op,bond居然失效了... 我也百思不得其解,明天继续查资料看看怎么解决, ...

设置网口参数 的文件是/etc/config/network

(印象中是这个,你看看)
作者: greney    时间: 2022-9-1 09:07
根本就是OP BONDING没设置对 正确的方法是
modprobe bonding mode=0 miimon=100
ip link set eth1 master bond0
ip link set eth2 master bond0
作者: precipitation    时间: 2022-9-1 09:24
op聚合我始终就没搞定,换了爱快,直接界面勾上就可以聚合了,测速1200
作者: flow    时间: 2022-9-1 10:43
翰墨留香 发表于 2022-9-1 08:47
设置网口参数 的文件是/etc/config/network

(印象中是这个,你看看)

这个是逻辑接口的配置,不是物理网口的设置,这个我之前也看了, 里面相关的就是一个WAN口的配置,
config interface 'wan'
        option proto 'pppoe'
        option metric '40'
        option username '马赛克'
        option password '马赛克'
        option keepalive '5 5'
        option mtu '1460'
        option ipv6 '0'
        option delegate '0'
        option _orig_ifname 'bondwan'
        option _orig_bridge 'false'
        option ifname 'eth1'
因为昨天晚上重启以后bond失效,所以现在是用eth1单口拨号中
作者: flow    时间: 2022-9-1 10:49
greney 发表于 2022-9-1 09:07
根本就是OP BONDING没设置对 正确的方法是
modprobe bonding mode=0 miimon=100
ip link set eth1 master b ...

我用的完整的rc.local里面是这样的,第二句话我都不记得是怎么来的,不过反正bond0也不用,应该影响也不大,剩下的部分应该都ok?你给的那三句话应该不完整,都没有指定bond mode以及绑定的端口是slave还是master
modprobe bonding mode=0 miimon=100
ifconfig bond0 10.10.10.222 netmask 255.255.255.0 up
ip link add bondwan type bond mode balance-rr
ip link set eth1 type bond_slave
ip link set eth2 type bond_slave
ip link set eth1 master bondwan
ip link set eth2 master bondwan
ip link set bondwan up
exit 0

作者: 翰墨留香    时间: 2022-9-1 10:50
flow 发表于 2022-9-1 10:43
这个是逻辑接口的配置,不是物理网口的设置,这个我之前也看了, 里面相关的就是一个WAN口的配置,
confi ...

我觉得你在设置BOND之前要把所有的WAN相关的网口删除掉,然后再配置……

而且你这个MTU感觉不大对劲

你可以参考https://zhidao.baidu.com/question/181630483611080324.html自己测试一下
作者: flow    时间: 2022-9-1 11:22
翰墨留香 发表于 2022-9-1 10:50
我觉得你在设置BOND之前要把所有的WAN相关的网口删除掉,然后再配置……

而且你这个MTU感觉不大对劲

MTU的问题研究出来了,其实也是因为bond没有生效导致的,默认每个网口的MTU都是1500, 然后wan口是设置成1460了,这些都是OP默认的数值,然后wan绑定bondwan,bondwan绑定了eth2,但是绑定eth1的操作实际上是失败了,所以会出现eth2的MTU是1460,eth1还保持了默认的1500

结论就是实际上bonding还没成功,并且没找到原因...
作者: Roselle    时间: 2022-9-1 11:34
是否两端链路聚合的模式没有匹配?下面是部分文档摘抄

维度 手工模式 LACP模式
定义 Eth-Trunk的建立、成员接口的加入由手工配置,没有链路聚合控制协议的参与。 Eth-Trunk的建立是基于LACP协议的,LACP为交换数据的设备提供一种标准的协商方式,以供系统根据自身配置自动形成聚合链路并启动聚合链路收发数据。聚合链路形成以后,负责维护链路状态。在聚合条件发生变化时,自动调整或解散链路聚合。
设备是否需要支持LACP协议 不需要 需要
数据转发 一般情况下,所有链路都是活动链路。所有活动链路均参与数据转发。如果某条活动链路故障,链路聚合组自动在剩余的活动链路中分担流量。 一般情况下,部分链路是活动链路。所有活动链路均参与数据转发。如果某条活动链路故障,链路聚合组自动在非活动链路中选择一条链路作为活动链路,参与数据转发的链路数目不变。
是否支持跨设备的链路聚合 不支持 支持
检测故障 只能检测到同一聚合组内的成员链路有断路等有限故障,但是无法检测到链路故障、链路错连等故障。 不仅能够检测到同一聚合组内的成员链路有断路等有限故障,还可以检测到链路故障、链路错连等故障。


Eth-Trunk的工作模式根据以下两种情况选择:

如果两端设备均支持LACP协议,推荐使用LACP模式链路聚合。

如果对端设备不支持LACP协议,必须使用手工模式链路聚合。

服务器和接入设备的链路聚合模式要匹配。
这里以Intel网卡为例,服务器一般采用静态链接聚合和IEEE 802.3ad动态链接聚合两种。当服务器选择静态链接聚合方式,对应接入设备应该选择手工模式;当服务器选择IEEE 802.3ad动态链接聚合方式,对应接入设备应该选择LACP模式。


作者: 翰墨留香    时间: 2022-9-1 12:00
Roselle 发表于 2022-9-1 11:34
是否两端链路聚合的模式没有匹配?下面是部分文档摘抄

华为这个猫只能支持balance-rr(bond0)模式的聚合,这种聚合不需要在猫端做设置,路由器设置好了猫端会自动启用
作者: Roselle    时间: 2022-9-1 12:15
翰墨留香 发表于 2022-9-1 12:00
华为这个猫只能支持balance-rr(bond0)模式的聚合,这种聚合不需要在猫端做设置,路由器设置好了猫端会 ...

哦哦,,这种模式如果两条网线不一样是不是有可能导致包频繁重发降低速度呢?
作者: 翰墨留香    时间: 2022-9-1 12:27
Roselle 发表于 2022-9-1 12:15
哦哦,,这种模式如果两条网线不一样是不是有可能导致包频繁重发降低速度呢? ...

有这种可能,不过我没试过
作者: greney    时间: 2022-9-1 13:29
RR模式不设置slave  因为两个口都是同时工作
modprobe bonding mode=0 miimon=100
ip link set eth1 master bond0
ip link set eth2 master bond0
这三行放到rc.local里 就行了
作者: flow    时间: 2022-9-1 14:03
本帖最后由 flow 于 2022-9-1 14:06 编辑

折腾了大半天,放狗搜了不知道多少帖子,最终问题还是要靠自己一点点验证才能发觉错误
首先cat /proc/net/bonding/bondwan看了一下这个接口的状态,显示是down,说明确实是bonding没起作用,之前rc.local的命令只是建了一个空的bondwan逻辑接口而已,那么到底为啥不行网上也没有给出过任何解释,最后没办法我只好把rc.local的命令手工执行
先是把接口删掉
  1. root@OpenWrt:/# ip link delete bondwan
复制代码

然后一句句运行
root@OpenWrt:/# ip link set eth1 type bond_slave
root@OpenWrt:/# ip link set eth2 type bond_slave
root@OpenWrt:/# ip link set eth1 master bondwan
RTNETLINK answers: Operation not permitted
root@OpenWrt:/# ip link set eth2 master bondwan
RTNETLINK answers: Operation not permitted
到这里也是坑爹的不行,错误出来了知道没法把eth1和eth2绑定到bondwan下面,但是为什么不行是不知道的,也是反复折腾了很久,一狠心
ip link set eth2 down
再执行
ip link set eth2 master bondwan就成功了,虽然我执行成功也没理解为什么,eth2实际上是没有工作的,难道只是因为网线连接在光猫上了就不能做bond?
外网某帖子提到原因了...
interfaces must be down before being enslaved, but can be set such in the same single command in case former state is not known




接下来把eth1也绑定成功,颤抖着把wan口重新和bondwan绑定在一起重新拨号,当看到顺利获取ip的那一刻,心情是相当激动的,but当我跑了两圈测速之后,心里还是拔凉拔凉的...

(, 下载次数: 47)

所以接下来又重新回到起点,到底为啥bonding成功了网速反而更差了呢


作者: flow    时间: 2022-9-1 14:23
greney 发表于 2022-9-1 13:29
RR模式不设置slave  因为两个口都是同时工作
modprobe bonding mode=0 miimon=100
ip link set eth1 master ...

我测试过了,bond_slave的参数加不加没啥区别,一旦两个口都被绑定在一起以后,slave自动被加上了,ip link show的结果都是自动变成
eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP>
作者: greney    时间: 2022-9-1 14:24
flow 发表于 2022-9-1 14:23
我测试过了,bond_slave的参数加不加没啥区别,一旦两个口都被绑定在一起以后,slave自动被加上了,ip li ...

我记得 eth1 eth2 br0 这三个mac会变成一样的 才算成功
作者: flow    时间: 2022-9-1 15:11
greney 发表于 2022-9-1 14:24
我记得 eth1 eth2 br0 这三个mac会变成一样的 才算成功

是的,现在的状况就是bonding确实成功,但是成功的代价就是网速非但没有提升反而比单拨少了大概至少20%...
我在网上看到过有人有同样的问题,但并没有给出解决方案
作者: jcojjbzc    时间: 2022-9-2 10:32
我也是遇到了一样的问题,你可以先试试用爱快能不能突破。
作者: flow    时间: 2022-9-2 13:58
jcojjbzc 发表于 2022-9-2 10:32
我也是遇到了一样的问题,你可以先试试用爱快能不能突破。

实在不行也只能装个ikuai试一下,关键是比较折腾,要起个新的虚拟机,ikuai之前也没玩过不知道是不是方便...
作者: flow    时间: 2022-9-7 10:54
更新一下, 换了一种链路聚合的方式, 方法来源 https://www.wyr.me/post/709

结果更惨, 只有20多M的速度了, 然后还有环路风暴产生...




欢迎光临 Chiphell - 分享与交流用户体验 (https://www.chiphell.com/) Powered by Discuz! X3.5