「Linux」- 配置 Bonding 聚合(Mode = 1)

  CREATED BY JENKINSBOT

解决方案

系统环境:Debian
网络绑定模式:Mode=1(active-backup)

安装ifenslave包

apt-get install ifenslave-2.6

加载内核的bonding模块

如果要使用网络绑定功能,内核需要加载bonding模块。执行命令:

# 加载 bonding 模块
# 在正常情况下,执行该命令是没有输出的;
# 如果输出 modprobe: ERROR: could not insert 'bonding': Module already in kernel 表示模块已加载;
modprobe --first-time bonding

# 持久化配置,即在重启主机时会自动加载bonding模块:
echo 'bonding' >> /etc/modules

创建网络绑定接口(bond0)

这一步配置bond0接口。需要编辑/etc/network/interface,该文件包含了系统连接的所有网络设备的网络接口的设置信息。创建bond0接口的配置如下:

# vim /etc/network/interface
# 系统启动时自动初始化bond0。由于暂时不需要自动启动,所以注释调了。
# auto bond0

# 定义bond0,并从DHCP获取IP地址
iface bond0 inet dhcp
      # 设置bond模式为1;
      bond-mode 1
      # 指定主网口;
      bond-primary wlan0
      # 声明所属bond的网口;
      bond-slaves wlan0 wlan1
      # 告诉内核每100毫秒检查一次链路状态
      bond-miimon 100
      # 关闭当前活跃网口前等待的时间;
      bond-downdelay 400
      # 使用新网口等待的时间;
      bond-updelay 800

# 注意事项:
# downdelay和updelay必须是miimon的倍数

启动bond0网口

首先,如果要启动bond0网口,记住一定要先down掉从网卡,在这个例子中我们要donw调wlan0、wlan1,命令如下:

ifconfig wlan0 down
ifconfig wlan1 down

# 如果你在/etc/network/interfaces中配置了wlan0与wlan1,那么可以使用ifdown命令:
ifdown wlan0
ifdown wlan1

然后,执行如下命令来启动bond0接口:

ifup bond0

如果没有什么问题,bond0接口会正常启动,接口wlan0、wlan1会被重新激活。

注意事项
1)不要执行ifconfig bond0 up来激活bond0接口,这与ifup bond0不同。
2)如果你远程注意执行这些命令,会断开当前连接(因为关闭网络了)。

确认当前网络状态

方法一:ifconfig

输出如下:

方法二:cat /proc/net/bonding/bond0

输出如下:

检测网卡绑定是否有效

目前,网卡的bond是已经做完了,但是是否能够进行切换,还需要进行验证。下面的两张图是分别执行ifconfig wlan0 down前后抓取的/proc/net/bond/bond0的内容:

至此,我们可以看到在执行ifconfig wlan0 down后,网卡自动切换到了wlan1。然后我们再执行ifconfig wlan1 up,再次cat /proc/net/bond/bond0,你会发现主网卡又切回了wlan0(这里不再截图演示了)。

可能出现的问题

#1 无法访问网络

现象:网络绑定是正常的,但是无法访问网络。
原因:在做网络绑定之前,我已经配置过wlan0、wlan1接口,导致路由表里由二者的配置,所以需要删除到wlan0及wlan1的路由配置。
解决:检查一下你的路由表吧。

参考文献

man 7 nmcli-examples / Example 7. Adding a team master and two slave connection profiles
What is Network Bonding? Types of Network Bonding
How to Configure Network (NIC) Bonding/Teaming on Debian Linux