Linux 绑定(bond或team)多个网口作为一个网口
将多个Linux网络端口绑定为一个,可以提升网络的性能,比如对于备份服务器,需要在一个晚上备份几个T的数据,如果使用单个的千兆网口将会是很严重的瓶颈。其它的应用,比如ftp服务器,高负载的下载网站, 都有类似的问题。因此使用Linux teaming或bond来绑定多个网卡作为一个逻辑网口,配置单个的IP地址,会大幅提升服务器的网络吞吐(I/O).
Linux的多网卡绑定功能使用的是内核中的”bonding”模块,关于此模块可以参考Linux Ethernet Bonding Driver文档, 但是目前发布各个Linux版本内核均已包含了此模块,大多数情况下不需要重新编译内核。 Linux 的 bonding 驱动提供了绑定/集成(bond)多个网卡为一个虚拟逻辑网口的功能。并请注意绑定的网口(bonded)有多种工作模式; 一般来说,分为 热后备(hot standby) 和 负载均衡(load balancing). 在Redhat/Fedora和其它类Redhat Linux中是比较容易配置的.
第一步: 创建 bond0 配置文件
Red Hat Linux的网络配置文件在目录: /etc/sysconfig/network-scripts/ . 首先,需要创建 bond0 配置文件:
[root@nixway.net etc]# vi /etc/sysconfig/network-scripts/ifcfg-bond0
如下参考配置:
DEVICE=bond0 --物理设备名字 IPADDR=192.168.1.20 --IP地址 NETWORK=192.168.1.0 --所属子网 NETMASK=255.255.255.0 --子网掩码 USERCTL=no --是否允许非root用户控制该设备 BOOTPROTO=none --一般是在做网卡绑定的时候用到,通常情况下就dhcp或者static
ONBOOT=yes --开机自动激活网卡
将如上的IP替换为实际的IP地址.
第二步: 修改 eth0 和 eth1 配置文件:
使用vi修改eth0和eth1的配置文件
[root@nixway.net etc]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
如下为参考配置
DEVICE=eth0 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none
修改eth1配置文件
[root@nixway.net etc]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
如下为参考配置
DEVICE=eth1 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none
保存退出.
第三步: 装载 bond 模块驱动
在使bond0网口能够工作之前,需要首先装载内核bond模块的驱动, 修改/etc/modprobe.conf:
[root@nixway.net etc]# vi /etc/modprobe.conf
将如下两行附加到文件末尾:
alias bond0 bonding options bond0 mode=balance-alb miimon=100
mode=balance-alb ---f负载均衡
miimon=100 ---用来进行链路监测的。
比如:miimon=100,那么系统每100ms监测一次链路连接状态,
如果有一条线路不通就转入另一条线路
保存退出vi编辑。
第四步: 测试配置
首先装载bonding模块
[root@nixway.net etc]# modprobe bonding
重启网络服务,确认bond0已经启动:
[root@nixway.net etc]# service network restart
确认设备已经正确加载:
[root@nixway.net etc]# less /proc/net/bonding/bond0
输出:
Bonding Mode: load balancing (round-robin) MII Status: up MII Polling Interval (ms): 0 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth0 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:0c:29:c6:be:59 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:0c:29:c6:be:63
列出所有网口:
[root@nixway.net etc]# ifconfig
输出:
bond0 Link encap:Ethernet HWaddr 00:0C:29:C6:BE:59 inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::200:ff:fe00:0/64 Scope:Link UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:2804 errors:0 dropped:0 overruns:0 frame:0 TX packets:1879 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:250825 (244.9 KiB) TX bytes:244683 (238.9 KiB) eth0 Link encap:Ethernet HWaddr 00:0C:29:C6:BE:59 inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fec6:be59/64 Scope:Link UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:2809 errors:0 dropped:0 overruns:0 frame:0 TX packets:1390 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:251161 (245.2 KiB) TX bytes:180289 (176.0 KiB) Interrupt:11 Base address:0x1400 eth1 Link encap:Ethernet HWaddr 00:0C:29:C6:BE:59 inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fec6:be59/64 Scope:Link UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:4 errors:0 dropped:0 overruns:0 frame:0 TX packets:502 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:258 (258.0 b) TX bytes:66516 (64.9 KiB) Interrupt:10 Base address:0x1480
如果已经输出类似上述的端口,说明你的bond已经成功了
