Linux Bonding
https://www.cnblogs.com/huangweimin/articles/6527058.html
linux下网卡bonding配置
章节
- bonding技术
- centos7配置bonding
- centos6配置bonding
一、bonding技术
bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量、实现网络冗余、负载等功能,有很多优势。
bonding技术是linux系统内核层面实现的,它是一个内核模块(驱动)。使用它需要系统有这个模块, 我们可以modinfo命令查看下这个模块的信息, 一般来说都支持.
modinfo bonding
bonding的七种工作模式:
bonding技术提供了七种工作模式,在使用的时候需要指定一种,每种有各自的优缺点.
- balance-rr (mode=0) 默认, 有高可用 (容错) 和负载均衡的功能, 需要交换机的配置,每块网卡轮询发包 (流量分发比较均衡).
- active-backup (mode=1) 只有高可用 (容错) 功能, 不需要交换机配置, 这种模式只有一块网卡工作, 对外只有一个mac地址。缺点是端口利用率比较低
- balance-xor (mode=2) 不常用
- broadcast (mode=3) 不常用
- 802.3ad (mode=4) IEEE 802.3ad 动态链路聚合,需要交换机配置,没用过
- balance-tlb (mode=5) 不常用
- 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地址

ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet6 fe80::862b:2bff:fe6a:76d4 prefixlen 64 scopeid 0x20<link>
ether 84:2b:2b:6a:76:d4 txqueuelen 0 (Ethernet)
RX packets 147436 bytes 14519215 (13.8 MiB)
RX errors 0 dropped 70285 overruns 0 frame 0
TX packets 10344 bytes 970333 (947.5 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 63702 bytes 6302768 (6.0 MiB)
RX errors 0 dropped 64285 overruns 0 frame 0
TX packets 344 bytes 35116 (34.2 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:d4 txqueuelen 1000 (Ethernet)
RX packets 65658 bytes 6508173 (6.2 MiB)
RX errors 0 dropped 6001 overruns 0 frame 0
TX packets 1708 bytes 187627 (183.2 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 31 bytes 3126 (3.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 31 bytes 3126 (3.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

进行高可用测试,拔掉其中的一条网线看丢包和延时情况, 然后在插回网线(模拟故障恢复),再看丢包和延时的情况.
一些参考:
http://www.tuicool.com/articles/b6ZVNr
http://www.cnblogs.com/dkblog/p/3613407.html (bound的七种模式)
Linux Bonding的更多相关文章
- Linux下双网卡绑定(bonding技术)
Linux网卡绑定探析 2013-08-20 15:39:31 现在很多服务器都自带双千兆网口,利用网卡绑定既能增加网络带宽,同时又能做相应的冗余,目前应用于很多的场景.linux操作系统下自带的 ...
- Configure network bonding on RHEL (Red Hat Enterprise Linux)
Question: Recently I have to use the RHEL and need to config the network with a few NICs. Here comes ...
- [转载]Linux Bond的原理及其不足
本文转自http://www.yunweipai.com/archives/1969.html 支持原创.尊重原创,分享知识! 在企业及电信Linux服务器环境上,网络配置都会使用Bonding技术做 ...
- Linux Bond的原理及其不足
http://www.tektea.com/archives/1969.html. 在企业及电信Linux服务器环境上,网络配置都会使用Bonding技术做网口硬件层面的冗余,防止单个网口应用的单点故 ...
- (转)深度分析Linux下双网卡绑定七种模式
现在一般的企业都会 使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在 网卡产商也会出一些针对window ...
- 高可用与负载均衡(1)之linux系统的数据链路层负载均衡
preface 在蓝厂就职到时候,每台缓存服务器都能够跑到2G的流量,这么大的流量,有人会问,服务器是不是安装的万兆网卡,no no no,仅仅是3张千兆网卡绑定在一块.万兆网卡的服务器少见,大多数都 ...
- 专题:Channel Bonding/bonding
EtherChannel最初是由cisco提出,通过聚合多条物理链路为单条逻辑链路,从而实现高可用及提高吞吐量等目的.AgP(Port Aggregation Protocol,Cisco专有协议). ...
- 深度分析Linux下双网卡绑定七种模式
现在一般的企业都会使用双网卡接入,这样既能添加网络带宽,同时又能做相应的冗余,可以说是好处多多.而一般企业都会使用linux操作系统下自带的网卡绑定模式,当然现在网卡产商也会出一些针对windows操 ...
- Linux 双网卡绑定技术
bond技术是在linux2.4以后加入内核. 一般步骤是1.把bonding模块加入内核, 2 编辑要绑定的网卡设置,去除地址设定 3 添加bond设备,设置地址等配置 4 重启网络 5 在交换机 ...
随机推荐
- 华为模拟器eNSP基本命令
华为模拟器eNSP常用命令 本文转自:https://blog.csdn.net/Key_book/article/details/80542264 路由器命令行常用命令: 1. system-vie ...
- 通过案例来剖析JQuery与原生JS
首先来个例子: 我们在登陆或者注册一些网站时,如果某一项点过了但没填,鼠标移走后是不是经常看到网站有相应的红色字体提示呢? 那下面我们就以这个为例来剖析下jQuery和原生JS的一些区别,来上代码: ...
- python多进程单线程+协程实现高并发
并发:看起来像同时运行就是并发 并行:同一时间同时被执行叫做并行,最大并行数就是CPU核数 协程不是实实在在存在的物理基础和操作系统运行逻辑,只是程序员从代码层面避开了系统对遇到IO的程序会切走CPU ...
- C# PC版微信消息监听自动回复
最近有个微商客户需要搞个 个人微信监听群消息关键字并实现自动回复功能, 因为他有很多群 很多买家咨询的话 一个个回复太麻烦, 客户要求 比如群里有人发 关键字 产品1 则自动回复产品1的相关描述 ...
- awk 打印从某一列到最后一列的内容
数据内容来源于 linux history的命令输出 awk命令 history|awk -F " " '{for (i=2;i<=NF;i++)printf(" ...
- 状压DP--Rotate Columns (hard version)-- Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)
题意:https://codeforc.es/problemset/problem/1209/E2 给你一个n(1-12)行m(1-2000)列的矩阵,每一列都可以上下循环移动(类似密码锁). 问你移 ...
- # [洛谷1337] 吊打XXX/平衡点 (模拟退火)
[洛谷1337] 吊打XXX/平衡点 (模拟退火) 题意 n个重物(x,y,w),求平衡时x的位置(x,y) 分析 模拟退火基础题,基于随机数的优化算法,时间复杂度玄学,参数玄学,能不能AC看脸,当然 ...
- docker-Overlay原生网络
节点1/键值存储:192.168.50.130 :192.168.50.131 1.下载Consul二进制包并启动 wget https://releases.hashicorp.com/consul ...
- 推荐系统遇上深度学习(十)--GBDT+LR融合方案实战
推荐系统遇上深度学习(十)--GBDT+LR融合方案实战 0.8012018.05.19 16:17:18字数 2068阅读 22568 推荐系统遇上深度学习系列:推荐系统遇上深度学习(一)--FM模 ...
- eclipse 创建Java web项目 Cannot change version of project facet Dynamic web module to xxx
问题描述: 用Eclipse创建Java web项目时选择的Artifact Id为maven-artchetype-webapp,由于这个archetype比较老,用的servlet还是2.3的. ...