为什么要进行双网卡绑定
1. 提高网络带宽(负载均衡)
网卡绑定可以将多个物理网络接口聚合成一个逻辑接口(bond
),从而实现带宽的叠加。通过绑定,多个物理网卡可以同时发送和接收数据,这样网络带宽就可以得到有效的提高。
- 场景: 在需要高网络吞吐量的环境中,比如文件服务器、大型数据库服务器或虚拟化主机,网卡绑定可以显著提高数据传输速率。
2. 提供高可用性(冗余)
通过将多个网卡绑定在一起,如果其中一个网卡或其连接的交换机端口发生故障,流量会自动切换到另一个网卡。这种冗余设计可以提高网络连接的可靠性和可用性。
- 场景: 在关键应用或服务(如金融交易系统、电子商务平台或企业内部系统)中,高可用性非常重要。网卡绑定可以防止单一网卡或网络链路故障导致服务中断。
3. 提升容错能力
双网卡绑定提供了容错能力,当一个网卡、交换机端口或网络电缆失效时,系统可以自动切换到另一个正常工作的网卡。这种能力确保了网络的持续可用性和稳定性。
- 场景: 数据中心、云服务提供商和企业内部网络都需要这种容错能力来确保业务连续性。
4. 提高数据传输的灵活性
通过使用不同的绑定模式(如 balance-rr
、active-backup
、802.3ad
等),可以灵活地根据具体的网络需求和硬件设备的支持情况来优化数据传输策略。
- 场景: 在不同的应用场景下(如负载均衡、高性能计算、数据备份等),可以选择适合的绑定模式来优化网络性能。
5. 简化网络配置管理
在某些情况下,使用绑定的逻辑接口可以简化网络配置和管理。对于需要多重网络路径的复杂网络架构,网卡绑定可以通过一个逻辑接口统一管理,从而简化了配置和监控。
- 场景: 在虚拟化环境中(如 KVM 或 VMware ESXi),通过绑定虚拟机的多个网络接口,管理员可以简化网络配置和管理,同时增强性能和可靠性。
6. 硬件或设备冗余
双网卡绑定不仅提供了网卡级别的冗余,还可以在交换机或网络设备层面实现冗余。例如,两个网卡可以连接到不同的交换机,这样即使一个交换机发生故障,流量仍然可以通过另一个交换机。
- 场景: 在数据中心或关键任务环境中,通常会部署多个交换机用于冗余。通过网卡绑定可以利用这种网络拓扑,实现更高的冗余性和故障恢复能力。
常见的网卡绑定模式
不同的网卡绑定模式适用于不同的场景和需求:
balance-rr
(轮询): 数据包在所有网卡之间轮流发送,提供带宽聚合和冗余,但可能导致数据包失序。active-backup
(主备): 一个网卡处于活动状态,另一个作为备份,仅在主网卡失效时启用备份网卡,适用于需要高可用性的场景。balance-xor
(异或平衡): 基于源 MAC 地址、目标 MAC 地址或 IP 地址的哈希算法,提供负载均衡和冗余。broadcast
(广播): 数据包发送到所有绑定的网卡,主要用于需要所有路径都同时收到相同数据的场景。802.3ad
(LACP 动态链路聚合): 使用链路聚合控制协议(LACP)动态创建和管理链路聚合组,提供带宽聚合和冗余,要求交换机支持LACP
。balance-tlb
(传输负载均衡): 动态调整传输负载的平衡,根据网卡的负载自动分配流量。balance-alb
(自适应负载均衡): 结合了传输负载均衡和接收负载均衡,在某些硬件条件下提供最优性能
具体操作
bond双网卡绑定
添加网卡
1.手动物理添加两块网卡块网卡(根据需要可以让添加多张)
2.查看网卡的设备名
[root@NB ~]# nmcli device
DEVICE TYPE STATE CONNECTION
ens160 ethernet 未连接 --
ens224 ethernet 未连接 --
virbr0 bridge 连接(外部) virbr0
lo loopback 未托管 --
virbr0-nic tun 未托管 --
[root@NB ~]#
3.在虚拟机内添加网卡
nmcli con add type ethernet ifname ens136(同设备名) con-name(任意取或同设备名) ens160
nmcli con add type ethernet ifname ens224 con-name ens224
4.给网卡设置IP地址,子网,网关,DNS
nmcli con modify ens160 ipv4.method manual ipv4.address 192.168.1.3/24 ipv4.gateway 192.168.1.2 ipv4.dns 114.114.114.114 autoconnect yes
nmcli con modify ens160 ipv4.method manual ipv4.address 192.168.1.4/24 ipv4.gateway 192.168.1.2 ipv4.dns 114.114.114.114 autoconnect yes
5.开启网卡使设备生效
nmcli con up ens160
nmcli con up ens224
#查看设备是否生效
[root@NB ~]# nmcli device
DEVICE TYPE STATE CONNECTION
ens160 ethernet 已连接 ens160
ens224 ethernet 已连接 ens224
virbr0 bridge 连接(外部) virbr0
创建虚拟网卡设备
1.创建网卡bond0
nmcli con add type bond ifname bond0 con-name bond0 mode active-backup
[root@NB ~]# nmcli con add type bond ifname bond0 con-name bond0 mode active-backup
连接 "bond0" (6d91c8f8-1291-48de-8509-8dcaf803251b) 已成功添加。
2.查看设备
[root@NB ~]# nmcli device
DEVICE TYPE STATE CONNECTION
ens160 ethernet 已连接 ens160
ens224 ethernet 已连接 ens224
virbr0 bridge 连接(外部) virbr0
bond0 bond 连接中(正在获取 IP 配置) bond0
3.给虚拟网卡配置IP等相关参数
[root@NB ~]# nmcli con modify bond0 ipv4.method manual ipv4.addresses 192.168.1.5/24 ipv4.gateway 192.168.1.2 ipv4.dns 114.114.114.114 autoconnect yes
4.将两外两张网卡绑定到虚拟网卡设备上
[root@NB ~]# nmcli con add type ethernet slave-type bond ifname ens160 con-name slave-bond0-ens160 master bond0
连接 "slave-bond0-ens160" (dc571b44-5f1a-41cb-a7ac-77de9c2d5d39) 已成功添加。
[root@NB ~]# nmcli con add type ethernet slave-type bond ifname ens224 con-name slave-bond0-ens224 master bond0
连接 "slave-bond0-ens224" (8cd0be9d-c0d8-4fdd-a179-4cf22ac2be0e) 已成功添加。
[root@NB ~]#
5.开启网卡使设备生效
[root@NB ~]# nmcli con up bond0
连接已成功激活(master waiting for slaves)(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/11)
[root@NB ~]# nmcli con up slave-bond0-ens160
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/12)
[root@NB ~]# nmcli con up slave-bond0-ens224
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/13)
[root@NB ~]#
6.查看设备
[root@NB ~]# nmcli device
DEVICE TYPE STATE CONNECTION
bond0 bond 已连接 bond0
virbr0 bridge 连接(外部) virbr0
ens160 ethernet 已连接 slave-bond0-ens160
ens224 ethernet 已连接 slave-bond0-ens224
lo loopback 未托管 --
virbr0-nic tun 未托管 --
[root@NB ~]# nmcli con show
NAME UUID TYPE DEVICE
bond0 6d91c8f8-1291-48de-8509-8dcaf803251b bond bond0
virbr0 d6413b70-683e-4142-8acc-d34c929fc444 bridge virbr0
slave-bond0-ens160 dc571b44-5f1a-41cb-a7ac-77de9c2d5d39 ethernet ens160
slave-bond0-ens224 8cd0be9d-c0d8-4fdd-a179-4cf22ac2be0e ethernet ens224
ens160 109d2432-6ec9-495b-88e8-12ea4810da1d ethernet --
ens224 191ce870-8166-49ae-a1b6-6d2041600ced ethernet --
[root@NB ~]#
#此时使用命令查看,设备中只有一张网卡bond0有IP可以工作,两外两张网卡是绑定到了bond0上面,实现数据的分流负载,提高了效率及可靠性
[root@NB ~]# ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 192.168.1.5 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 fe80::61b8:762d:c735:67e8 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:46:4a:5e txqueuelen 1000 (Ethernet)
RX packets 17 bytes 1860 (1.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32 bytes 3314 (3.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens160: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 00:0c:29:46:4a:5e txqueuelen 1000 (Ethernet)
RX packets 17 bytes 1860 (1.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 32 bytes 3314 (3.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens224: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 00:0c:29:46:4a:5e txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#使用命令查看目前是ens160这张网卡在工作
[root@NB ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v4.18.0-305.el8.x86_64
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens160
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
Slave Interface: ens160
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:46:4a:5e
Slave queue ID: 0
Slave Interface: ens224
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:46:4a:68
Slave queue ID: 0
[root@NB ~]#
#我们手动挂掉一张网卡设备,再次查看一下
[root@NB ~]# nmcli con down slave-bond0-ens160
成功停用连接 "slave-bond0-ens160"(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/15)
[root@NB ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v4.18.0-305.el8.x86_64
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: ens224
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Peer Notification Delay (ms): 0
Slave Interface: ens224
MII Status: up
Speed: 10000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:46:4a:68
Slave queue ID: 0
#这时我们发现,的虽然其中的一张网卡挂掉了,但是,还有另一张网卡可以工作,大大的提高了网络的稳定性和可靠性
team双网卡绑定
建立虚拟网卡team0
[root@NB ~]# nmcli connection add type team ifname team0 con-name team0 autoconnect yes config '{"runner": {"name": "activebackup"}}'
连接 "team0" (fa7d3398-cffd-4e36-ab13-624a11a6c68c) 已成功添加。
[root@NB ~]#
//解释
nmcli connection 添加 类型 team 网卡名 team0 配置文件名 team0 每次开机自动连接 链路聚合工作方式 热备份方式
添加成员
[root@NB ~]# nmcli connection add type ethernet slave-type team ifname ens160 con-name team0-1 autoconnect yes master team0
连接 "team0-1" (92e994bc-ecdc-462e-88ae-1d451842b0e9) 已成功添加。
[root@NB ~]# nmcli connection add type ethernet slave-type team ifname ens224 con-name team0-2 autoconnect yes master team0
连接 "team0-2" (70dec2e1-e177-4ea8-8a0d-116598f4dd77) 已成功添加。
[root@NB ~]#
设置IP地址 子网掩码 网关
[root@NB ~]# nmcli connection modify team0 ipv4.method manual ipv4.address 192.168.1.5/24 ipv4.gateway 192.168.1.2 ipv4.dns 114.114.114.114 connection.autoconnect yes
开启网卡使之生效
[root@NB ~]# nmcli con up team0
连接已成功激活(master waiting for slaves)(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/19)
[root@NB ~]# nmcli con up team0-1
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/20)
[root@NB ~]# nmcli con up team0-2
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/21)
[root@NB ~]#