CentOS7利用NetworkManager配置网卡Bonding

默认分类 · 2023-08-02

手上有一台双网卡的机器,一直只插其中一个网口,有点浪费,打算配置链路聚合Bonding来把另一块网卡利用上,搜了下网上的教程,CentOS下都是让关掉NetworkManager然后手动配置的,NM这玩意我挺喜欢,自然是不会关的,本身NM也支持管理Bonding,记一下利用NM来创建Bonding的过程。

Bonding的模式

当前内核Bonding模块共支持7种模式,如下表:

名称编号描述
balance-rr0轮询每个slave接口
active-backup1主备模式,只激活一个slave接口,故障时切换其他接口
balance-xor2根据选定的哈希策略,在不同的接口分发数据包
broadcast3在所有slave接口上发送同样的数据包
802.3ad4参考IEEE 802.3ad规范
balance-tlb5比较复杂,用不上,就不写了
balance-alb6比较复杂,用不上,就不写了

因为内网带宽都是千兆,做负载均衡没有什么意义,内网的交换机都是消费级的,VLAN都不支持,更不要说支持链路聚合了,所以选择active-backup模式做个冗余,把空闲的网卡做备份了。

操作过程

  1. 检查内核模块bonding是否加载(NM管理不需要做这一步,会自动加载)

    lsmod | grep bonding

    如果没有输出模块信息,则说明模块未加载,执行以下命令加载模块

    modprobe --first-time bonding

    将bonding模块设置为开机自动加载

    echo bonding > /etc/modules-load.d/bonding.conf
  2. 创建bonding连接会话

    nmcli connection add type bond ifname bond0 \
         bond.options mode=active-backup \
         ipv4.method manual \
         ipv4.address 192.168.1.3/24 \
         ipv4.gateway 192.168.1.1 \
         ipv4.dns 223.5.5.5,223.6.6.6 \
         ipv6.method ignore \
         connection.autoconnect yes \
         connection.id bonding-master

    这里要正确设置ipv4和ipv6的method和信息,否则会出奇怪的问题导致bond-master掉线断网

  3. 将接口划分为bond0的slave接口

    nmcli connection add type ethernet ifname eth0 master bond0
    nmcli connection add type ethernet ifname eth1 master bond0
  4. 启动bond-master会话

    nmcli connection up bond-master
  5. 查看连接状态

    [root@bondingtest ~]# nmcli connection 
    NAME             UUID                                  TYPE      DEVICE
    bond-master      6824f480-d0c0-451d-9e53-1a6dd0eaaa33  bond      bond0 
    bond-slave-eth0  924fe1f0-5e8d-4fd7-9eda-e271b7e6a44e  ethernet  eth0  
    bond-slave-eth1  ffe44716-7cc2-4768-8271-ee07295b7303  ethernet  eth1

    看到connection都起来了,说明bonding正在工作,此时可以使用iperf3和ping命令来测试网络连通性。
    经测试,随机断开其中一张网卡的连接,流量会自动切换到另一张网卡上,连接会断开几百毫秒到一秒多。


另外在虚拟环境下测试了一下balance-rr模式,两张网卡都限制1G的带宽,经过bonding叠加的速度在1.2-1.9Gbps左右,不太稳定,猜测是两张网卡的MAC地址不一致导致的,可能还是需要交换机支持才能更好地实现带宽叠加。

[root@bondingtest ~]# iperf3 -c 192.168.1.237 -R -t 600
Connecting to host 192.168.1.237, port 5201
Reverse mode, remote host 192.168.1.237 is sending
[  4] local 192.168.1.3 port 57176 connected to 192.168.1.237 port 5201
[ ID] Interval           Transfer     Bandwidth
[  4]   0.00-1.00   sec   175 MBytes  1.46 Gbits/sec                  
[  4]   1.00-2.00   sec   153 MBytes  1.28 Gbits/sec                  
[  4]   2.00-3.00   sec   143 MBytes  1.20 Gbits/sec                  
[  4]   3.00-4.00   sec   131 MBytes  1.10 Gbits/sec                  
[  4]   4.00-5.00   sec   157 MBytes  1.32 Gbits/sec                  
[  4]   5.00-6.00   sec   171 MBytes  1.44 Gbits/sec                  
[  4]   6.00-7.00   sec   168 MBytes  1.41 Gbits/sec                  
[  4]   7.00-8.00   sec   207 MBytes  1.74 Gbits/sec                  
[  4]   8.00-9.00   sec   205 MBytes  1.72 Gbits/sec                  
[  4]   9.00-10.00  sec   232 MBytes  1.94 Gbits/sec                  
[  4]  10.00-11.00  sec   196 MBytes  1.64 Gbits/sec                  
[  4]  11.00-12.00  sec   207 MBytes  1.74 Gbits/sec                  
[  4]  12.00-13.00  sec   202 MBytes  1.69 Gbits/sec                  
[  4]  13.00-14.00  sec   161 MBytes  1.35 Gbits/sec                  
[  4]  14.00-15.00  sec   194 MBytes  1.63 Gbits/sec                  
[  4]  15.00-16.00  sec   162 MBytes  1.36 Gbits/sec                  
[  4]  16.00-17.00  sec   187 MBytes  1.57 Gbits/sec                  
[  4]  17.00-18.00  sec   200 MBytes  1.68 Gbits/sec                  
[  4]  18.00-19.00  sec   200 MBytes  1.68 Gbits/sec 

相关链接

  • RHEL7 Networking文档: RHEL
  • Linux Ethernet Bonding Driver HOWTO: Kernel
Theme Jasmine by Kent Liao