V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
LxnChan
V2EX  ›  Linux

求问链路聚合

  •  
  •   LxnChan ·
    lxnchan · 38 天前 · 1918 次点击
    这是一个创建于 38 天前的主题,其中的信息可能已经有所发展或是发生改变。

    手头有一台 R720 ,BCM5720 的 LOM 网卡,4 口千兆,;交换机是锐捷 S5760C-24GT8XS-X 。

    目前的网络配置是 4 个 LOM 口全直连交换机,然后做链路聚合,想的是带宽叠加。

    但是现在的问题是经过测速后发现带宽并不能叠加,只是流量会在每次传输的时候随机分配到某一条链路上,看别的地方说链路聚合并不是 1+1=2 ,所以求问为什么无法带宽叠加以及如何能够达到带宽叠加?

    交换机侧配置:

    服务器侧配置:

    20 条回复    2024-11-12 18:34:29 +08:00
    dhb233
        1
    dhb233  
       38 天前
    一般情况聚合单个链接只能走一个链路,除非改哈希算法,而且还要对端也改才能生效
    LxnChan
        2
    LxnChan  
    OP
       38 天前
    @dhb233 那问题是 iperf 开多线程看交换机这边也还是只走了一个链路呀
    pinkbook
        3
    pinkbook  
       38 天前
    检查是哪个方向流量只走单条线路。web 交换机没操作过,正常交换机默认链路聚合就可以。服务器给你个配置参考:
    bond-mode 4
    bond-miimon 100
    bond-lacp-rate 1
    bond-slaves eth1 eth2
    bond-xmit_hash_policy 1
    kenneth104
        4
    kenneth104  
       38 天前
    现在这样是没问题的,但你想怎么分流?
    https://support.huawei.com/enterprise/zh/doc/EDOC1100301700/6de0b60d
    gregy
        5
    gregy  
       38 天前
    链路聚合如果是一对一的传输,速度就是单网口的物理上线。
    如果是一对二的传输,能跑出来 1+1=2 的效果
    这种情况多用于服务端向多个客户端提供服务时使用。
    想要一对一的传输提速,要么上 2.5G 或者 5G ,要么一步到位直接上 10G ,现在 25G ,40G 的二手交换机也慢慢到可以接受的价格了。
    kenneth104
        6
    kenneth104  
       38 天前
    Eth-Trunk1's load-balance information:
    Load-balance Configuration: SIP-XOR-DIP
    Load-balance options used per-protocol:
    L2 : Source XOR Destination MAC address, Vlan ID, Ethertype, Ingress-port
    IPv4: Source XOR Destination IP address, Source XOR Destination TCP/UDP port
    IPv6: Source XOR Destination IP address, Source XOR Destination TCP/UDP port
    MPLS: Source XOR Destination IP address, Source XOR Destination TCP/UDP port

    节选一下我这默认的端口配置
    SIP-XOR-DIP:配置 Eth-Trunk 接口基于源 IP 地址与目的 IP 地址进行负载分担。
    dhb233
        7
    dhb233  
       38 天前
    @LxnChan 如果 iperf 是多个 socket 的话,那大概是 bond 没有配置 L4 的哈希,服务器上可以用 ip -d link show 看下 bond 的哈希算法,还有 3ad 协商对不对

    交换机那边应该没问题,这么基础的配置,不至于只走一条链路。。
    kenneth104
        8
    kenneth104  
       38 天前
    交换口运行 LACP ,就是类似于我的#6 情况
    L2 : Source XOR Destination MAC address, Vlan ID, Ethertype, Ingress-port

    基于来源和目的 MAC ,而且你这 2 个都一样的
    要测试,起子接口,软件一直跑,跑 10 个,大概就明白了
    由于是 XOR ,也还是有可能会空闲的
    kylezb
        9
    kylezb  
       38 天前
    或许可以试试 Balance-RR ( mode=0 ),也能实现负载均衡和接口故障时自动切换。
    xiaozhaoz
        10
    xiaozhaoz  
       38 天前
    网口 bonding 有 0~6 ,7 种模式,你想实现一个链路上行带宽聚合,要用 mode = 0.

    mode 0 的风险是包会乱序,如果是 udp 某些业务处理可能有问题。
    LxnChan
        11
    LxnChan  
    OP
       38 天前
    @kenneth104 @gregy 不是一对一提速,我的想法是比如用户 1 、2 访问文件 A ,这样不考虑其他因素单千兆链路下每个用户的带宽不就是 500Mbps 嘛;聚合后我想的是所有访问者共享 4000Mbps 的带宽,然后单线程下每个用户最高应该是 1000Mbps 这样,就是单个服务端向多个客户端提供服务
    @dhb233 `ip -d link show`这个执行后输出了很多,这个具体怎么看
    kenneth104
        12
    kenneth104  
       38 天前
    就是用户量不够多,足够多的时候,它看着就是均衡的

    Eth-Trunk1 up up 5.55% 0.64% 0 0
    GigabitEthernet1/0/1 up up 5.09% 0.74% 0 0
    GigabitEthernet6/0/1 up up 6.02% 0.54% 0 0
    Eth-Trunk2 up up 2.95% 1.46% 0 0
    GigabitEthernet1/0/2 up up 2.97% 1.53% 0 0
    GigabitEthernet6/0/2 up up 2.93% 1.39% 0 0
    Eth-Trunk3 up up 0.75% 0.48% 0 0
    GigabitEthernet1/0/3 up up 0.86% 0.60% 0 0
    GigabitEthernet6/0/3 up up 0.65% 0.37% 0 0
    LxnChan
        13
    LxnChan  
    OP
       38 天前
    @kenneth104 嗯,目前还是测试阶段,不敢推,怕出问题,做聚合本来也是考虑到用户多的时候能均衡一下流量。另外如果一个客户端占满了 1000Mbps ,那此时再来一条连接不就应该分配到别的链路上吗
    kenneth104
        14
    kenneth104  
       38 天前
    不是的,分配只遵从你的策略,例如我上面的来源目的 MAC
    dhb233
        15
    dhb233  
       38 天前
    @LxnChan 主要看 2 个参数吧
    xmit_hash_policy 是不是 layer3+4
    ad_num_ports 是不是 4 (看起来你的有 4 个口)
    LxnChan
        16
    LxnChan  
    OP
       38 天前
    dhb233
        17
    dhb233  
       38 天前
    @LxnChan 2 层哈希。。。这你访问哪估计都只能到一个口
    命令的话,可以用 ip link set bond0 type bond xmit_hash_policy layer3+4 改,不知道你是怎么配置的
    hackroad
        18
    hackroad  
       38 天前
    https://konvict.cn/post/duo-wang-qia-ju-he/

    1. layer2:使用二层帧头作为计算分发出口的参数,这导致通过同一个网关的数据流将完全从一个端口发送,为了更加细化分发策略,必须使用一些三层信息,然而却增加了计算开销。

    使用硬件 MAC 地址的 XOR 来生成 hash 。公式为:

    (MACsrc⊕MACdest)% Nslave

    该算法会将某个网络对( network peer )上所有的流量全部分配到同一个 slave 上。

    2. layer2+3:在 1 的基础上增加了三层的 ip 报头信息,计算量增加了,然而负载却更加均衡了,一个个主机到主机的数据流形成并且同一个流被分发到同一个端口,根据这个思想,如果要使负载更加均衡。

    3. layer3+4:可以形成一个个端口到端口的流,负载更加均衡。通过 TCP 及 UDP 端口及其 IP 地址进行 HASH 计算。该策略在可能的时候使用上层协议的信息来生成 hash 。这将允许特定网络对( network peer )的流量分摊到多个 slave 上,尽管同一个连接( connection )不会分摊到多个 slave 上。
    LxnChan
        19
    LxnChan  
    OP
       37 天前
    @dhb233 @hackroad 我是用 nmtui 配置的,没看到哪里能配置哈希算法参数...我先搜搜看,谢谢啦
    hackroad
        20
    hackroad  
       37 天前
    @LxnChan
    /etc/sysconfig/network-scripts/ifcfg-bond0
    配置文件可以这么配
    TYPE=Bond
    DEVICE=bond0
    BOOTPROTO=static
    ONBOOT=yes
    IPADDR=10.1.22.xxx
    NETMASK=255.255.255.0
    GATEWAY=10.1.22.1
    DNS1=10.1.254.xxx
    NAME=bond0
    BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=layer3+4"

    如果用 nmcli
    就用这个改
    nmcli connection modify type bond con-name ${BOND} ifname ${BOND} bond.options mode=${TYPE},xmit_hash_policy=layer3+4

    也可以看下这个脚本
    https://github.com/arendej/Abashe/blob/master/setup-bond-lacp.sh


    最终实现多个口都能有流量进出,下图我是 4 个 10G 做的 bond
    [img][/img]
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3120 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 12:56 · PVG 20:56 · LAX 04:56 · JFK 07:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.