验证bond功能

  1. 在Host创建VF。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    echo 4 > /sys/class/net/enp1s0f0/device/sriov_numvfs
    ip link set enp1s0f0 vf 0 mac e4:11:22:33:61:11
    ip link set enp1s0f0 vf 1 mac e4:11:22:33:61:22
    ip link set enp1s0f0 vf 2 mac e4:11:22:33:61:33
    ip link set enp1s0f0 vf 3 mac e4:11:22:33:61:44
    echo 0000:01:00.2 > /sys/bus/pci/drivers/mlx5_core/unbind
    echo 0000:01:00.3 > /sys/bus/pci/drivers/mlx5_core/unbind
    echo 0000:01:00.4 > /sys/bus/pci/drivers/mlx5_core/unbind
    echo 0000:01:00.5 > /sys/bus/pci/drivers/mlx5_core/unbind
    devlink dev eswitch set pci/0000:01:00.0 mode switchdev
    echo 4 > /sys/class/net/enp1s0f1/device/sriov_numvfs
    ip link set enp1s0f1 vf 0 mac e4:11:22:33:62:11
    ip link set enp1s0f1 vf 1 mac e4:11:22:33:62:22
    ip link set enp1s0f1 vf 2 mac e4:11:22:33:62:33
    ip link set enp1s0f1 vf 3 mac e4:11:22:33:62:44
    echo 0000:01:01.2 > /sys/bus/pci/drivers/mlx5_core/unbind
    echo 0000:01:01.3 > /sys/bus/pci/drivers/mlx5_core/unbind
    echo 0000:01:01.4 > /sys/bus/pci/drivers/mlx5_core/unbind
    echo 0000:01:01.5 > /sys/bus/pci/drivers/mlx5_core/unbind
    devlink dev eswitch set pci/0000:01:00.1 mode switchdev
    
    • 在linux-bond场景下,设置pci mode为switchdev之后,请严格按照操作步骤执行,不要立即将VF绑定回来,否则会导致报错。
    • 允许但不推荐在开机之后立即组bond,可以设置相关ifcfg-xxxxx中的onboot=no。
    • MAC地址不能冲突,包括本服务器、对端服务器以及交换机上的MAC地址都需保持唯一性。

  2. 组Linux bond。

    1. 修改物理网口enp1s0f0、enp1s0f1的配置文件。
      1
      2
      vim /etc/sysconfig/network-scripts/ifcfg-enp1s0f0
      vim /etc/sysconfig/network-scripts/ifcfg-enp1s0f1
      
    2. “i”进入编辑模式,增加如下两行。
      1
      2
      MASTER=bond0
      SLAVE=yes
      

    3. “Esc”键退出编辑模式,输入“:wq!”后按“Enter”键保存并退出文件。
    4. 增加bond口的配置文件。
      1
      vim /etc/sysconfig/network-scripts/ifcfg-bond0
      
    5. “i”进入编辑模式,添加以下内容。
      1
      2
      3
      4
      5
      6
      7
      8
      DEVICE=bond0
      NAME='bond0'
      TYPE=Ethernet
      NM_CONTROLLED=no
      ONBOOT=yes
      BOOTPROTO=none
      BONDING_OPTS='mode=4 miimon=100 xmit_hash_policy=layer3+4'
      IPV6INIT=no
      
      • BONDING_OPTS配置中:

        mode为模式,4是LACP模式;

        miimon=100代表100ms监测一次;

        xmit_hash_policy=layer3+4是LACP均衡的策略,使用3层4层均衡,即IP地址和端口。

      • 主备模式参数为mode=1 miimon=100。
    6. “Esc”键退出编辑模式,输入“:wq!”后按“Enter”键保存并退出文件。
    7. 加载bond内核模块。
      1
      modprobe bonding mode=4 miimon=100
      

      主备模式mode参数为1,lacp模式mode参数为4,请根据实际业务需求配置。

    8. 启动bond。
      1
      ifup bond0
      

      注意此处不要重启Network。

    9. 查看bond配置。
      cat /proc/net/bonding/bond0

  3. 绑定VF。

    1
    2
    3
    4
    5
    6
    7
    8
    echo 0000:01:00.2 > /sys/bus/pci/drivers/mlx5_core/bind
    echo 0000:01:00.3 > /sys/bus/pci/drivers/mlx5_core/bind
    echo 0000:01:00.4 > /sys/bus/pci/drivers/mlx5_core/bind
    echo 0000:01:00.5 > /sys/bus/pci/drivers/mlx5_core/bind
    echo 0000:01:01.2 > /sys/bus/pci/drivers/mlx5_core/bind
    echo 0000:01:01.3 > /sys/bus/pci/drivers/mlx5_core/bind
    echo 0000:01:01.4 > /sys/bus/pci/drivers/mlx5_core/bind
    echo 0000:01:01.5 > /sys/bus/pci/drivers/mlx5_core/bind
    

  4. 启动OVS配置组网。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    systemctl start openvswitch
    ovs-vsctl add-br br-ovs
    ovs-vsctl add-port br-ovs bond0
    ovs-vsctl add-port br-ovs enp1s0f0_0
    ovs-vsctl add-port br-ovs enp1s0f0_1
    ovs-vsctl add-port br-ovs enp1s0f0_2
    ovs-vsctl add-port br-ovs enp1s0f0_3
    ovs-vsctl add-port br-ovs enp1s0f1_3
    ovs-vsctl add-port br-ovs enp1s0f1_2
    ovs-vsctl add-port br-ovs enp1s0f1_1
    ovs-vsctl add-port br-ovs enp1s0f1_0
    ifconfig bond0 up
    ip link set dev enp1s0f0_0 up
    ip link set dev enp1s0f0_1 up
    ip link set dev enp1s0f0_2 up
    ip link set dev enp1s0f0_3 up
    ip link set dev enp1s0f1_0 up
    ip link set dev enp1s0f1_1 up
    ip link set dev enp1s0f1_2 up
    ip link set dev enp1s0f1_3 up
    

  5. 启动虚拟机并进入虚拟机。

    1
    2
    virsh start vm1
    virsh console vm1
    

  6. 虚拟机之间进行发包。

    • Host2 vm1执行:
      1
      iperf3 -s
      
    • Host1 vm1执行:
      1
      iperf3 -c <Host2vm1_ip> -t 0
      

  7. “Ctrl+]”切出虚拟机,在其中一台物理机查看卸载流表。

    1
    watch -n 1 -d ovs-appctl dpctl/dump-flows type=offloaded
    

    能看到卸载流表,注意双向流表卸载,LACP注意验证8台虚拟机总带宽接近双网口的带宽之和,主备模式注意验证一个网口不通的情况。

  8. 删除bond。

    1. 关闭虚拟机。
      1
      virsh shutdown vm1
      
    2. 删除OVS网桥。
      1
      ovs-vsctl del-br br-ovs
      
    3. 解绑所有相关VF(解绑命令参考1),或直接清空VF。
      1
      2
      echo 0 > /sys/class/net/enp1s0f0/device/sriov_numvfs
      echo 0 > /sys/class/net/enp1s0f1/device/sriov_numvfs
      
    4. 删除bond。
      1
      2
      ip link delete bond0
      rmmod bonding