Linux 下的 bonding 技术,将多块网卡接口通过绑定虚拟成为一块网卡,在用户看来这个聚合起来的设备好像是一个单独的以太网接口设备,或者说就是多块网卡具有相同的 IP 地址而并行连接聚合成一个逻辑链路工作。
Bonding 技术用于高可靠性,提供最大网络可靠性的配置,通过在主机和其他设备间的冗余或备份设备、链路或交换机,目标是提供最大的网络链接可靠性(要求网络一直可用)。
以每个节点上面有四个网卡接口 (eth10,eth11,eth12,eth13) 为例,它们可被虚拟成两个绑定设备:bond0 和 bond1。bond0 为外部网卡 , 被绑定的网卡接口(也称为 slave 设备)是 eth10 和 eth12;bond1 为内部网卡,被绑定的网卡接口是 eth11 和 eth13。其中 bond0 用于外部通信,bond1 用于节点之间通信。其网络结构如图所示:

图 1. 网络结构图
图
绑定配置
绑定设备 bond0 和 bond1 分别对应配置信息文件 /proc/net/bonding/bond0 和 /proc/net/bonding/bond1。以 /proc/net/bonding/bond0 为例,其内容如下:

其中,包含 bonding 设备和 slave 设备的配置信息。Bonding Mode 是绑定的策略或模式,可用于优化可靠性的绑定模式有 fault-tolerance( 或者称为 active-backup) 和 broadcast 模式,fault-tolerance 通常是推荐的模式,尤其是如果交换机间存在 ISL 并能一起很好的工作。如果一个交换机被配置为备份交换机 ( 比如,有更低的处理能力,更高的费用等等 ),则可以使用 primary 选项来保证期望的链路在它可用时总是用它。
Primary Slave 指定哪个 slave 成为主设备 (primary device),取值为字符串,如 eth0,eth1 等。只要指定的设备可用,它将一直是激活的 slave。只有在主设备(primary device)断线时才会切换设备。这在希望某个 slave 设备优先使用的情形下很有用,比如,某个 slave 设备有更高的吞吐率。
Currently Active Slave 为当前被激活的 slave 设备。bond0 设备有两个 slave 设备:eth10 和 eth12。当前被激活的 slave 设备是 eth10。
MII Status 为 MII 监控状态。MII 监控通过监控本地网络接口的载波状态来实现监控链路状态。可以通过 3 种方法之一来实现:通过依赖设备驱动来维护载波状态;通过查询设备的 MII 寄存器;或者通过给设备发送 ethtool 查询。
MII Polling Interval 指定 MII 链路监控频率,这将决定驱动检查每个 slave 链路状态频率,100 为初始参考值。
Up Delay 指定当发现一个链路恢复时,在激活该链路之前的等待时间。
Down Delay 指定一个时间,用于在发现链路故障后,等待一段时间然后禁止一个 slave 设备。
网络配置
网络配置可以通过 ifconfig 命令查看,Bonding 设备会被标上 MASTER 标记,slave 设备会被标上 SLAVE 标记。ifconfig 的输出不包含哪个 slave 设备关联于哪个 Bonding 设备的关系。

可以看到 bond0 接口是 master(MASTER),而 eth10 和 eth12 是 slave(SLAVE),所有 bond0 的 slave 和 bond0 有着同样的 MAC 地址 (00:21:5E:09:61:06)。Bond1 接口是 master(MASTER),而 eth11 和 eth13 是 slave(SLAVE),所有 bond1 的 slave 和 bond1 有着同样的 MAC 地址 (00:21:5E:09:61:04)。