手上有一台双网卡的机器,一直只插其中一个网口,有点浪费,打算配置链路聚合Bonding来把另一块网卡利用上,搜了下网上的教程,CentOS下都是让关掉NetworkManager然后手动配置的,NM这玩意我挺喜欢,自然是不会关的,本身NM也支持管理Bonding,记一下利用NM来创建Bonding的过程。
Bonding的模式
当前内核Bonding模块共支持7种模式,如下表:
名称 | 编号 | 描述 |
---|---|---|
balance-rr | 0 | 轮询每个slave接口 |
active-backup | 1 | 主备模式,只激活一个slave接口,故障时切换其他接口 |
balance-xor | 2 | 根据选定的哈希策略,在不同的接口分发数据包 |
broadcast | 3 | 在所有slave接口上发送同样的数据包 |
802.3ad | 4 | 参考IEEE 802.3ad规范 |
balance-tlb | 5 | 比较复杂,用不上,就不写了 |
balance-alb | 6 | 比较复杂,用不上,就不写了 |
因为内网带宽都是千兆,做负载均衡没有什么意义,内网的交换机都是消费级的,VLAN都不支持,更不要说支持链路聚合了,所以选择active-backup模式做个冗余,把空闲的网卡做备份了。
操作过程
检查内核模块bonding是否加载(NM管理不需要做这一步,会自动加载)
lsmod | grep bonding
如果没有输出模块信息,则说明模块未加载,执行以下命令加载模块
modprobe --first-time bonding
将bonding模块设置为开机自动加载
echo bonding > /etc/modules-load.d/bonding.conf
创建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掉线断网
将接口划分为bond0的slave接口
nmcli connection add type ethernet ifname eth0 master bond0 nmcli connection add type ethernet ifname eth1 master bond0
启动bond-master会话
nmcli connection up bond-master
查看连接状态
[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