目录: /proc/sys/net/ipv4/conf #查看网卡
watch -n 1 cat /proc/net/bonding/bond0 #监控 bond0 状态,
小注:vmare添加一块新的网络适配器之后查看新添加的网卡名称
基础环境配置
环境:Centos7
一.网卡bond的作用:
bond可读性解释:
将两张网卡绑定,共用一个IP,实现冗余效果。实际上linux双网卡的绑定模式有7中,而在这里常用的是
active-backup
linux有七种网卡绑定模式:0. round robin,1.active-backup,2.load balancing (xor), 3.fault-tolerance (broadcast), 4.lacp, 5.transmit load balancing, 6.adaptive load balancinglinux下网卡绑定的7种模式:
mode=0 表示 load balancing (round-robin)为负载均衡方式,两块网卡都工作。 mode=1 表示 fault-tolerance (active-backup)提供冗余功能,工作方式是主 从的工作方式,也就是说默认情况下只有一块网卡工作,另一块做备份。 mode=2 表示 XOR policy 为平衡策略。此模式提供负载平衡和容错能力 mode=3 表示 broadcast 为广播策略。此模式提供了容错能力 mode=4 表示 IEEE 802.3ad Dynamic link aggregation 为 IEEE 802.3ad 为 动态链接聚合。该策略可以通过 xmit_hash_policy 选项从缺省的 XOR 策略改变到其他策略。 mode=5 表示 Adaptive transmit load balancing 为适配器传输负载均衡。该 模式的必要条件:ethtool 支持获取每个 slave 的速率 mode=6 表示 Adaptive load balancing 为适配器适应性负载均衡。该模式包含 了 balance-tlb 模式,同时加上针对 IPV4 流量的接收负载均衡(receive load balance, rlb),而且不需要任何 switch(交换机)的支持。
一个设备如果只有一个网卡,那么当这个网卡损坏时,设备的网络就会瘫痪。绑定接口的作用就是让多个物理网卡服务于一个 IP 地址,使得这个网络的抵抗性强。一个设备只能有一个 bond 接口,配置好以后每个网卡需要一根网线,需要插两个网线,交换机也需要作链路聚合。bond介绍:1. 首先介绍下bond
Linux bonding 驱动提供了一个将多个物理网络端口捆绑为单个逻辑网络端口的方法,用于网络负载均衡、冗余和提升网络的性能 .我公司搭建的ftp服务需要高速下载,普通电脑网卡网口一般是千兆,配置一个万兆的网卡也需要支持万兆的网线,因此使用bond或Linux teaming来绑定多个网卡作为一个逻辑网口,配置单个的IP地址,会大幅提升服务器的网络吞吐(I/O)。
2 bond 模式
1、mode=0(balance-rr)(平衡抡循环策略)
链路负载均衡,增加带宽,支持容错,一条链路故障会自动切换正常链路。交换机需要配置聚合口,思科叫port channel。
特点:传输数据包顺序是依次传输(即:第1个包走eth0,下一个包就走eth1….一直循环下去,直到最后一个传输完毕),此模式提供负载平衡和容错能力;但是我们知道如果一个连接
或者会话的数据包从不同的接口发出的话,中途再经过不同的链路,在客户端很有可能会出现数据包无序到达的问题,而无序到达的数据包需要重新要求被发送,这样网络的吞吐量就会下降2、mode=1(active-backup)(主-备份策略)
这个是主备模式,只有一块网卡是active,另一块是备用的standby,所有流量都在active链路上处理,交换机配置的是捆绑的话将不能工作,因为交换机往两块网卡发包,有一半包是丢弃的。
特点:只有一个设备处于活动状态,当一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得,从外面看来,bond的MAC地址是唯一的,以避免switch(交换机)发生混乱。
此模式只提供了容错能力;由此可见此算法的优点是可以提供高网络连接的可用性,但是它的资源利用率较低,只有一个接口处于工作状态,在有 N 个网络接口的情况下,资源利用率为1/N3、mode=2(balance-xor)(平衡策略)
表示XOR Hash负载分担,和交换机的聚合强制不协商方式配合。(需要xmit_hash_policy,需要交换机配置port channel)
特点:基于指定的传输HASH策略传输数据包。缺省的策略是:(源MAC地址 XOR 目标MAC地址) % slave数量。其他的传输策略可以通过xmit_hash_policy选项指定,此模式提供负载平衡和容错能力4、mode=3(broadcast)(广播策略)
表示所有包从所有网络接口发出,这个不均衡,只有冗余机制,但过于浪费资源。此模式适用于金融行业,因为他们需要高可靠性的网络,不允许出现任何问题。需要和交换机的聚合强制不协商方式配合。
特点:在每个slave接口上传输每个数据包,此模式提供了容错能力5、mode=4(802.3ad)(IEEE 802.3ad 动态链接聚合)
表示支持802.3ad协议,和交换机的聚合LACP方式配合(需要xmit_hash_policy).标准要求所有设备在聚合操作时,要在同样的速率和双工模式,而且,和除了balance-rr模式外的其它bonding负载均衡模式一样,任何连接都不能使用多于一个接口的带宽。
特点:创建一个聚合组,它们共享同样的速率和双工设定。根据802.3ad规范将多个slave工作在同一个激活的聚合体下。
外出流量的slave选举是基于传输hash策略,该策略可以通过xmit_hash_policy选项从缺省的XOR策略改变到其他策略。需要注意的 是,并不是所有的传输策略都是802.3ad适应的,
尤其考虑到在802.3ad标准43.2.4章节提及的包乱序问题。不同的实现可能会有不同的适应 性。
必要条件:
条件1:ethtool支持获取每个slave的速率和双工设定
条件2:switch(交换机)支持IEEE 802.3ad Dynamic link aggregation
条件3:大多数switch(交换机)需要经过特定配置才能支持802.3ad模式6、mode=5(balance-tlb)(适配器传输负载均衡)
是根据每个slave的负载情况选择slave进行发送,接收时使用当前轮到的slave。该模式要求slave接口的网络设备驱动有某种ethtool支持;而且ARP监控不可用。
特点:不需要任何特别的switch(交换机)支持的通道bonding。在每个slave上根据当前的负载(根据速度计算)分配外出流量。如果正在接受数据的slave出故障了,另一个slave接管失败的slave的MAC地址。
必要条件:
ethtool支持获取每个slave的速率7、mode=6(balance-alb)(适配器适应性负载均衡)
在5的tlb基础上增加了rlb(接收负载均衡receive load balance).不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的.
特点:该模式包含了balance-tlb模式,同时加上针对IPV4流量的接收负载均衡(receive load balance, rlb),而且不需要任何switch(交换机)的支持。接收负载均衡是通过ARP协商实现的。bonding驱动截获本机发送的ARP应答,并把源硬件地址改写为bond中某个slave的唯一硬件地址,从而使得不同的对端使用不同的硬件地址进行通信。
来自服务器端的接收流量也会被均衡。当本机发送ARP请求时,bonding驱动把对端的IP信息从ARP包中复制并保存下来。当ARP应答从对端到达 时,bonding驱动把它的硬件地址提取出来,并发起一个ARP应答给bond中的某个slave。
使用ARP协商进行负载均衡的一个问题是:每次广播 ARP请求时都会使用bond的硬件地址,因此对端学习到这个硬件地址后,接收流量将会全部流向当前的slave。这个问题可以通过给所有的对端发送更新 (ARP应答)来解决,应答中包含他们独一无二的硬件地址,从而导致流量重新分布。
当新的slave加入到bond中时,或者某个未激活的slave重新 激活时,接收流量也要重新分布。接收的负载被顺序地分布(round robin)在bond中最高速的slave上
当某个链路被重新接上,或者一个新的slave加入到bond中,接收流量在所有当前激活的slave中全部重新分配,通过使用指定的MAC地址给每个 client发起ARP应答。下面介绍的updelay参数必须被设置为某个大于等于switch(交换机)转发延时的值,从而保证发往对端的ARP应答 不会被switch(交换机)阻截。
必要条件:
条件1:ethtool支持获取每个slave的速率;
条件2:底层驱动支持设置某个设备的硬件地址,从而使得总是有个slave(curr_active_slave)使用bond的硬件地址,同时保证每个bond 中的slave都有一个唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址将会被新选出来的 curr_active_slave接管
其实mod=6与mod=0的区别:mod=6,先把eth0流量占满,再占eth1,….ethX;而mod=0的话,会发现2个口的流量都很稳定,基本一样的带宽。而mod=6,会发现第一个口流量很高,第2个口只占了小部分流量。
3 如何配置ubuntu 20.04版本 和以前16的区别很大,16的用的是/etc/network/interfaces配置文件,在20.04中是无效的,必须修改/etc/netplan下的文件,每台机器的yaml文件可能不一样,但是是要是yaml文件都可以配置,下面给一个样板,大体可以这样
1. 添加链路聚合 bond 模式,定义 bond0nmcli connection add con-name bond0 ifname bond0 type bond mode active-backup ip4 10.0.0.12/24
这里演示模式采用 active-backup ,对应主备模式,即 bond1如需要的是其他模式只需要更改:active-backup 改为其他比如改为: balance-rr(平衡抡循环策略)如下方例子详情:nmcli connection add con-name bond0 ifname bond0 type bond mode active-backup ip4 10.0.0.12/24 连接 "bond0" (9b1290f7-9fb3-4805-82f8-bd5fca98ad30) 已成功添加。
这里演示模式采用 active-backup ,对应主备模式,即 bond12. 添加 bond0 绑定网卡nmcli connection add con-name ens33 ifname ens33 type bond-slave master bond0 nmcli connection add con-name ens37 ifname ens37 type bond-slave master bond0 注意顺序
![](https://i-blog.csdnimg.cn/blog_migrate/7dba4b6cea25ebe8d447cb1a620f38e4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cc00cc28eaf812a186e92fab57e8faac.png)
小tips:ens33无法bond原因添加了新适配器(新网卡ens37) 将此ifcfg-ens37删掉 即成功
3. 查看网口配置文件
执行完步骤 1 和 2 后,网口文件会生成 ifcfg-ens37 及 ifcfg-ens33-1 ,这里由于 centos 安装时已经配置了一个网口 ens33 ,所以会生成 ifcfg-ens33-1 ,对建立 bond 没有影响。同理,若建立 bond 前已经有 ifcfg-ens37 配置文件,则会生成 ifcfg-ens37-1 ,若建立 bond 前没有 ifcfg-ens37配置文件,则会生成 ifcfg-ens37 。网口配置文件目录为 /etc/sysconfig/network-scripts
实验环境中,此时网口配置文件如下图所示:
BONDING_OPTS=mode=active-backup
TYPE=Bond
BONDING_MASTER=yes
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=10.0.0.12
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=bond0
UUID=9b1290f7-9fb3-4805-82f8-bd5fca98ad30
DEVICE=bond0
ONBOOT=yes
GATEWAY=10.0.0.220
5. 编写 ifcfg-ens33:(注意网卡编辑 ifcfg-ens33,而不是步骤 3 提到的 ifcfg-ens33-1)
![](https://i-blog.csdnimg.cn/blog_migrate/192cf1592850d7d2ca961b0fd7ecddf6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e1a0dae40a22de1116526ba25449b679.png)
配置完成后重启网络服务:service network restart
watch -n 1 cat /proc/net/bonding/bond0 监控 bond0 状态,
存在两个物理网口,且 bond 模式为 active-backup ,此时实际在用的网卡为 ens37 (CurrentlyActive Slave 显示哪个就是在用哪个)
![](https://i-blog.csdnimg.cn/blog_migrate/3b14ea177eba7922aec12c1dfa9ca3b4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a9a05d92370cbc79a3e92aec6f76cfec.png)
注:
1. 需要交换机做链路聚合才能起来此种配置正确 bond配置完成!实验需要用到交换机 真机来做 虚拟机做不了。
2. 其中关于下图bond配置其他时可以改为相对应的模式如全改为bond1 等此时查看命令变为:watch -n 1 cat /proc/net/bonding/bond0 也可以直接默认bond0不做改变
3. 关于报错:
此种报错为书写格式不正确 只需要将格式转化为unix的即可
ifconfig ens33 down
成功!
======================================================>
例2:配置bond1:
分别执行
nmcli connection add con-name bond0 ifname bond0 type bond mode balance-rr ip4 10.0.0.12/24
nmcli connection add con-name ens33 ifname ens33 type bond-slave master bond0
nmcli connection add con-name ens38 ifname ens38 type bond-slave master bond0
相关文件编写:
#ifcfg-bond0
BONDING_OPTS=mode=balance-rr
TYPE=Bond
BONDING_MASTER=yes
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none #static---->none
IPADDR=10.0.0.12
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=bond0
UUID=4e60e43b-cf27-450b-9d05-4e2f4d66ca30
DEVICE=bond0
ONBOOT=yes
GATEWAY=10.0.0.220 #网关新加
#ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none" #none
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="a74b8b44-1967-424c-bf12-4ec359034713"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="10.0.0.12"
GATEWAY="10.0.0.220"
NETMASK="255.255.255.0"
DNS1="114.114.114.114"
MASTER=bond0
#ifcfg-ens38
TYPE=Ethernet
NAME=ens38
UUID=5d9feccf-5719-4788-9e88-54c036316075
DEVICE=ens38
ONBOOT=yes
MASTER_UUID=4e60e43b-cf27-450b-9d05-4e2f4d66ca30
MASTER=bond0
SLAVE=yes
BOOTPROTO=none #none
验证:
配置的为bond1此时 :watch -n 1 cat /proc/net/bonding/bond1 成功!
例2:设置bond6
nmcli connection add con-name bond0 ifname bond0 type bond mode balance-tlb ip4 10.0.0.12/24
nmcli connection add con-name ens33 ifname ens33 type bond-slave master bond0
nmcli connection add con-name ens38 ifname ens38 type bond-slave master bond0
相关文件更改:
#ifcfg-bond0
BONDING_OPTS=mode=balance-tlb
TYPE=Bond
BONDING_MASTER=yes
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=10.0.0.12
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=bond0
UUID=a1e17448-c680-4db8-8ab8-cb0456eb16df
DEVICE=bond0
ONBOOT=yes
GATEWAY=10.0.0.254
#ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none""
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="a74b8b44-1967-424c-bf12-4ec359034713"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="10.0.0.12"
GATEWAY="10.0.0.254"
NETMASK="255.255.255.0"
DNS1="114.114.114.114"
MASTER=bond0
#ifcfg-ens38
TYPE=Ethernet
NAME=ens38
UUID=3433eaa7-b89e-42ac-a623-51d1e9c040a7
DEVICE=ens38
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
验证:
三. 多网卡 多IP
聚合:此时再次添加网卡设置多个IP
查看新网卡名称:
ifconfig / cd /proc/sys/net/ipv4/conf
cp ifcfg-ens33 ifcfg-ens38
编辑文件:
vim ifcfg-ens38
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens38"
UUID="a74b8-1967-424c-bf12-4ec359034713"
DEVICE="ens38"
ONBOOT="yes"
IPADDR="10.0.0.14"
GATEWAY="10.0.0.220"
NETMASK="255.255.255.0"
DNS1="114.114.114.114"
验证:
多IP
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens38"
UUID="a74b8-1967-424c-bf12-4ec359034713"
DEVICE="ens38"
ONBOOT="yes"
IPADDR="10.0.0.14"
IPADDR="10.0.0.15"
GATEWAY="10.0.0.220"
NETMASK="255.255.255.0"
DNS1="114.114.114.114"
或
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens38:0"
UUID="a74b8-1967-424c-bf12-4ec359034713"
DEVICE="ens38:0"
ONBOOT="yes"
IPADDR="10.0.0.21"
GATEWAY="10.0.0.220"
NETMASK="255.255.255.0"
DNS1="114.114.114.114"
10.0.0.15 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
成功!
----------------------------------------------------------->
二. ubtun20.04设置bond
1. 增加一块网卡
查看网卡名称:
目录: cd /proc/sys/net/ipv4/conf
可以看到是ens38
配置bond6例子:
network:
version: 2
ethernets:
ens33:
addresses: [] #绑定单网卡不需要写IP地址
dhcp4: no
ens38:
addresses: []
dhcp4: no
bonds:
bond0:
addresses:
- 10.0.0.134/24
gateway4: 10.0.0.220
#nameservers: 可以不要
#addresses:
#- 114.114.114.114
interfaces:
- ens33
- ens38
parameters: #参数
mode: balance-alb #bond模式
重启网卡:
这是bond6的,可以选合适你自己的模式 改mode即可如改为: balance-rr(平衡抡循环策略)
运用 sudo netplan apply
ifconfig
查看网卡bond是否在工作
成功!
选择合适的自行配置
如 bonding 802.3ad模式
network:
version: 2
renderer: networkd
ethernets:
enp2s0:
dhcp4: no
enp3s0:
dhcp4: no
optional: true
bonds:
#bond-lan:
bond0:
interfaces: [enp2s0, enp3s0]
addresses: [192.168.93.2/24]
parameters:
mode: 802.3ad #模式为mode4
mii-monitor-interval:
lacp-rate: fast
transmit-hash-policy: layer2
如bond2(主备模式)
network:
version: 2
ethernets:
ens33:
addresses: [] #绑定单网卡不需要写IP地址
dhcp4: no
ens38:
addresses: []
dhcp4: no
bonds:
bond0:
addresses:
- 10.0.0.134/24
gateway4: 10.0.0.220
nameservers:
addresses:
- 114.114.114.114
interfaces:
- ens33
- ens38
parameters: #参数
mode: active-backup #bond模式
primary: ens33
bond2主备模式
network: version: 2 renderer: networkd bonds: bond0: dhcp4: yes interfaces: - enp3s0 - enp4s0 parameters: mode: active-backup primary: enp3s0
成功!
blance-rr(平衡轮询模式)
network:
ethernets:
enp1s0f0:
addresses: [192.168.100.2/27]
gateway4: 192.168.1.30
enp130s0f0: {}
enp130s0f1: {}
version: 2
renderer: networkd
bonds:
bond0:
addresses: [10.1.130.74/24]
interfaces:
- enp130s0f0
- enp130s0f1
parameters:
mode: balance-rr #模式为mode0
mii-monitor-interval: 100
实例
# 2. bond6 + 多网卡ip设置
network:
ethernets:
ens33:
addresses: [] #绑定单网卡不需要写IP地址
dhcp4: no
ens38:
addresses: []
dhcp4: no
bonds:
bond0:
addresses:
- 10.0.0.134/24
gateway4: 10.0.0.220
# nameservers: 可以不要
# addresses:
# - 114.114.114.114
interfaces:
- ens33
- ens38
parameters: #参数
mode: balance-rr #bond模式事实上此为bond1
mii-monitor-interval: 100
ens39:
dhcp4: no
dhcp6: no
addresses:
- 10.0.0.35/24
gateway4: 10.0.0.220
optional: true
nameservers:
addresses: [114.114.114.114,8.8.8.8]
version: 2
查看bond状态
|
cat
/proc/net/bonding/bond0