一、简介
网卡绑定(NIC bonding)或称为网卡聚合,是一种将多个物理网络接口组合成一个逻辑接口的技术,以实现冗余、增加带宽或负载均衡。当使用绑定模式时,通常会创建一个虚拟的网络接口,例如bond0
,这个接口代表了绑定在一起的所有物理网卡。 实现原理: 网卡绑定是通过内核模块bonding
来实现的。当两个或更多个物理网络接口被绑定到一起时,它们将共同作为一个单一的网络接口出现,这个接口可以是bond0
、bond1
等等,具体取决于系统的配置。
二、配置模块
1.配置系统加载bond模块
#检查系统是否加载
lsmod | grep bonding
#如果没有输出,说明bonding模块尚未加载。你可以手动加载
sudo modprobe bonding
#设置开机自动加载bonding模块
echo "bonding" | sudo tee -a /etc/modules-load.d/bonding.conf
2.创建绑定接口
使用ifup
命令或通过修改/etc/sysconfig/network-scripts/ifcfg-bond0
文件来创建绑定接口
vim /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
NAME=bond0
TYPE=Bond
ONBOOT=yes
BOOTPROTO=static
IPADDR=<IP address>
PREFIX=<CIDR prefix>
#其中`BONDING_OPTS`指定了绑定模式和监控间隔
BONDING_OPTS="mode=<mode> miimon=<interval>"
3.配置物理网卡
将物理网卡关联到绑定接口。物理网卡的配置文件(如ifcfg-eth0
)应该指向bond0
,并将其设置为SLAVE
类型
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
NAME="eth0"
ONBOOT="yes"
TYPE="Ethernet"
MASTER="bond0"
SLAVE="yes"
三、绑定模式详解
(1)Balance-RR (mode 0):轮询模式,数据包会被轮流发送到每个网卡。
-
描述:在这种模式下,数据包会轮流发送到每个网卡。这意味着第一个数据包会通过第一个网卡发送,第二个数据包通过第二个网卡发送,依此类推。
-
示例:在一个Web服务器集群中,为了平均分配网络流量,管理员可能会选择这种模式,以确保每个网卡都能均匀地处理网络请求。
(2)Active-Backup (mode 1):活动备份模式,只有一个网卡处于活跃状态,另一个作为备份。当主网卡故障时,备份网卡会接管流量。
-
描述:此模式下,只有一个网卡处于活跃状态,负责所有网络通信。其他网卡作为备用,在主网卡发生故障时自动接管。
-
示例:在关键的数据库服务器上,为了保证高可用性,管理员会选择此模式,这样如果主网卡失效,备用网卡可以立即接替工作,避免服务中断。
(3)Balance-XOR (mode 2):异或平衡模式,使用L2 MAC地址和传输的散列值决定哪个网卡发送数据包。
-
描述:该模式使用L2 MAC地址和传输的散列值来决定哪个网卡发送数据包。这有助于在多路径环境中实现负载均衡。
-
示例:在大型数据中心中,管理员可能使用这种模式来平衡多台服务器之间的网络负载,确保网络流量根据MAC地址和传输散列均匀分布。
(4)Broadcast (mode 3):广播模式,所有网卡都接收所有数据包,主要用于特殊应用。
-
描述:在这种模式下,所有网卡都会接收到所有数据包。虽然不是用于负载均衡,但在某些需要所有网卡同时接收数据的特殊应用中很有用。
-
示例:在需要监听所有网络通信的安全审计系统中,可能会启用广播模式,以便捕获所有进出的数据包进行分析。
(5)802.3ad (mode 4):基于IEEE标准的动态链路聚合,支持LACP协议。
-
描述:此模式遵循IEEE 802.3ad标准,支持LACP(Link Aggregation Control Protocol)。它能自动检测并聚合网络链路,提高带宽和冗余。
-
示例:在高性能计算集群中,管理员可能使用此模式来聚合多条链路,以实现更高的带宽和容错能力。
(6)Balance-TLB (mode 5):自适应传输负载平衡,适合于非交换网络环境。
-
描述:这种模式适用于非交换网络环境,它能够根据当前网络负载动态调整数据包的分配。
-
示例:在没有交换机的简单网络拓扑中,管理员可能会使用此模式,以优化不同网卡之间的负载。
(7)Balance-ALB (mode 6):自适应负载平衡,结合了5号模式和IPv4流量的负载平衡。
-
描述:该模式结合了TLB模式和IPv4流量的负载平衡,能够智能地根据网络状况和流量类型进行负载分配。
-
示例:在企业级服务器中,为了最大化网络效率和带宽利用,管理员可能会启用这种模式,它能够根据IPv4流量特性智能地平衡网络负载。
四、监控维护
#查看bond0的当前状态和统计信息
cat /proc/net/bonding/bond0
五、示例
cat ifcfg-bond0
DEVICE=bond0
BOOTPROTO=static
TYPE="Ethernet"
IPADDR=10.88.71.130
NETMASK=255.255.255.192
ONBOOT=yes
USERCTL=no
PEERDNS=no
BONDING_OPTS="miimon=100 mode=4 xmit_hash_policy=layer3+4"
cat ifcfg-eth0
DEVICE=eth0
TYPE="Ethernet"
HWADDR=E8:78:EE:38:19:36
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
PEERDNS=no
RX_MAX=`ethtool -g "$DEVICE" | grep 'Pre-set' -A1 | awk '/RX/{print $2}'`
RX_CURRENT=`ethtool -g "$DEVICE" | grep "Current" -A1 | awk '/RX/{print $2}'`
[[ "$RX_CURRENT" -lt "$RX_MAX" ]] && ethtool -G "$DEVICE" rx "$RX_MAX"
cat ifcfg-eth1
DEVICE=eth1
TYPE="Ethernet"
HWADDR=E8:78:EE:38:19:38
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
PEERDNS=no
RX_MAX=`ethtool -g "$DEVICE" | grep 'Pre-set' -A1 | awk '/RX/{print $2}'`
RX_CURRENT=`ethtool -g "$DEVICE" | grep "Current" -A1 | awk '/RX/{print $2}'`
[[ "$RX_CURRENT" -lt "$RX_MAX" ]] && ethtool -G "$DEVICE" rx "$RX_MAX"