linux如何配置bond?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux如何配置bond?相关的知识,希望对你有一定的参考价值。

1、编辑虚拟网络接口配置文件,指定网卡IP:
#
vi
/etc/sysconfig/network-scripts/ifcfg-bond0
或者下面命令#
cp
/etc/sysconfig/network-scripts/ifcfg-eth0
ifcfg-bond0
2、#vi
ifcfg-bond0
将第一行改成
DEVICE=bond0:#
cat
ifcfg-bond0
DEVICE=bond0ONBOOT=yesBOOTPROTO=staticIPADDR=192.168.61.72NETMASK=255.255.255.240#BROADCAST=192.168.61.79#GATEWAY=192.168.61.77这里要注意,不要指定单个网卡的IP
地址、子网掩码或网卡
ID。将上述信息指定到虚拟适配器(bonding)中即可。#
cat
ifcfg-eth0
DEVICE=eth0BOOTPROTO=noneONBOOT=yesHWADDR=00:15:17:CC:FC:35MASTER=bond0SLAVE=yes#
cat
ifcfg-eth1
DEVICE=eth1BOOTPROTO=noneONBOOT=yesHWADDR=00:15:17:CC:FC:34MASTER=bond0SLAVE=yes
3、
#
vi
/etc/modules.conf
编辑
/etc/modprobe.conf或者/etc/modules.conf文件,加入如下两行内容,以使系统在启动时加载bonding模块,对外虚拟网络接口设备为
bond0.加入下列两行:alias
bond0
bondingoptions
bond0
miimon=100
mode=1说明:miimon是用来进行链路监测的。
比如:miimon=100,那么系统每100ms监测一次路连接状态,如果有一条线路不通就转入另一条线路;mode的值表示工作模式,他共有0,1,2,3四种模式,常用的为0,1两种。mode=0表示load
balancing
(round-robin)为负载均衡方式,两块网卡都工作。mode=1表示fault-tolerance
(active-backup)提供冗余功能,工作方式是主备的工作方式,也就是说默认情况下只有一块网卡作,另一块做备份.
bonding只能提供链路监测,即从主机到交换机的链路是否接通。如果只是交换机对外的链路down掉了,而交换机本身并没有故障,那么bonding会认为链路没有问题而继续使用
4、 #
vi
/etc/rc.d/rc.local
加入两行,加在启动自运行文件里面
ifenslave
bond0
eth0
eth1route
add
-net
172.31.3.254
netmask
255.255.255.0
bond0 #如果需要的话加路由,不需要不用加
到这时已经配置完毕重新启动机器.
重启会看见以下信息就表示配置成功了
Bringing
up
interface
bond0
OKBringing
up
interface
eth0
OKBringing
up
interface
eth1
OK
参考技术A bonding就是把多块网卡绑定一个IP地址的方法,需要在网卡的配置文件目录下(/etc/sysconfig/network-scritps/),新建一个ifcfg-bond*
,有几个网段做BOND就有几个ifcfg-bond*配置文件
比如对eth0与eth1做绑定
ifcfg-bond*这个配置文件里有内容很简单
echo"DEVICE=bond*
<-具体情况具体写 ONBOOT=yes BOOTPROTO=static IPADDR=*.*.*.*
<-这个是IP地址 NETMASK=255.255.255.0
"
>>/etc/sysconfig/network-scripts/ifcfg-bond*
<-子网掩码

然后对ifcfg-eth0
ifcfg-eth1进行相关的配置
只要写入eth0与eth1的MAC做为关键字,如下
ifcfg-eth0的内容参照:
echo
"DEVICE=eth0 BOOTPROTO=none ONBOOT=yes HWADDR=*:*:*:*:*:*
<-这个根据eth0的mac来写
,一般会在/etc/sysconfig/hwconfig里有 MASTER=bond*
<-
具体情况具体写 SLAVE=yes
">>/etc/sysconfig/network-scripts/ifcfg-eth*
ifcfg-eth1的内容与ifcfg-eth0大同小异,就是mac地址不同而已
然后再加两条语句到/etc/modprobe.conf里
echo"alias
bond0
bonding
options
bond0
miimon=100
max_bonds=3 mode=1
<-其中max_bonds这个参数的数字根据你的需求来定">>/etc/modprobe.conf
然后service
network
restart
就可以看到bonding的效果了
cat
/proc/net/bonding/bond*
就可以知道当前bonding的运行状态,哪块网卡为主,哪块网卡为辅.本回答被提问者采纳

linux下网卡bonding配置

linux下网卡bonding配置

 

章节

  1. bonding技术
  2. centos7配置bonding
  3. centos6配置bonding

 

一、bonding技术

bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载等功能,有很多优势。

