Linux bonding(网卡绑定)

March 8, 2012 / bonding, Linux, network

介绍

Linux网卡绑定的实现就是使用多块网卡虚拟成为一块网卡,这个虚拟网卡看起来是一个单独的以太网接口设备,通俗点讲就是多块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路工作。这项技术在Sun和Cisco被称为Trunking和Etherchannel技术,在 Linux的2.4.x的内核中也采用这这种技术,被称为bonding。bonding技术的最早应用是在集群——beowulf上,为了提高集群节点间的数据传输而设计的。什么是bonding需要从网卡的混杂(promisc)模式说起,在正常情况下,网卡只接收目的硬件地址(MAC地址)是自身Mac地址的以太网帧,对于别的数据帧都滤掉,以减轻驱动程序的负担。但是网卡也支持另外一种被称为混杂promisc的模式,可以接收网络上所有的帧,比如说tcpdump,就是运行在这个模式下。bonding也运行在这个模式下,将接收到的数据帧传送给bond驱动程序处理。

配置

网卡绑定的配置见网络链路聚合测试

加载bonding模块

加载bonding模块有两种做法:

1. 在模块配置文件/etc/modprobe.conf中添加以下内容:

alias bond0 bonding
options bond0 miimon=100 mode=0

2. 在终端输入以下命令:

modprobe bonding miimon=100 mode=0

其中mode表示bonding的策略:

最常用的是前4种策略。

当mode=0, 2, 3, 4时,被绑定的网卡的MAC地址一样,需要在交换机配置链路聚合,否则可能会造成MAC地址表的动荡。

当mode=1, 5, 6时,网卡使用各自的MAC地址,因此不需要在交换机做任何配置。

bond管理

将eth0作为bond0的slave:

ifenslave bond0 eth0

将eth0从bond0分离:

ifenslave -d bond0 eth0

参考资料

  1. 双网卡绑定与端口聚合
  2. Bonding (Port Trunking)

后记

文中若有错误或疏漏之处,烦请批评指正。