一、网卡绑定模式
Linux 绑定驱动程序提供链路聚合。绑定是并行聚合多个网络接口以提供单个逻辑绑定接口的过程。绑定接口的操作取决于绑定策略,该策略也称为模式。不同的模式提供负载均衡或热备用服务。
1.1 绑定模式介绍
根据要使用的绑定模式,您必须配置交换机上的端口:
绑定模式 | 交换机上的配置 |
---|---|
| 需要启用静态 EtherChannel,而不是链路聚合控制协议 (LACP) 协商。 |
| 交换机上无需进行任何配置。 |
| 需要启用静态 EtherChannel,而不是 LACP 协商。 |
| 需要启用静态 EtherChannel,而不是 LACP 协商。 |
| 需要启用 LACP 协商的 EtherChannel。 |
| 交换机上无需进行任何配置。 |
| 交换机上无需进行任何配置。 |
有关如何配置交换机的详细信息,请参阅交换机的文档。
- Balance-rr(模式 0)
Balance-rr
使用循环算法,该算法按顺序将数据包从第一个可用端口传输到最后一个端口。此模式提供负载均衡和容错功能。
此模式需要交换机配置端口聚合组,也称为 EtherChannel 或类似的端口分组。EtherChannel 是一种端口链路聚合技术,用于将多个物理以太网链路分组到一个逻辑以太网链路。
此模式的缺点是它不适合繁重的工作负载,并且如果 TCP 吞吐量或有序数据包传输是必不可少的。
Active-backup
主备模式(mode 1)
Active-backup
使用确定绑定中只有一个端口处于活动状态的策略。此模式提供容错功能,不需要任何交换机配置。
如果活动端口发生故障,备用端口将变为活动端口。绑定向网络发送无偿地址解析协议 (ARP) 响应。无偿 ARP 强制 ARP 帧的接收方更新其转发表。Active-backup
模式传输免费 ARP,以宣布新的路径以保持主机的连接。
primary
选项定义绑定接口的首选端口。
- Balance-xor(mode 2)
Balance-xor
使用选定的传输哈希策略发送数据包。此模式提供负载均衡、容错功能,并且需要交换机配置以设置 Etherchannel 或类似的端口分组。
要更改数据包传输和平衡传输,此模式使用xmit_hash_policy
选项。根据接口上流量的来源或目标,接口需要额外的负载均衡配置。请参阅粘接参数xmit_hash_policy说明。
- Broadcast(mode 3)
Broadcast
使用在所有接口上传输每个数据包的策略。此模式提供容错功能,并且需要交换机配置来设置 EtherChannel 或类似的端口分组。
此模式的缺点是它不适合繁重的工作负载,并且如果 TCP 吞吐量或有序数据包传输是必不可少的。
- 802.3ad(mode 4)
802.3ad
使用同名的IEEE标准动态链路聚合策略。此模式提供容错能力。此模式需要交换机配置来设置链路聚合控制协议 (LACP) 端口分组。
此模式创建共享相同速度和双工设置的聚合组,并利用活动聚合器中的所有端口。根据接口上流量的来源或目标,此模式需要额外的负载均衡配置。
默认情况下,传出流量的端口选择取决于传输哈希策略。使用传输哈希策略的xmit_hash_policy
选项来更改端口选择并平衡传输。
802.3ad
和 Balance-xor
之间的区别在于合规性。802.3ad
策略在端口聚合组之间协商 LACP。请参阅粘接参数xmit_hash_policy说明
- Balance-tlb(mode 5)
Balance-tlb
使用传输负载均衡策略。此模式提供容错、负载均衡,并建立不需要任何开关支持的通道绑定。
活动端口接收传入流量。如果活动端口发生故障,另一个端口将接管故障端口的 MAC 地址。要确定哪个接口处理传出流量,请使用以下模式之一:
值0
:使用哈希分配策略在不进行负载均衡的情况下分配流量
值1
:通过负载均衡将流量分配到每个端口
在绑定选项tlb_dynamic_lb=0的情况下,这种绑定模式使用xmit_hash_policy绑定选项来平衡传输。primary选项定义了绑定接口的首选端口。
- Balance-alb(mode 6)
Balance-alb
使用自适应负载均衡策略。此模式提供容错、负载均衡,并且不需要任何特殊的开关支持。
此模式包括 IPv4 和 IPv6 流量的平衡-传输负载均衡 (balance-tlb
) 和接收-负载均衡。绑定拦截本地系统发送的 ARP 应答,并覆盖绑定中其中一个端口的源硬件地址。ARP协商管理接收-负载均衡。因此,不同的端口对服务器使用不同的硬件地址。
primary
选项定义绑定接口的首选端口。使用tlb_dynamic_lb=0
绑定选项时,此绑定模式使用xmit_hash_policy
绑定选项来平衡传输。请参阅粘接参数xmit_hash_policy说明。
1.2 xmit_hash_policy绑定参数
xmit_hash_policy负载均衡参数用于在balance-xor、802.3ad、balance-alb和balance-tlb模式中选择传输哈希策略。仅当tlb_dynamic_lb参数为0时,该参数适用于模式5和6。该参数的可能值包括layer2、layer2+3、layer3+4、encap2+3、encap3+4以及vlan+srcmac。
有关详细信息,请参阅下表:
策略层或网络层 | Layer2 | Layer2+3 | Layer3+4 | encap2+3 | encap3+4 | VLAN+srcmac |
使用 | 源和目标MAC地址的XOR以及以太网协议类型 | 源和目标 MAC 地址以及 IP 地址的 XOR | 源端口和目标端口以及 IP 地址的异或 | 对源MAC地址和目标MAC地址以及支持的隧道内的IP地址进行XOR运算,例如虚拟可扩展局域网(VXLAN)。该模式依赖于skb_flow_dissect()函数来获取报文头字段 | 对源端口和目标端口以及支持的隧道内的IP地址进行XOR运算,例如VXLAN。该模式依赖于skb_flow_dissect()函数来获取报文头字段 | VLAN ID 和源 MAC 供应商和源 MAC 设备的 XOR |
流量放置 | 流向同一底层网络接口上的特定网络对等体的所有流量 | 发往同一底层网络接口上特定 IP 地址的所有流量 | 发往同一底层网络接口上特定 IP 地址和端口的所有流量 | |||
第一选择 | 如果网络流量在此系统与同一广播域中的多个其他系统之间 | 如果此系统与多个其他系统之间的网络流量通过默认网关 | 如果此系统与另一个系统之间的网络流量使用相同的 IP 地址,但通过多个端口 | 封装的流量在源系统与使用多个 IP 地址的多个其他系统之间进行 | 封装的流量在源系统和使用多个端口号的其他系统之间进行 | 如果绑定传输来自多个容器或虚拟机 (VM) 的网络流量,这些流量将其 MAC 地址直接暴露给外部网络(如桥接网络),则无法为模式 2 或模式 4 配置交换机 |
第二选择 | 如果网络流量主要在此系统与默认网关后面的多个其他系统之间 | 如果网络流量主要在此系统和另一个系统之间 | ||||
兼容的 | 802.3ad | 802.3ad | 不是 802.3ad | |||
默认策略 | 如果未提供任何配置,则这是默认策略 | 对于非IP流量,该公式与 | 对于非 IP 流量,公式与 |
二、配置方法
2.1 通过网卡配置文件方式配置网卡绑定
2.1.1 redhat¢os&rocky Linux系列
网卡配置文件位置在/etc/sysconfig/network-scripts/目录下
示例1:以网卡1和网卡2配置网卡绑定模式为802.3ad 也就是mode 4为例,对应交换机端配置LACP动态链路聚合,
步骤1、编辑文件/etc/sysconfig/network-scripts/ ifcfg-bond1,将以下内容写入并保存
DEVICE=bond1
NAME=bond1
TYPE=bond
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=4 lacp_rate=1 miimon=100 xmit_hash_policy=layer3+4"
BONDING_MASTER=yes
IPADDR=ip address
NETMASK=netmask
NM_CONTROLLED=no
USERCTL=no
步骤2、分别修改网卡1跟网卡2的配置文件,将以下内容写入并保存
网卡1配置文件示例
DEVICE=device_name
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond1
SLAVE=yes
NM_CONTROLLED=no
USERCTL=no
网卡2配置文件示例
DEVICE=device_name
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond1
SLAVE=yes
NM_CONTROLLED=no
USERCTL=no
步骤3、启用配置,重启网络服务
# systemctl restart network
示例2、 以网卡1和网卡2配置网卡绑定模式为Active-backup
主备模式 也就是mode 1为例,
步骤1、修改绑定网络接口bond2的网络配置文件,编辑文件“/etc/sysconfig/network-scripts/ ifcfg-bond2”,内容如下:
DEVICE=bond2
NAME=bond2
TYPE=bond
ONBOOT=yes
BOOTPROTO=static
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100"
IPADDR=ip_address
NETMASK=netmask
IPV6INIT=yes
NM_CONTROLLED=no
USERCTL=no
步骤2、修改网卡1跟网卡2配置文件,内容如下
DEVICE=网卡1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond2
SLAVE=yes
NM_CONTROLLED=no
USERCTL=no
DEVICE=网卡2
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
MASTER=bond2
SLAVE=yes
NM_CONTROLLED=no
USERCTL=no
步骤3、启用配置,重启网络服务
# systemctl restart network
2.1.2 Debian系(Ubuntu)
示例1、以网卡ens36与37配置mode4为例,对应交换机端配置LACP动态链路聚合
注意:
Ubuntu系统从17.10版本开始,默认使用的网络管理工具从ifupdown转变为了Netplan。在这之后的版本中,不再使用传统的/etc/network/interfaces文件来配置网络,而是使用YAML格式的配置文件,通常位于/etc/netplan/目录下。
如果你需要在Ubuntu 17.10或更高版本中配置静态IP地址,你应该编辑Netplan配置文件,而不是修改interfaces文件。
- Ubuntu17.10之前版本配置方法
步骤1:修改配置文件/etc/network/interfaces,内容如下:
vi /etc/network/interfaces
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
auto ens36
iface ens36 inet manual
bond-master bond0
auto ens37
iface ens37 inet manual
pre-up sleep 5
bond-master bond0
auto bond0
iface bond0 inet static
address 192.168.10.2
netmask 255.255.255.0
gateway 192.168.10.254
bond-mode 4
bond-miimon 100
bond-lacp-rate 1
bond-slaves ens36 ens37
步骤2:重启网络服务
#service network restart
或
#/etc/init.d/networking restart
- Ubuntu17.10以后版本配置方法:
修改/etc/netplan/ 01-network-manager-all.yaml文件或新创建yaml文件,文件内容如下:
network:
version: 2
renderer: networkd
ethernets:
enp1s0:
dhcp4: no
enp2s0:
dhcp4: no
enp3s0:
dhcp4: no
optional: true
enp4s0:
dhcp4: no
optional: true
enp5s0:
dhcp4: no
optional: true
enp6s0:
dhcp4: no
optional: true
bonds:
bond-guanli:
interfaces: [enp2s0, enp3s0]
addresses: [192.168.93.2/24]
parameters:
mode: 802.3ad
mii-monitor-interval: 1
bond-yewu:
interfaces: [enp1s0, enp4s0]
addresses: [192.168.1.252/24]
nameservers:
search: [local]
addresses: [8.8.8.8, 8.8.4.4]
parameters:
mode: active-backup
mii-monitor-interval: 1
gratuitious-arp: 5
routes:
- to: default
via: 192.168.1.1
bond-cuncu:
interfaces: [enp5s0, enp6s0]
addresses: [192.168.254.2/24]
parameters:
mode: balance-rr
mii-monitor-interval: 1
2.2 使用nmtui配置网卡绑定
2.2.1 redhat¢os&rocky Linux系列
前提条件:确保NetworkManager服务正常运行,如果未开启,执行以下命令开启
systemctl start NetworkManager
步骤1:在终端执行nmtui打开配置窗口,选择编辑,按回车
步骤2、选择add添加,选择bond,回车创建
步骤3、填写配置文件名称、设备名称、选择“Add”添加,选择网卡绑定的“接口类型”,选择“创建”,如以太网,
步骤4、 填写成员端口的配置文件及设备名称,回车
步骤5、继续重复步骤2和3添加第二个成员端口,如下图
步骤6、选择绑定模式,以主备模式mode1为例,回车
步骤7、为聚合端口配置ip地址,如需dhcp自动配置IP,则省略此步骤,如下图,
步骤8、返回主菜单,退出
步骤9、验证
# cat /proc/net/bonding/bond0
#nmcli device status
2.2.2 Debian系(Ubuntu)
ubuntu与redhat系列使用nmtui配置网卡绑定的方式一样,这里不再赘述
2.3 其它配置方式
redhat7系列系统还可以使用nmcli管理工具,配置网卡绑定,8,9系统支持web控制台配置,另外使用nm-connection-editor也可以配置网卡绑定,配置效果跟上面2种配置方式所达到的效果是一样的,根据实际情况选择相应配置方式即可所以这里也不再赘述
三、配置VLAN标签
虚拟局域网 (VLAN) 是物理网络中的逻辑网络。VLAN 接口在数据包通过接口时使用 VLAN ID 标记数据包,并删除返回数据包的标记。您可以在另一个接口(例如以太网、绑定、组或桥接设备)之上创建 VLAN 接口。这些接口称为parent interface
.
3.1 redhat系列
3.1.1 单网卡配置VLAN标记
步骤1、编辑/etc/sysconfig/network-scripts/ifcfg-ens33,文件内容如下:
#more ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="ens33"
UUID="b5fc64bd-a688-43aa-8ff2-ac540453287b"
DEVICE="ens33"
ONBOOT="yes"
步骤2:编辑/etc/sysconfig/network-scripts/ifcfg-ens33.10,文件内容如下:
#more ifcfg-ens33.10
TYPE="Vlan"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
PHYSDEV=ens33
NAME="ens33.10"
UUID="b5fc64bd-a688-43aa-8ff2-ac540453287b"
DEVICE="ens33.10"
ONBOOT="yes"
VLAN_ID=10
IPADDR=192.168.1.1
PREFIX=24
GATEWAY=192.168.1.254
步骤3、重启网络服务
#systemctl restart network
3.1.2 给聚合绑定网卡配置VLAN标记
步骤1、编辑配置文件/etc/sysconfig/network-scripts/ifcfg-bond1.10,内容如下:
more ifcfg-bond1.10
TYPE=Vlan
BONDING_MASTER=yes
HWADDR=
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
IPADDR=192.168.247.140
PREFIX=24
GATEWAY=192.168.247.254
DNS1=192.168.247.253
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=bond1.10
UUID=6ad166b3-24c5-4c1b-9282-570a00ab5a18
DEVICE=bond1.10
PHYSDEV=bond1
VLAN_ID=10
ONBOOT=yes
步骤2、编辑/etc/sysconfig/network-scripts/ifccfg-bond1网卡配置文件内容如下:
#more ifcfg-bond1
TYPE=Bond
BONDING_MASTER=yes
HWADDR=
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=bond1
UUID=6ad166b3-24c5-4c1b-9282-570a00ab5a18
DEVICE=bond1
ONBOOT=yes
BONDING_OPTS="downdelay=0 miimon=100 mode=active-backup updelay=0"
步骤3、修改配置文件/etc/sysconfig/network-scripts/ifcfg-ens36 ifcfg-ens37,bond1的成员端口,文件内容如下:
#more ifcfg-ens36
TYPE=Ethernet
NAME=ens36
UUID=f3215047-8271-4464-83af-ef3b1ec964b7
DEVICE=ens36
ONBOOT=yes
MASTER=bond1
SLAVE=yes
MASTER_UUID=6ad166b3-24c5-4c1b-9282-570a00ab5a18
TYPE=Ethernet
NAME=ens37
UUID=2d6705cf-44da-41d2-ae4e-36996a20f0d4
DEVICE=ens37
ONBOOT=yes
MASTER=bond1
SLAVE=yes
MASTER_UUID=6ad166b3-24c5-4c1b-9282-570a00ab5a18
3.2 Debian系(Ubuntu)
3.2.1 聚合端口配置VLAN标签
编辑vi /etc/network/interfaces文件,内容如下
vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
auto ens36
iface ens36 inet manual
bond-master bond0
auto ens37
iface ens37 inet manual
pre-up sleep 5
bond-master bond0
auto bond0
iface bond0 inet manual
bond-mode 4
bond-miimon 100
bond-lacp-rate 1
bond-slaves ens36 ens37
# mgmt network
auto vlan2
iface vlan2 inet static
address 192.168.10.2
netmask 255.255.255.0
gateway 192.168.10.254
vlan_raw_device bond0
17.10以后或使用netplan管理网络的系统配置方法如下,给bond-yewu聚合口配置vlan标记
#more /etc/netplan/01-network-manager-all.yaml
network:
version: 2
renderer: networkd
ethernets:
enp1s0:
dhcp4: no
enp2s0:
dhcp4: no
enp3s0:
dhcp4: no
optional: true
enp4s0:
dhcp4: no
optional: true
enp5s0:
dhcp4: no
optional: true
enp6s0:
dhcp4: no
optional: true
bonds:
bond-guanli:
interfaces: [enp2s0, enp3s0]
addresses: [192.168.93.2/24]
parameters:
mode: 802.3ad
mii-monitor-interval: 1
bond-yewu:
interfaces: [enp1s0, enp4s0]
parameters:
mode: active-backup
mii-monitor-interval: 1
gratuitious-arp: 5
vlan:
vlan10:
id: 10
link: bond-yewu
addresses: [192.168.254.2/24]
nameservers:
search: [local]
addresses: [8.8.8.8, 8.8.4.4]
routes:
- to: default
via: 192.168.1.1
3.2.2 单端口配置VLAN标签
vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
auto ens36
iface ens36 inet manual
# mgmt network
auto vlan2
iface vlan2 inet static
address 192.168.10.2
netmask 255.255.255.0
gateway 192.168.10.254
vlan_raw_device ens36
17.10以后或使用netplan管理网络的系统配置方法如下,给ens聚合口配置vlan标记
#more /etc/netplan/01-network-manager-all.yaml
network:
version: 2
renderer: networkd
ethernets:
enp1s0:
dhcp4: no
enp2s0:
dhcp4: no
enp3s0:
dhcp4: no
optional: true
enp4s0:
dhcp4: no
optional: true
enp5s0:
dhcp4: no
optional: true
enp6s0:
dhcp4: no
optional: true
vlan:
vlan10:
id: 10
link: enp1s0
addresses: [192.168.254.2/24]
nameservers:
search: [local]
addresses: [8.8.8.8, 8.8.4.4]
routes:
- to: default
via: 192.168.1.1