bonding技术是linux系统内核层面实现的,它是一个内核模块(驱动)。使用它需要系统有这个模块, 我们可以modinfo命令查看下这个模块的信息, 一般来说都支持.

 modinfo bonding

bonding的七种工作模式: 

bonding技术提供了七种工作模式,在使用的时候需要指定一种,每种有各自的优缺点.

  1. balance-rr (mode=0)       默认, 有高可用 (容错) 和负载均衡的功能,  需要交换机的配置,每块网卡轮询发包 (流量分发比较均衡).
  2. active-backup (mode=1)  只有高可用 (容错) 功能, 不需要交换机配置, 这种模式只有一块网卡工作, 对外只有一个mac地址。缺点是端口利用率比较低
  3. balance-xor (mode=2)     不常用
  4. broadcast (mode=3)        不常用
  5. 802.3ad (mode=4)          IEEE 802.3ad 动态链路聚合,需要交换机配置,没用过
  6. balance-tlb (mode=5)      不常用
  7. balance-alb (mode=6)     有高可用 ( 容错 )和负载均衡的功能,不需要交换机配置  (流量分发到每个接口不是特别均衡)

具体的网上有很多资料,了解每种模式的特点根据自己的选择就行, 一般会用到0、1、4、6这几种模式。

二、Centos7配置bonding

环境:

