参考文档:
Redhat:7.7. Using Channel Bonding
本文主要阐述如何配置网卡bond,以及不同bond模式区别差异
bonding是Linux提供的一种技术,它可以将两个以上的网络接口绑定为一个逻辑接口,实现网络冗余、负载均衡
集群存在两张双口万兆网卡,分别使用两张万兆网卡其中一个口配置bond,实现网络聚合效果
万兆网卡01 | 万兆网卡02 | |
---|---|---|
网卡名称 | enp2s0f0 | enp130s0f0 |
bond配置 | bond0 | bond0 |
以下示例,将网卡enp2s0f0和网卡enp130s0f0聚合为bond0网卡,bond配置模式为bond6(mode=6
)
注:如需更改bond模式,则更改mode为对应数值即可
1、备份现有网卡配置信息
[root@node118 network-scripts]# cp ifcfg-enp2s0f0 backup-ifcfg-enp2s0f0
[root@node118 network-scripts]# cp ifcfg-enp130s0f0 backup-ifcfg-enp130s0f0
2、添加以下网卡配置信息,重启网络服务即可
[root@node118 network-scripts]# cat ifcfg-enp2s0f0
DEVICE=enp2s0f0
BOOTPROTO=none
ONBOOT=yes
NAME=enp2s0f0
TYPE=Ethernet
MASTER=bond0
SLAVE=yes
NM_CONTROLLED=no
[root@node118 network-scripts]# cat ifcfg-enp130s0f0
DEVICE=enp130s0f0
BOOTPROTO=none
ONBOOT=yes
NAME=enp130s0f0
TYPE=Ethernet
MASTER=bond0
SLAVE=yes
NM_CONTROLLED=no
[root@node118 network-scripts]# cat ifcfg-bond0
DEVICE=bond0
NAME=bond0
TYPE=Ethernet
NM_CONTROLLED=no
USERCTL=no
ONBOOT=yes
BOOTPROTO=static
BONDING_OPTS='mode=6 miimon=100'
IPADDR=172.16.21.118
NETMASK=255.255.255.0
GATEWAY=172.16.21.205
DNS1=114.114.114.114
DNS2=8.8.8.8
[root@node118 network-scripts]# systemctl restart network
万兆网卡01 | 万兆网卡02 | |
---|---|---|
网卡名称 | ens160 | ens192 |
bond配置 | bond0 | bond0 |
以下示例,将网卡ens160和网卡ens192聚合为bond0网卡,bond配置模式为bond6(mode=6
)
注:如需更改bond模式,则更改mode为对应数值即可
1、安装ifenslave软件包
root@node180:~# apt-cache search ifenslave
ifenslave - configure network interfaces for parallel routing (bonding)
root@node180:~# apt-get install ifenslave
2、备份现有网卡配置
root@node180:/etc/network# cp interfaces interfaces.bak
3、添加以下网卡配置文件,重启网络服务即可
root@node180:~# cat /etc/network/interfaces
source /etc/network/interfaces.d/*
auto lo
iface lo inet loopback
auto ens160
iface ens160 inet manual
bond-master bond0
auto ens192
iface ens192 inet manual
bond-master bond0
auto bond0
iface bond0 inet static
address 172.16.21.180
netmask 255.255.255.0
network 172.16.21.0
broadcast 172.16.21.255
gateway 172.16.21.205
dns-nameservers 114.114.114.114 8.8.8.8
bond-slaves none
bond-miimon 100
bond-mode 6
root@node180:~# /etc/init.d/networking restart
以bond4模式举例,除了网卡配置信息修改之外,同时需要修改交换机配置,示例为华为交换机(S6720-54C-EI-48S-AC)
笔记本通过Console线连接至交换机COM口,通过xshell连接至调试会话
注:
1、可通过设备管理器查看COM端口号
2、传输协议为SERIAL,波特率为9600,其他参数值为默认即可
3、华为交换机默认用户密码为admin/[email protected]
执行system-view
命令进入以太网端口视图
system-view
Enter system view, return user view with Ctrl+Z.
[HUAWEI]
interface Eth-Trunk {端口组ID}
命令进入链路聚合端口,执行mode lacp
命令将端口组设置模式为LACP[HUAWEI]interface Eth-Trunk 10
[HUAWEI-Eth-Trunk10]mode lacp
[HUAWEI-Eth-Trunk10]display this
#
interface Eth-Trunk10
mode lacp
#
return
[HUAWEI-Eth-Trunk10]quit
interface XGigabitEthernet 0/0/{交换机端口号}
进入交换机端口,执行eth-trunk {端口组ID}
将当前交换机端口加入端口组undo eth-trunk
即可[HUAWEI]interface XGigabitEthernet 0/0/42
[HUAWEI-XGigabitEthernet0/0/42]eth-trunk 10
[HUAWEI-XGigabitEthernet0/0/42]display this
#
interface XGigabitEthernet0/0/42
eth-trunk 10
#
return
display eth-trunk
查看当前端口组配置Selected
[HUAWEI]display eth-trunk
Eth-Trunk80's state information is:
Local:
LAG ID: 80 WorkingMode: LACP
Preempt Delay: Disabled Hash arithmetic: According to SIP-XOR-DIP
System Priority: 32768 System ID: 1856-4421-3090
Least Active-linknumber: 1 Max Active-linknumber: 8
.
Operate status: up Number Of Up Port In Trunk: 4
--------------------------------------------------------------------------------
ActorPortName Status PortType PortPri PortNo PortKey PortState Weight
XGigabitEthernet0/0/7 Selected 10GE 32768 1 20545 10111100 1
XGigabitEthernet0/0/9 Selected 10GE 32768 2 20545 10111100 1
XGigabitEthernet0/0/3 Selected 10GE 32768 3 20545 10111100 1
XGigabitEthernet0/0/8 Selected 10GE 32768 4 20545 10111100 1
Partner:
--------------------------------------------------------------------------------
ActorPortName SysPri SystemID PortPri PortNo PortKey PortState
XGigabitEthernet0/0/7 65535 6891-d066-f634 255 1 15 10111100
XGigabitEthernet0/0/9 65535 6891-d066-f634 255 2 15 10111100
XGigabitEthernet0/0/3 65535 6891-d066-f634 255 3 15 10111100
XGigabitEthernet0/0/8 65535 6891-d066-f634 255 4 15 10111100
Eth-Trunk81's state information is:
Local:
LAG ID: 81 WorkingMode: LACP
Preempt Delay: Disabled Hash arithmetic: According to SIP-XOR-DIP
System Priority: 32768 System ID: 1856-4421-3090
Least Active-linknumber: 1 Max Active-linknumber: 8
Operate status: up Number Of Up Port In Trunk: 2
--------------------------------------------------------------------------------
ActorPortName Status PortType PortPri PortNo PortKey PortState Weight
XGigabitEthernet0/0/5 Selected 10GE 32768 5 20801 10111100 1
XGigabitEthernet0/0/1 Selected 10GE 32768 6 20801 10111100 1
Partner:
--------------------------------------------------------------------------------
ActorPortName SysPri SystemID PortPri PortNo PortKey PortState
XGigabitEthernet0/0/5 65535 6891-d067-426c 255 1 15 10111100
XGigabitEthernet0/0/1 65535 6891-d067-426c 255 2 15 10111100
a. 使用两个网口轮询发送,提高发送能力,使用两个服务端时,能够达到理论上的带宽的极限2G.但由于是轮询发送,会出现包乱序,导致重发。当发送请求给两个服务端时,从dstat来看流量,出口的带宽已经达到极限
而iperf的结果看,每个服务端接收的流量只有8.7Gbit
抓包查看有乱序和重发的现象,所以,应用不能使用到所有网口的带宽。
b. 只有两个节点时,发送时轮询发送,性能的瓶颈在接收端。交换机在某一个时间段只往一个端口发送包,这个时候发送端两个口总共只能发送1G的流量。
a. 两个节点分别使用4个万兆网口做bond4,由于所有slave接口MAC地址一样,两个节点对跑iperf时,只有1个万兆网口工作,无法发挥4个万兆网口的性能
注:如需发挥4个万兆网口bond4性能,则需用4台万兆客户端iperf压测
[root@node85 ~]# ip ad
1: lo: 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
4: enp24s0f0: mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether 68:91:d0:66:f6:34 brd ff:ff:ff:ff:ff:ff
5: enp24s0f1: mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether 68:91:d0:66:f6:34 brd ff:ff:ff:ff:ff:ff
6: enp25s0f0: mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether 68:91:d0:66:f6:34 brd ff:ff:ff:ff:ff:ff
7: enp25s0f1: mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
link/ether 68:91:d0:66:f6:34 brd ff:ff:ff:ff:ff:ff
8: enp59s0f0: mtu 1500 qdisc mq master bond1 state UP group default qlen 1000
link/ether 68:91:d0:67:42:6c brd ff:ff:ff:ff:ff:ff
9: enp59s0f1: mtu 1500 qdisc mq master bond1 state UP group default qlen 1000
link/ether 68:91:d0:67:42:6c brd ff:ff:ff:ff:ff:ff
10: bond0: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 68:91:d0:66:f6:34 brd ff:ff:ff:ff:ff:ff
inet 172.16.21.85/24 brd 172.16.21.255 scope global bond0
valid_lft forever preferred_lft forever
inet6 fe80::6a91:d0ff:fe66:f634/64 scope link
valid_lft forever preferred_lft forever
11: bond1: mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 68:91:d0:67:42:6c brd ff:ff:ff:ff:ff:ff
inet 172.16.33.85/24 brd 172.16.33.255 scope global bond1
valid_lft forever preferred_lft forever
inet6 fe80::6a91:d0ff:fe67:426c/64 scope link
valid_lft forever preferred_lft forever
a. bond5通过MAC地址来均衡出口的带宽。但在发送arp报文时,只发送一个端口的地址。所以入口的流量只走一个口。当两个节点时,接收端的带宽上限只有1G,客户端理论上限也只有1G,两个节点作为客户端相似.
b. 两个节点作为服务端时,bond5可以利用到两个端口的带宽,bond5通过算法来均衡出口的带宽,所以出口带宽能达到2G.
a. bond6是在bond0的基础上,增加接收的负载均衡。bond6可以截获arp的报文,通过修改MAC地址,使不同客户端的可以跟不同端口进行通信。当只有两个节点时,客户端收到arp地址只有一个,服务端接收的流量最大也只有1G.
b.使用2个客户端或者2个服务端测试,客户端和服务端都能利用到两个接收发送的端口,所以带宽都能达到2G.
从上面的测试来看,bond0由于本身的机制,容易出现重发影响性能的缺点,并且,bond0本身没有定义入口流量的均衡,性能的瓶颈在入口流量;bond5同理,入口的带宽限制了网络的性能;
bond6在bond5的基础上增加接收能力,在三节点以上规模的节点,出入口的流量都能达到2G的带宽上限,但实际使用中发现网络流量并不稳定;
综上所述,在条件允许情况下,要想实现网络冗余和网络聚合效果,推荐使用bond4配置
注:bond0、bond4需要交换机支持(交换机端口绑定),bond5、bond6无需交换机支持(软件配置即可)