文章目录
linux配置bond学习
1. 概念、原理、工作模式
网卡绑定,也称作网卡捆绑。就是将两个或者更多的物理网卡绑定成一个虚拟网卡,这个聚合起来的设备看起来是一个单独的以太网接口设备,通俗的讲就是说这几块网卡具有相同的IP地址而并行链接聚合成一个逻辑链路,以达到提供负载均衡或者冗余、增加带宽的目的。
这项技术在sun和cisico中早已存在,被称为trinking(链路聚集)和etherchannel(链路捆绑)技术,在linux的2.4.X及其以上的内核中也采用了这种技术,被称为bonding。
2. 工作模式(7种)
Bonding通过修改配置文件可以工作在以下七种工作模式:
常见的 bond
模式有:
balance-rr
:轮询模式,数据包依次在每个物理接口上传输,提供负载均衡。
mode=0 round-robin
【轮询】
轮询策略(Round-robin policy
),模式代号是0
。该策略是按照设备顺序依次传输数据包,直到最后一个设备。这种模式提供负载均衡和容错能力。
active-backup
:主备模式,一个接口处于活动状态,其他作为备份,当活动接口故障时自动切换。
mode=1 active-backup
【主备】
活动备份策略(Active-backup policy
),模式代号是1
。该策略只有一个设备处理数据,当它宕机的时候就会由备份代替,仅提供容错能力。
balance-xor
:根据源和目的 MAC 地址或 IP 地址进行负载均衡。
mode=2 load balancing (xor)
【根据mac地址进行异或操作,来选择处理设备】
异或策略(XOR policy
),模式代号是2
。该策略是根据MAC
地址异或运算的结果来选择传输设备,提供负载均衡和容错能力。
broadcast
:所有物理接口都发送数据包,提供冗余。
mode=3 fault-tolerance (broadcast)
【广播】
广播策略(Broadcast policy
),模式代号是3
。该策略通过全部设备来传输所有数据,提供容错能力。
802.3ad
:使用 IEEE802.3ad
动态链路聚合协议,需要交换机支持。
mode=4 lacp
【创建聚合组=》带宽翻倍】
IEEE 802.3ad
动态链接聚合(IEEE 802.3ad Dynamic link aggregation
),模式代号是4
。该策略通过创建聚合组来共享相同的传输速度,需要交换机也支持802.3ad
模式,提供容错能力。该模式下,网卡带宽最高可以翻倍(如从1Gbps翻到2Gbps)。
balance-tlb
:自适应负载均衡,根据负载情况分配流量,不依赖交换机。
mode=5 transmit load balancing
【传输负载均衡】
适配器传输负载均衡(Adaptive transmit load balancing
),模式代号是5
。该策略是根据当前的负载把发出的数据分给每一个设备,由当前使用的设备处理收到的数据,如果当前正用于接收数据的网卡发生故障,则由其它网卡接管,要求所用的网卡及网卡驱动可通过ethtool
命令得到speed信息。本策略的通道联合不需要专用的交换机支持,提供负载均衡和容错能力。
balance-alb
:自适应负载均衡,包括接收和发送的负载均衡,不依赖交换机。
mode=6 adaptive load balancing
【传输+接受负载均衡】
适配器负载均衡(Adaptive load balancing
),模式代号是6
。该策略在IPV4情况下包含适配器传输负载均衡策略,由ARP协商完成接收的负载,通道联合驱动程序截获ARP在本地系统发送出的请求,用其中一个设备的硬件地址覆盖从属设备的原地址。即在策略6的基础之上,在接收数据的同时实现负载均衡,除要求ethtool命令可得到speed信息外,还要求支持对网卡MAC地址的动态修改功能。
注意事项:
Mode
参数中的0、2、3、4
模式要求交换机支持ports group
功能并能进行相应的设置,例如在cisco
中要将所连接的端口设为port-channel
。
如果系统流量不超过单个网卡的带宽,请不要选择使用mode1
之外的模式,因为负载均衡需要对流量进行计算,这对系统性能会有所损耗。
如果交换机及网卡都确认支持802.3ab
,则实现负载均衡时尽量使用模式4
以提高系统性能。
3. 配置演示
3.1 新增虚拟网卡
本次测试在VMware中进行模拟配置
3.2 查看新的网卡信息
# 注:如上述第一步新增虚拟网卡是在开机状态下新增的,则需要执行命令重启网卡。如是在关机状态下新增的网卡则不需要重启。
systemctl restart network
[root@localhost ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:73:d1:8d brd ff:ff:ff:ff:ff:ff
inet 192.168.244.112/24 brd 192.168.244.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::a267:2d7f:2cc2:737b/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::4d1a:ac50:9db3:87cb/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:73:d1:97 brd ff:ff:ff:ff:ff:ff
inet 192.168.244.142/24 brd 192.168.244.255 scope global noprefixroute dynamic ens36
valid_lft 1419sec preferred_lft 1419sec
inet6 fe80::e9eb:70cd:b9d4:acd1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
4: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:73:d1:a1 brd ff:ff:ff:ff:ff:ff
inet 192.168.244.143/24 brd 192.168.244.255 scope global noprefixroute dynamic ens37
valid_lft 1419sec preferred_lft 1419sec
inet6 fe80::56a5:34de:3d22:8b52/64 scope link noprefixroute
valid_lft forever preferred_lft forever
信息简述:
使用
ip a
命令检查网卡信息时需注意当前新增的两个虚拟网卡的MAC
地址是不同的,绑定bond
之后则会是一个统一的MAC
地址
3.3 配置bond
使用 nmcli 命令进行配置
nmcli
是一个用于控制 NetworkManager 的命令行工具。NetworkManager 是 Linux 系统中管理网络连接的守护进程,nmcli
提供了一种在命令行界面方便地配置和管理网络连接的方式。
nmcli connection add type bond ifname bond0 mode 0
- 参数说明
type bond
:表示创建的是bond
类型的连接。ifname bond0
:bond
接口的名称,这里为bond0
。mode 0
:bond
的工作模式为balance-rr
,这里参考第二章节“工作模式”的内容,mode 0
也可以写做mode balance-rr
。
- 添加从属接口
将新增的两个虚拟网卡添加到新建的
bond
中
nmcli connection add type bond-slave ifname ens36 master bond0
nmcli connection add type bond-slave ifname ens37 master bond0
3.4 查看配置文件
上述配置完成之后,查看并修改
bond
配置文件信息
- 修改
ifcfg-bond-bond0
配置文件
vim ifcfg-bond-bond0
# 重启网卡
systemctl restart network
# 或者使用如下命令激活(首先激活从属接口,再激活 bond 接口),这种方式本次没有验证。
nmcli connection up bond-slave-eth36
nmcli connection up bond-slave-eth37
nmcli connection up mybond # mybond 是创建bond时指定的名称,示例:nmcli connection add type bond con-name mybond ifname bond0 mode balance-rr
注:
如果需要改变
bond
的工作模式,则可以直接在文件中修改BONDING_OPTS=mode
参数,然后重启网卡即可
3.5 检查网卡信息
# 这个时候他们的MAC信息已经变成了同一个,此时他们的状态也都是 up 状态
[root@localhost network-scripts]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:73:d1:8d brd ff:ff:ff:ff:ff:ff
inet 192.168.244.112/24 brd 192.168.244.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::a267:2d7f:2cc2:737b/64 scope link tentative noprefixroute dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::4d1a:ac50:9db3:87cb/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: ens36: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 00:0c:29:73:d1:97 brd ff:ff:ff:ff:ff:ff
4: ens37: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP group default qlen 1000
link/ether 00:0c:29:73:d1:97 brd ff:ff:ff:ff:ff:ff
6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:0c:29:73:d1:97 brd ff:ff:ff:ff:ff:ff
inet 192.168.244.115/24 brd 192.168.244.255 scope global noprefixroute bond0
valid_lft forever preferred_lft forever
inet6 fe80::5d94:aaad:d60f:b89b/64 scope link noprefixroute
valid_lft forever preferred_lft forever
- 也可以通过配置文件查看网卡状态
在配置文件中可以看到每个网卡的状态及实际的
MAC
地址信息
[root@localhost ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: ens36
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:73:d1:97
Slave queue ID: 0
Slave Interface: ens37
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:73:d1:a1
Slave queue ID: 0
3.6 验证
可以在另外一台虚拟机上使用
ping
命令进行测试
ping 192.168.244.115
注:如果是在实际环境中有多块网卡的情况下,可以使用如下命令进行进一步的验证。关闭一个网卡之后实际在多个网卡情况下网络仍然可用(当前使用VMware模拟的环境,在关闭一个网卡之后使用
ping
命令则不能通信)
# 关闭 ens36 网卡
ifconfig ens36 down
4. 其他常用命令
4.1 查看bond名称
查看 bond 名称,
bond
名称可在创建时指定(con-name mybond
:为该bond
连接取一个名称,这里是mybond
,示例:nmcli connection add type bond con-name mybond ifname bond0 mode balance-rr
),不指定默认为bond-bond0
[root@localhost ~]# nmcli connection show
NAME UUID TYPE DEVICE
ens33 faf84baf-5d19-4388-b332-a2cc69e3cd41 ethernet ens33
bond-bond0 219c606b-b60c-42cb-b2c0-b86e7469531d bond bond0
bond-slave-ens36 86ebcf5f-2599-4a51-a153-a0757cc1256b ethernet ens36
bond-slave-ens37 32d8d57a-d8c0-4bb6-a871-3c02ea68555b ethernet ens37
Wired connection 1 74b43bd1-867d-3c35-86da-bc9a0a96eb1e ethernet --
Wired connection 2 cae1b12a-0fdc-3872-9ffd-2a6d01696d71 ethernet --
4.2 显示bond连接的详细信息
显示
bond-bond0
连接的详细信息,包括其配置参数
nmcli connection show bond-bond0
显示
bond0
设备的信息,如状态、硬件地址、IP 地址等
[root@localhost ~]# nmcli device show bond0
GENERAL.DEVICE: bond0
GENERAL.TYPE: bond
GENERAL.HWADDR: 00:0C:29:73:D1:97
GENERAL.MTU: 1500
GENERAL.STATE: 100 (connected)
GENERAL.CONNECTION: bond-bond0
GENERAL.CON-PATH: /org/freedesktop/NetworkManager/ActiveConnection/6
IP4.ADDRESS[1]: 192.168.244.115/24
IP4.GATEWAY: 192.168.244.2
IP4.ROUTE[1]: dst = 192.168.244.0/24, nh = 0.0.0.0, mt = 300
IP4.ROUTE[2]: dst = 0.0.0.0/0, nh = 192.168.244.2, mt = 300
IP4.DNS[1]: 8.8.8.8
IP6.ADDRESS[1]: fe80::5d94:aaad:d60f:b89b/64
IP6.GATEWAY: --
IP6.ROUTE[1]: dst = fe80::/64, nh = ::, mt = 300
IP6.ROUTE[2]: dst = ff00::/8, nh = ::, mt = 256, table=255
4.3 删除bond信息
如果需要删除
bond
配置,可以使用以下命令先删除从属接口的连接,再删除
bond
连接。
nmcli connection delete mybond
nmcli connection delete bond-slave-eth36
nmcli connection delete bond-slave-eth37