系统: Centos7
网卡: em1、em2
bond0:172.16.0.183
负载模式: mode6(adaptive load balancing

服务器上两张物理网卡em1和em2, 通过绑定成一个逻辑网卡bond0,bonding模式选择mode6

注: ip地址配置在bond0上, 物理网卡不需要配置ip地址.

1、关闭和停止NetworkManager服务

systemctl stop NetworkManager.service     # 停止NetworkManager服务
systemctl disable NetworkManager.service  # 禁止开机启动NetworkManager服务

ps: 一定要关闭,不关会对做bonding有干扰

2、加载bonding模块

modprobe --first-time bonding

没有提示说明加载成功, 如果出现modprobe: ERROR: could not insert \'bonding\': Module already in kernel说明你已经加载了这个模块, 就不用管了

你也可以使用lsmod | grep bonding查看模块是否被加载

lsmod | grep bonding
bonding               136705  0 

3、创建基于bond0接口的配置文件

1
vim /etc/sysconfig/network-scripts/ifcfg-bond0

修改成如下,根据你的情况:

复制代码
DEVICE=bond0
TYPE=Bond
IPADDR=172.16.0.183
NETMASK=255.255.255.0
GATEWAY=172.16.0.1
DNS1=114.114.114.114
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=6 miimon=100"
复制代码

上面的BONDING_OPTS="mode=6 miimon=100" 表示这里配置的工作模式是mode6(adaptive load balancing), miimon表示监视网络链接的频度 (毫秒), 我们设置的是100毫秒, 根据你的需求也可以指定mode成其它的负载模式。

4、修改em1接口的配置文件

vim /etc/sysconfig/network-scripts/ifcfg-em1

修改成如下:

复制代码
DEVICE=em1
USERCTL=no
ONBOOT=yes
MASTER=bond0                  # 需要和上面的ifcfg-bond0配置文件中的DEVICE的值对应
SLAVE=yes
BOOTPROTO=none
复制代码

5、修改em2接口的配置文件

vim /etc/sysconfig/network-scripts/ifcfg-em2

修改成如下:

复制代码
DEVICE=em2
USERCTL=no
ONBOOT=yes
MASTER=bond0                 # 需要和上的ifcfg-bond0配置文件中的DEVICE的值对应
SLAVE=yes
BOOTPROTO=none
复制代码

6、测试

重启网络服务

systemctl restart network

查看bond0的接口状态信息  ( 如果报错说明没做成功,很有可能是bond0接口没起来)

复制代码
# cat /proc/net/bonding/bond0

Bonding Mode: adaptive load balancing   // 绑定模式: 当前是ald模式(mode 6), 也就是高可用和负载均衡模式
Primary Slave: None
Currently Active Slave: em1
MII Status: up                           // 接口状态: up(MII是Media Independent Interface简称, 接口的意思)
MII Polling Interval (ms): 100           // 接口轮询的时间隔(这里是100ms)
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: em1                     // 备接口: em0
MII Status: up                           // 接口状态: up(MII是Media Independent Interface简称, 接口的意思)
Speed: 1000 Mbps                         // 端口的速率是1000 Mpbs
Duplex: full                             // 全双工
Link Failure Count: 0                    // 链接失败次数: 0 
Permanent HW addr: 84:2b:2b:6a:76:d4      // 永久的MAC地址
Slave queue ID: 0

Slave Interface: em1                     // 备接口: em1
MII Status: up                           // 接口状态: up(MII是Media Independent Interface简称, 接口的意思)
Speed: 1000 Mbps
Duplex: full                             // 全双工
Link Failure Count: 0                    // 链接失败次数: 0
Permanent HW addr: 84:2b:2b:6a:76:d5     // 永久的MAC地址
Slave queue ID: 0
复制代码

通过ifconfig命令查看下网络的接口信息

复制代码
# ifconfig

bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 172.16.0.183  netmask 255.255.255.0  broadcast 172.16.0.255
        inet6 fe80::862b:2bff:fe6a:76d4  prefixlen 64  scopeid 0x20<link>
        ether 84:2b:2b:6a:76:d4  txqueuelen 0  (Ethernet)
        RX packets 11183  bytes 1050708 (1.0 MiB)
        RX errors 0  dropped 5152  overruns 0  frame 0
        TX packets 5329  bytes 452979 (442.3 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

em1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 84:2b:2b:6a:76:d4  txqueuelen 1000  (Ethernet)
        RX packets 3505  bytes 335210 (327.3 KiB)
        RX errors 0  dropped 1  overruns 0  frame 0
        TX packets 2852  bytes 259910 (253.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

em2: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 84:2b:2b:6a:76:d5  txqueuelen 1000  (Ethernet)
        RX packets 5356  bytes 495583 (483.9 KiB)
        RX errors 0  dropped 4390  overruns 0  frame 0
        TX packets 1546  bytes 110385 (107.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 17  bytes 2196 (2.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17  bytes 2196 (2.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
复制代码

测试网络高可用, 我们拔掉其中一根网线进行测试, 结论是:

  • 在本次mode=6模式下丢包1个, 恢复网络时( 网络插回去 ) 丢包在5-6个左右,说明高可用功能正常但恢复的时候丢包会比较多
  • 测试mode=1模式下丢包1个,恢复网络时( 网线插回去 ) 基本上没有丢包,说明高可用功能和恢复的时候都正常
  • mode6这种负载模式除了故障恢复的时候有丢包之外其它都挺好的,如果能够忽略这点的话可以这种模式;而mode1故障的切换和恢复都很快,基本没丢包和延时。但端口利用率比较低,因为这种主备的模式只有一张网卡在工作.

三、Centos6配置bonding

Centos6配置bonding和上面的Cetons7做bonding基本一样,只是配置有些不同. 

系统: Centos6
网卡: em1、em2
bond0:172.16.0.183
负载模式: mode1(adaptive load balancing)  # 这里的负载模式为1,也就是主备模式.

1、关闭和停止NetworkManager服务

service  NetworkManager stop
chkconfig NetworkManager off

ps: 如果有装的话关闭它,如果报错说明没有装这个,那就不用管

2、加载bonding模块

modprobe --first-time bonding

3、创建基于bond0接口的配置文件

vim /etc/sysconfig/network-scripts/ifcfg-bond0

修改如下 (根据你的需要):

复制代码
DEVICE=bond0
TYPE=Bond
BOOTPROTO=none
ONBOOT=yes
IPADDR=172.16.0.183
NETMASK=255.255.255.0
GATEWAY=172.16.0.1
DNS1=114.114.114.114
USERCTL=no
BONDING_OPTS="mode=6 miimon=100"
复制代码

4、加载bond0接口到内核

vi /etc/modprobe.d/bonding.conf

修改成如下:

alias bond0 bonding

5、编辑em1、em2的接口文件

vim /etc/sysconfig/network-scripts/ifcfg-em1

修改成如下:

复制代码
DEVICE=em1
MASTER=bond0
SLAVE=yes
USERCTL=no
ONBOOT=yes
BOOTPROTO=none
复制代码
vim /etc/sysconfig/network-scripts/ifcfg-em2

修改成如下:

复制代码
DEVICE=em2
MASTER=bond0
SLAVE=yes
USERCTL=no
ONBOOT=yes
BOOTPROTO=none
复制代码

6、加载模块、重启网络与测试

modprobe bonding
service network restart

查看bondo接口的状态

复制代码
cat /proc/net/bonding/bond0
Bonding Mode: fault-tolerance (active-backup)  # bond0接口当前的负载模式是主备模式
Primary Slave: None
Currently Active Slave: em2
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: em1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 2
Permanent HW addr: 84:2b:2b:6a:76:d4
Slave queue ID: 0

Slave Interface: em2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 84:2b:2b:6a:76:d5
Slave queue ID: 0
复制代码

通过ifconfig命令查看下接口的状态,你会发现mode=1模式下所有的mac地址都是一致的,说明对外逻辑就是一个mac地址